Files
mengyaping/mengyaping-backend/storage/db_models.go
2026-05-16 19:03:32 +08:00

94 lines
3.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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" }