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 +}