chore: sync local updates
This commit is contained in:
93
mengyaping-backend/storage/db_models.go
Normal file
93
mengyaping-backend/storage/db_models.go
Normal 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" }
|
||||
Reference in New Issue
Block a user