94 lines
3.6 KiB
Go
94 lines
3.6 KiB
Go
package storage
|
||
|
||
import (
|
||
"time"
|
||
|
||
"gorm.io/datatypes"
|
||
)
|
||
|
||
// MonitorGroup 网站分类(避免使用 MySQL 保留字 group)
|
||
type MonitorGroup struct {
|
||
ID string `gorm:"primaryKey;size:64"`
|
||
Name string `gorm:"size:255;not null"`
|
||
SortOrder int `gorm:"default:0;index"`
|
||
CreatedAt time.Time `gorm:"autoCreateTime"`
|
||
UpdatedAt time.Time `gorm:"autoUpdateTime"`
|
||
}
|
||
|
||
func (MonitorGroup) TableName() string { return "monitor_groups" }
|
||
|
||
// MonitorWebsite 监控站点主表
|
||
type MonitorWebsite struct {
|
||
ID string `gorm:"primaryKey;size:128"`
|
||
Name string `gorm:"size:255;not null;index"`
|
||
LegacyGroup string `gorm:"size:64;column:legacy_group"` // 旧版单分组,仅兼容
|
||
Favicon string `gorm:"type:text"`
|
||
Title string `gorm:"size:512"`
|
||
IPAddresses datatypes.JSON `gorm:"type:json"` // []string
|
||
CreatedAt time.Time `gorm:"autoCreateTime"`
|
||
UpdatedAt time.Time `gorm:"autoUpdateTime"`
|
||
|
||
URLs []MonitorWebsiteURL `gorm:"foreignKey:WebsiteID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
|
||
GroupLinks []MonitorWebsiteGroup `gorm:"foreignKey:WebsiteID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
|
||
}
|
||
|
||
func (MonitorWebsite) TableName() string { return "monitor_websites" }
|
||
|
||
// MonitorWebsiteURL 站点监控 URL(一对多)
|
||
type MonitorWebsiteURL struct {
|
||
ID uint64 `gorm:"primaryKey;autoIncrement"`
|
||
WebsiteID string `gorm:"size:128;not null;index:idx_url_site,priority:1"`
|
||
URLID string `gorm:"size:64;not null;index:idx_url_site,priority:2"`
|
||
URL string `gorm:"type:text;not null"`
|
||
Remark string `gorm:"size:512"`
|
||
SortOrder int `gorm:"default:0"`
|
||
}
|
||
|
||
func (MonitorWebsiteURL) TableName() string { return "monitor_website_urls" }
|
||
|
||
// MonitorWebsiteGroup 站点与分类多对多
|
||
type MonitorWebsiteGroup struct {
|
||
WebsiteID string `gorm:"primaryKey;size:128"`
|
||
GroupID string `gorm:"primaryKey;size:64"`
|
||
}
|
||
|
||
func (MonitorWebsiteGroup) TableName() string { return "monitor_website_groups" }
|
||
|
||
// MonitorProbeLatest 每个 URL 最新一次探测结果(不逐条存历史)
|
||
type MonitorProbeLatest struct {
|
||
WebsiteID string `gorm:"primaryKey;size:128"`
|
||
URLID string `gorm:"primaryKey;size:64"`
|
||
URL string `gorm:"type:text"`
|
||
StatusCode int `gorm:"column:status_code"`
|
||
LatencyMs int64 `gorm:"column:latency_ms"`
|
||
IsUp bool `gorm:"column:is_up"`
|
||
ErrorText string `gorm:"type:text;column:error_text"`
|
||
CheckedAt time.Time `gorm:"index"`
|
||
}
|
||
|
||
func (MonitorProbeLatest) TableName() string { return "monitor_probe_latest" }
|
||
|
||
// MonitorProbeHour 按小时汇总(用于 24h / 7d 统计与图表),行数 ≈ URL 数 × 小时数
|
||
type MonitorProbeHour struct {
|
||
WebsiteID string `gorm:"primaryKey;size:128"`
|
||
URLID string `gorm:"primaryKey;size:64"`
|
||
HourAt time.Time `gorm:"primaryKey;type:datetime"` // 整点
|
||
ProbeCount int `gorm:"default:0"`
|
||
UpCount int `gorm:"default:0"`
|
||
LatencySum int64 `gorm:"default:0"` // 总延迟 ms,均值为 sum/count
|
||
}
|
||
|
||
func (MonitorProbeHour) TableName() string { return "monitor_probe_hour" }
|
||
|
||
// MonitorProbeDay 按自然日汇总(用于 90 天柱状图),行数 ≈ URL 数 × 天数
|
||
type MonitorProbeDay struct {
|
||
WebsiteID string `gorm:"primaryKey;size:128"`
|
||
URLID string `gorm:"primaryKey;size:64"`
|
||
StatDate time.Time `gorm:"primaryKey;type:date"`
|
||
ProbeCount int `gorm:"default:0"`
|
||
UpCount int `gorm:"default:0"`
|
||
LatencySum int64 `gorm:"default:0"`
|
||
}
|
||
|
||
func (MonitorProbeDay) TableName() string { return "monitor_probe_day" }
|