From c12c9b08f78684198f537f08c44b647dd7db08ff Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Thu, 7 Apr 2022 19:46:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BD=93=E6=97=A5=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/models/stats/traffic_daily_stat_dao.go | 12 +++++ internal/nodes/api_node_services.go | 6 +++ .../services/service_traffic_daily_stat.go | 49 +++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 internal/rpc/services/service_traffic_daily_stat.go diff --git a/internal/db/models/stats/traffic_daily_stat_dao.go b/internal/db/models/stats/traffic_daily_stat_dao.go index 929054d9..ab07fee1 100644 --- a/internal/db/models/stats/traffic_daily_stat_dao.go +++ b/internal/db/models/stats/traffic_daily_stat_dao.go @@ -112,6 +112,18 @@ func (this *TrafficDailyStatDAO) FindDailyStats(tx *dbs.Tx, dayFrom string, dayT return result, nil } +// FindDailyStat 查找某天的统计 +func (this *TrafficDailyStatDAO) FindDailyStat(tx *dbs.Tx, day string) (*TrafficDailyStat, error) { + one, err := this.Query(tx). + Attr("day", day). + Find() + if err != nil || one == nil { + return nil, err + } + + return one.(*TrafficDailyStat), nil +} + // Clean 清理历史数据 func (this *TrafficDailyStatDAO) Clean(tx *dbs.Tx, days int) error { var day = timeutil.Format("Ymd", time.Now().AddDate(0, 0, -days)) diff --git a/internal/nodes/api_node_services.go b/internal/nodes/api_node_services.go index a2702ffa..da514d40 100644 --- a/internal/nodes/api_node_services.go +++ b/internal/nodes/api_node_services.go @@ -564,6 +564,12 @@ func (this *APINode) registerServices(server *grpc.Server) { this.rest(instance) } + { + instance := this.serviceInstance(&services.TrafficDailyStatService{}).(*services.TrafficDailyStatService) + pb.RegisterTrafficDailyStatServiceServer(server, instance) + this.rest(instance) + } + APINodeServicesRegister(this, server) // TODO check service names diff --git a/internal/rpc/services/service_traffic_daily_stat.go b/internal/rpc/services/service_traffic_daily_stat.go new file mode 100644 index 00000000..7bb6869f --- /dev/null +++ b/internal/rpc/services/service_traffic_daily_stat.go @@ -0,0 +1,49 @@ +// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package services + +import ( + "context" + "github.com/TeaOSLab/EdgeAPI/internal/db/models/stats" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + timeutil "github.com/iwind/TeaGo/utils/time" +) + +// TrafficDailyStatService 按日统计服务 +type TrafficDailyStatService struct { + BaseService +} + +// FindTrafficDailyStatWithDay 查找某日统计 +func (this *TrafficDailyStatService) FindTrafficDailyStatWithDay(ctx context.Context, req *pb.FindTrafficDailyStatWithDayRequest) (*pb.FindTrafficDailyStatWithDayResponse, error) { + _, err := this.ValidateAdmin(ctx, 0) + if err != nil { + return nil, err + } + + var tx = this.NullTx() + var day = timeutil.Format("Ymd") + stat, err := stats.SharedTrafficDailyStatDAO.FindDailyStat(tx, day) + if err != nil { + return nil, err + } + + if stat == nil { + return &pb.FindTrafficDailyStatWithDayResponse{ + TrafficDailyStat: nil, + }, nil + } + + return &pb.FindTrafficDailyStatWithDayResponse{ + TrafficDailyStat: &pb.TrafficDailyStat{ + Id: int64(stat.Id), + Day: stat.Day, + CachedBytes: int64(stat.CachedBytes), + Bytes: int64(stat.Bytes), + CountRequests: int64(stat.CountRequests), + CountCachedRequests: int64(stat.CountCachedRequests), + CountAttackRequests: int64(stat.CountAttackRequests), + AttackBytes: int64(stat.AttackBytes), + }, + }, nil +}