99 lines
3.1 KiB
Go
99 lines
3.1 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// Website 网站信息
|
|
type Website struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"` // 网站名称
|
|
Group string `json:"group"` // 所属分组
|
|
URLs []URLInfo `json:"urls"` // 网站访问地址列表
|
|
Favicon string `json:"favicon"` // 网站图标URL
|
|
Title string `json:"title"` // 网站标题
|
|
CreatedAt time.Time `json:"created_at"` // 创建时间
|
|
UpdatedAt time.Time `json:"updated_at"` // 更新时间
|
|
}
|
|
|
|
// URLInfo 单个URL的信息
|
|
type URLInfo struct {
|
|
ID string `json:"id"`
|
|
URL string `json:"url"` // 访问地址
|
|
Remark string `json:"remark"` // 备注说明
|
|
}
|
|
|
|
// MonitorRecord 监控记录
|
|
type MonitorRecord struct {
|
|
WebsiteID string `json:"website_id"`
|
|
URLID string `json:"url_id"`
|
|
URL string `json:"url"`
|
|
StatusCode int `json:"status_code"` // HTTP状态码
|
|
Latency int64 `json:"latency"` // 延迟(毫秒)
|
|
IsUp bool `json:"is_up"` // 是否可访问
|
|
Error string `json:"error"` // 错误信息
|
|
CheckedAt time.Time `json:"checked_at"` // 检测时间
|
|
}
|
|
|
|
// WebsiteStatus 网站状态(用于前端展示)
|
|
type WebsiteStatus struct {
|
|
Website Website `json:"website"`
|
|
URLStatuses []URLStatus `json:"url_statuses"`
|
|
Uptime24h float64 `json:"uptime_24h"` // 24小时可用率
|
|
Uptime7d float64 `json:"uptime_7d"` // 7天可用率
|
|
LastChecked time.Time `json:"last_checked"` // 最后检测时间
|
|
}
|
|
|
|
// URLStatus 单个URL的状态
|
|
type URLStatus struct {
|
|
URLInfo URLInfo `json:"url_info"`
|
|
CurrentState MonitorRecord `json:"current_state"` // 当前状态
|
|
History24h []MonitorRecord `json:"history_24h"` // 24小时历史
|
|
History7d []HourlyStats `json:"history_7d"` // 7天按小时统计
|
|
Uptime24h float64 `json:"uptime_24h"` // 24小时可用率
|
|
Uptime7d float64 `json:"uptime_7d"` // 7天可用率
|
|
AvgLatency int64 `json:"avg_latency"` // 平均延迟
|
|
}
|
|
|
|
// HourlyStats 每小时统计
|
|
type HourlyStats struct {
|
|
Hour time.Time `json:"hour"`
|
|
TotalCount int `json:"total_count"`
|
|
UpCount int `json:"up_count"`
|
|
AvgLatency int64 `json:"avg_latency"`
|
|
Uptime float64 `json:"uptime"`
|
|
}
|
|
|
|
// Group 分组
|
|
type Group struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// DefaultGroups 默认分组
|
|
var DefaultGroups = []Group{
|
|
{ID: "normal", Name: "普通网站"},
|
|
{ID: "admin", Name: "管理员网站"},
|
|
}
|
|
|
|
// CreateWebsiteRequest 创建网站请求
|
|
type CreateWebsiteRequest struct {
|
|
Name string `json:"name" binding:"required"`
|
|
Group string `json:"group" binding:"required"`
|
|
URLs []string `json:"urls" binding:"required,min=1"`
|
|
}
|
|
|
|
// UpdateWebsiteRequest 更新网站请求
|
|
type UpdateWebsiteRequest struct {
|
|
Name string `json:"name"`
|
|
Group string `json:"group"`
|
|
URLs []string `json:"urls"`
|
|
}
|
|
|
|
// APIResponse API响应
|
|
type APIResponse struct {
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
Data interface{} `json:"data,omitempty"`
|
|
}
|