From 3b2f6060b863072ef68abbf2dcddf5e39e7c0ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Wed, 28 Jul 2021 17:04:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E7=BB=9F=E8=AE=A1=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=97=B6=E8=87=AA=E5=8A=A8=E6=B8=85=E7=90=86=E6=97=A7?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/metric_item_dao.go | 2 +- internal/db/models/metric_stat_dao.go | 16 ++++++++++++++-- internal/db/models/metric_stat_dao_test.go | 12 ++++++++++++ internal/db/models/node_value_dao_test.go | 2 +- internal/rpc/services/service_metric_stat.go | 6 ++++++ 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/internal/db/models/metric_item_dao.go b/internal/db/models/metric_item_dao.go index d56a7959..e9fa2604 100644 --- a/internal/db/models/metric_item_dao.go +++ b/internal/db/models/metric_item_dao.go @@ -195,7 +195,7 @@ func (this *MetricItemDAO) UpdateItem(tx *dbs.Tx, itemId int64, name string, key // 删除旧数据 if versionChanged { - err := SharedMetricStatDAO.DeleteOldItemStats(tx, itemId, types.Int32(oldItem.Version+1)) + err := SharedMetricStatDAO.DeleteOldVersionItemStats(tx, itemId, types.Int32(oldItem.Version+1)) if err != nil { return err } diff --git a/internal/db/models/metric_stat_dao.go b/internal/db/models/metric_stat_dao.go index 3c506dc1..d1a0b7d8 100644 --- a/internal/db/models/metric_stat_dao.go +++ b/internal/db/models/metric_stat_dao.go @@ -81,8 +81,8 @@ func (this *MetricStatDAO) CreateStat(tx *dbs.Tx, hash string, clusterId int64, }) } -// DeleteOldItemStats 删除以前版本的统计数据 -func (this *MetricStatDAO) DeleteOldItemStats(tx *dbs.Tx, itemId int64, version int32) error { +// DeleteOldVersionItemStats 删除以前版本的统计数据 +func (this *MetricStatDAO) DeleteOldVersionItemStats(tx *dbs.Tx, itemId int64, version int32) error { _, err := this.Query(tx). Attr("itemId", itemId). Where("version<:version"). @@ -99,6 +99,17 @@ func (this *MetricStatDAO) DeleteItemStats(tx *dbs.Tx, itemId int64) error { return err } +// DeleteNodeItemStats 删除某个节点的统计数据 +func (this *MetricStatDAO) DeleteNodeItemStats(tx *dbs.Tx, nodeId int64, serverId int64, itemId int64, time string) error { + _, err := this.Query(tx). + Attr("nodeId", nodeId). + Attr("serverId", serverId). + Attr("itemId", itemId). + Attr("time", time). + Delete() + return err +} + // CountItemStats 计算统计数据数量 func (this *MetricStatDAO) CountItemStats(tx *dbs.Tx, itemId int64, version int32) (int64, error) { return this.Query(tx). @@ -134,6 +145,7 @@ func (this *MetricStatDAO) FindItemStatsAtLastTime(tx *dbs.Tx, itemId int64, ign if err != nil { return nil, err } + if statOne == nil { return nil, nil } diff --git a/internal/db/models/metric_stat_dao_test.go b/internal/db/models/metric_stat_dao_test.go index 224e9db7..de249156 100644 --- a/internal/db/models/metric_stat_dao_test.go +++ b/internal/db/models/metric_stat_dao_test.go @@ -3,4 +3,16 @@ package models import ( _ "github.com/go-sql-driver/mysql" _ "github.com/iwind/TeaGo/bootstrap" + "github.com/iwind/TeaGo/types" + "testing" ) + +func TestNewMetricStatDAO_InsertMany(t *testing.T) { + for i := 0; i <= 1; i++ { + err := NewMetricStatDAO().CreateStat(nil, types.String(i) + "_v1", 18, 48, 23, 25, []string{"/html" + types.String(i)}, 1, "20210728", 0) + if err != nil { + t.Fatal(err) + } + } + t.Log("done") +} diff --git a/internal/db/models/node_value_dao_test.go b/internal/db/models/node_value_dao_test.go index ddfc73bd..49d1fc8b 100644 --- a/internal/db/models/node_value_dao_test.go +++ b/internal/db/models/node_value_dao_test.go @@ -14,7 +14,7 @@ func TestNodeValueDAO_CreateValue(t *testing.T) { m := maps.Map{ "hello": "world12344", } - err := dao.CreateValue(nil, nodeconfigs.NodeRoleNode, 1, "test", m.AsJSON(), time.Now().Unix()) + err := dao.CreateValue(nil, 1, nodeconfigs.NodeRoleNode, 1, "test", m.AsJSON(), time.Now().Unix()) if err != nil { t.Fatal(err) } diff --git a/internal/rpc/services/service_metric_stat.go b/internal/rpc/services/service_metric_stat.go index 73a7cee0..92f38d3a 100644 --- a/internal/rpc/services/service_metric_stat.go +++ b/internal/rpc/services/service_metric_stat.go @@ -27,6 +27,12 @@ func (this *MetricStatService) UploadMetricStats(ctx context.Context, req *pb.Up return nil, err } + // 删除旧的数据 + err = models.SharedMetricStatDAO.DeleteNodeItemStats(tx, nodeId, req.ServerId, req.ItemId, req.Time) + if err != nil { + return nil, err + } + for _, stat := range req.MetricStats { err := models.SharedMetricStatDAO.CreateStat(tx, stat.Hash, clusterId, nodeId, req.ServerId, req.ItemId, stat.Keys, float64(stat.Value), req.Time, req.Version) if err != nil {