chore: sync local updates

This commit is contained in:
2026-05-16 19:03:32 +08:00
parent 360a5f15b9
commit aff88ba97d
47 changed files with 3651 additions and 12175 deletions

View File

@@ -0,0 +1,93 @@
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" }