diff --git a/internal/db/models/metric_stat_dao.go b/internal/db/models/metric_stat_dao.go index 7f056313..7b00c291 100644 --- a/internal/db/models/metric_stat_dao.go +++ b/internal/db/models/metric_stat_dao.go @@ -6,12 +6,31 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/lists" + "github.com/iwind/TeaGo/logs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" + timeutil "github.com/iwind/TeaGo/utils/time" "strconv" + "time" ) type MetricStatDAO dbs.DAO +func init() { + dbs.OnReadyDone(func() { + // 清理数据任务 + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) + go func() { + for range ticker.C { + err := SharedMetricStatDAO.Clean(nil, 120) // 只保留120天 + if err != nil { + logs.Println("SharedMetricStatDAO: clean expired data failed: " + err.Error()) + } + } + }() + }) +} + func NewMetricStatDAO() *MetricStatDAO { return dbs.NewDAO(&MetricStatDAO{ DAOObject: dbs.DAOObject{ @@ -47,15 +66,16 @@ func (this *MetricStatDAO) CreateStat(tx *dbs.Tx, hash string, clusterId int64, return this.Query(tx). Param("value", value). InsertOrUpdateQuickly(maps.Map{ - "hash": hash, - "clusterId": clusterId, - "nodeId": nodeId, - "serverId": serverId, - "itemId": itemId, - "value": value, - "time": time, - "version": version, - "keys": keysString, + "hash": hash, + "clusterId": clusterId, + "nodeId": nodeId, + "serverId": serverId, + "itemId": itemId, + "value": value, + "time": time, + "version": version, + "keys": keysString, + "createdDay": timeutil.Format("Ymd"), }, maps.Map{ "value": value, }) @@ -322,3 +342,14 @@ func (this *MetricStatDAO) FindLatestItemStatsWithServerId(tx *dbs.Tx, serverId lists.Reverse(result) return } + +// Clean 清理数据 +func (this *MetricStatDAO) Clean(tx *dbs.Tx, days int64) error { + _, err := this.Query(tx). + Lt("createdDay", timeutil.FormatTime("Ymd", time.Now().Unix()-days*86400)). + Delete() + if err != nil { + return err + } + return nil +} diff --git a/internal/db/models/metric_stat_model.go b/internal/db/models/metric_stat_model.go index cb7c3735..aa6281ce 100644 --- a/internal/db/models/metric_stat_model.go +++ b/internal/db/models/metric_stat_model.go @@ -2,29 +2,31 @@ package models // MetricStat 指标统计数据 type MetricStat struct { - Id uint64 `field:"id"` // ID - Hash string `field:"hash"` // Hash值 - ClusterId uint32 `field:"clusterId"` // 集群ID - NodeId uint32 `field:"nodeId"` // 节点ID - ServerId uint32 `field:"serverId"` // 服务ID - ItemId uint64 `field:"itemId"` // 指标 - Keys string `field:"keys"` // 键值 - Value float64 `field:"value"` // 数值 - Time string `field:"time"` // 分钟值YYYYMMDDHHII - Version uint32 `field:"version"` // 版本号 + Id uint64 `field:"id"` // ID + Hash string `field:"hash"` // Hash值 + ClusterId uint32 `field:"clusterId"` // 集群ID + NodeId uint32 `field:"nodeId"` // 节点ID + ServerId uint32 `field:"serverId"` // 服务ID + ItemId uint64 `field:"itemId"` // 指标 + Keys string `field:"keys"` // 键值 + Value float64 `field:"value"` // 数值 + Time string `field:"time"` // 分钟值YYYYMMDDHHII + Version uint32 `field:"version"` // 版本号 + CreatedDay string `field:"createdDay"` // YYYYMMDD } type MetricStatOperator struct { - Id interface{} // ID - Hash interface{} // Hash值 - ClusterId interface{} // 集群ID - NodeId interface{} // 节点ID - ServerId interface{} // 服务ID - ItemId interface{} // 指标 - Keys interface{} // 键值 - Value interface{} // 数值 - Time interface{} // 分钟值YYYYMMDDHHII - Version interface{} // 版本号 + Id interface{} // ID + Hash interface{} // Hash值 + ClusterId interface{} // 集群ID + NodeId interface{} // 节点ID + ServerId interface{} // 服务ID + ItemId interface{} // 指标 + Keys interface{} // 键值 + Value interface{} // 数值 + Time interface{} // 分钟值YYYYMMDDHHII + Version interface{} // 版本号 + CreatedDay interface{} // YYYYMMDD } func NewMetricStatOperator() *MetricStatOperator { diff --git a/internal/db/models/nameservers/ns_record_hourly_stat_dao.go b/internal/db/models/nameservers/ns_record_hourly_stat_dao.go index a6ad571d..800ecc0a 100644 --- a/internal/db/models/nameservers/ns_record_hourly_stat_dao.go +++ b/internal/db/models/nameservers/ns_record_hourly_stat_dao.go @@ -8,6 +8,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) @@ -17,7 +18,7 @@ type NSRecordHourlyStatDAO dbs.DAO func init() { dbs.OnReadyDone(func() { // 清理数据任务 - var ticker = time.NewTicker(24 * time.Hour) + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) go func() { for range ticker.C { err := SharedNSRecordHourlyStatDAO.Clean(nil, 60) // 只保留60天 diff --git a/internal/db/models/server_daily_stat_dao.go b/internal/db/models/server_daily_stat_dao.go index be13be37..4bc56a39 100644 --- a/internal/db/models/server_daily_stat_dao.go +++ b/internal/db/models/server_daily_stat_dao.go @@ -8,6 +8,7 @@ import ( "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/logs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" timeutil "github.com/iwind/TeaGo/utils/time" "regexp" "time" @@ -18,7 +19,7 @@ type ServerDailyStatDAO dbs.DAO func init() { dbs.OnReadyDone(func() { // 清理数据任务 - var ticker = time.NewTicker(24 * time.Hour) + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) go func() { for range ticker.C { err := SharedServerDailyStatDAO.Clean(nil, 60) // 只保留60天 diff --git a/internal/db/models/stats/node_cluster_traffic_daily_stat_dao.go b/internal/db/models/stats/node_cluster_traffic_daily_stat_dao.go index 07388b63..743d3a3e 100644 --- a/internal/db/models/stats/node_cluster_traffic_daily_stat_dao.go +++ b/internal/db/models/stats/node_cluster_traffic_daily_stat_dao.go @@ -8,6 +8,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) @@ -17,7 +18,7 @@ type NodeClusterTrafficDailyStatDAO dbs.DAO func init() { dbs.OnReadyDone(func() { // 清理数据任务 - var ticker = time.NewTicker(24 * time.Hour) + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) go func() { for range ticker.C { err := SharedNodeClusterTrafficDailyStatDAO.Clean(nil, 60) // 只保留60天 diff --git a/internal/db/models/stats/node_traffic_daily_stat_dao.go b/internal/db/models/stats/node_traffic_daily_stat_dao.go index e79d3902..ad4de326 100644 --- a/internal/db/models/stats/node_traffic_daily_stat_dao.go +++ b/internal/db/models/stats/node_traffic_daily_stat_dao.go @@ -8,6 +8,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) @@ -17,7 +18,7 @@ type NodeTrafficDailyStatDAO dbs.DAO func init() { dbs.OnReadyDone(func() { // 清理数据任务 - var ticker = time.NewTicker(24 * time.Hour) + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) go func() { for range ticker.C { err := SharedNodeTrafficDailyStatDAO.Clean(nil, 60) // 只保留60天 diff --git a/internal/db/models/stats/node_traffic_hourly_stat_dao.go b/internal/db/models/stats/node_traffic_hourly_stat_dao.go index df3e15ee..f9618b9d 100644 --- a/internal/db/models/stats/node_traffic_hourly_stat_dao.go +++ b/internal/db/models/stats/node_traffic_hourly_stat_dao.go @@ -8,6 +8,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) @@ -17,7 +18,7 @@ type NodeTrafficHourlyStatDAO dbs.DAO func init() { dbs.OnReadyDone(func() { // 清理数据任务 - var ticker = time.NewTicker(24 * time.Hour) + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) go func() { for range ticker.C { err := SharedNodeTrafficHourlyStatDAO.Clean(nil, 60) // 只保留60天 diff --git a/internal/db/models/stats/server_domain_hourly_stat_dao.go b/internal/db/models/stats/server_domain_hourly_stat_dao.go index b4380acc..6abce0c5 100644 --- a/internal/db/models/stats/server_domain_hourly_stat_dao.go +++ b/internal/db/models/stats/server_domain_hourly_stat_dao.go @@ -7,6 +7,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) @@ -16,7 +17,7 @@ type ServerDomainHourlyStatDAO dbs.DAO func init() { dbs.OnReadyDone(func() { // 清理数据任务 - var ticker = time.NewTicker(24 * time.Hour) + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) go func() { for range ticker.C { err := SharedServerDomainHourlyStatDAO.Clean(nil, 60) // 只保留60天 diff --git a/internal/db/models/stats/server_http_firewall_daily_stat_dao.go b/internal/db/models/stats/server_http_firewall_daily_stat_dao.go index 8e647641..a610dcf3 100644 --- a/internal/db/models/stats/server_http_firewall_daily_stat_dao.go +++ b/internal/db/models/stats/server_http_firewall_daily_stat_dao.go @@ -8,6 +8,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) @@ -17,7 +18,7 @@ type ServerHTTPFirewallDailyStatDAO dbs.DAO func init() { dbs.OnReadyDone(func() { // 清理数据任务 - var ticker = time.NewTicker(24 * time.Hour) + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) go func() { for range ticker.C { err := SharedServerHTTPFirewallDailyStatDAO.Clean(nil, 60) // 只保留60天 diff --git a/internal/db/models/stats/server_http_firewall_hourly_stat_dao.go b/internal/db/models/stats/server_http_firewall_hourly_stat_dao.go index a036633b..eb0e2b3c 100644 --- a/internal/db/models/stats/server_http_firewall_hourly_stat_dao.go +++ b/internal/db/models/stats/server_http_firewall_hourly_stat_dao.go @@ -8,6 +8,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) @@ -17,7 +18,7 @@ type ServerHTTPFirewallHourlyStatDAO dbs.DAO func init() { dbs.OnReadyDone(func() { // 清理数据任务 - var ticker = time.NewTicker(24 * time.Hour) + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) go func() { for range ticker.C { err := SharedServerHTTPFirewallHourlyStatDAO.Clean(nil, 60) // 只保留60天 diff --git a/internal/db/models/stats/traffic_daily_stat_dao.go b/internal/db/models/stats/traffic_daily_stat_dao.go index 7ba004f9..71b67028 100644 --- a/internal/db/models/stats/traffic_daily_stat_dao.go +++ b/internal/db/models/stats/traffic_daily_stat_dao.go @@ -8,6 +8,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) @@ -17,7 +18,7 @@ type TrafficDailyStatDAO dbs.DAO func init() { dbs.OnReadyDone(func() { // 清理数据任务 - var ticker = time.NewTicker(24 * time.Hour) + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) go func() { for range ticker.C { err := SharedTrafficDailyStatDAO.Clean(nil, 60) // 只保留60天 diff --git a/internal/db/models/stats/traffic_hourly_stat_dao.go b/internal/db/models/stats/traffic_hourly_stat_dao.go index 65cd2dd5..e762d400 100644 --- a/internal/db/models/stats/traffic_hourly_stat_dao.go +++ b/internal/db/models/stats/traffic_hourly_stat_dao.go @@ -8,6 +8,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/rands" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) @@ -17,7 +18,7 @@ type TrafficHourlyStatDAO dbs.DAO func init() { dbs.OnReadyDone(func() { // 清理数据任务 - var ticker = time.NewTicker(24 * time.Hour) + var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour) go func() { for range ticker.C { err := SharedTrafficHourlyStatDAO.Clean(nil, 60) // 只保留60天