diff --git a/internal/db/models/server_daily_stat_dao.go b/internal/db/models/server_daily_stat_dao.go index d2b702db..c4fa20e8 100644 --- a/internal/db/models/server_daily_stat_dao.go +++ b/internal/db/models/server_daily_stat_dao.go @@ -195,15 +195,20 @@ func (this *ServerDailyStatDAO) SumUserMonthlyPeek(tx *dbs.Tx, userId int64, reg // SumUserDaily 获取某天流量总和 // day 格式为YYYYMMDD -func (this *ServerDailyStatDAO) SumUserDaily(tx *dbs.Tx, userId int64, regionId int64, day string) (int64, error) { +func (this *ServerDailyStatDAO) SumUserDaily(tx *dbs.Tx, userId int64, regionId int64, day string) (stat *ServerDailyStat, err error) { var query = this.Query(tx) if regionId > 0 { query.Attr("regionId", regionId) } - return query. - Attr("day", day). + + one, err := query.Attr("day", day). Attr("userId", userId). - SumInt64("bytes", 0) + Result("SUM(bytes) AS bytes", "SUM(cachedBytes) AS cachedBytes", "SUM(attackBytes) AS attackBytes", "SUM(countRequests) AS countRequests", "SUM(countCachedRequests) AS countCachedRequests", "SUM(countAttackRequests) AS countAttackRequests"). + Find() + if err != nil || one == nil { + return nil, err + } + return one.(*ServerDailyStat), nil } // SumUserTrafficBytesBetweenDays 获取用户某个日期段内的流量总和 diff --git a/internal/rpc/services/users/service_user.go b/internal/rpc/services/users/service_user.go index 3e10f1dc..50b3cb86 100644 --- a/internal/rpc/services/users/service_user.go +++ b/internal/rpc/services/users/service_user.go @@ -445,10 +445,13 @@ func (this *UserService) ComposeUserDashboard(ctx context.Context, req *pb.Compo } // 今日总流量 - dailyTrafficBytes, err := models.SharedServerDailyStatDAO.SumUserDaily(tx, req.UserId, 0, currentDay) + dailyTrafficStat, err := models.SharedServerDailyStatDAO.SumUserDaily(tx, req.UserId, 0, currentDay) if err != nil { return nil, err } + if dailyTrafficStat == nil { + dailyTrafficStat = &models.ServerDailyStat{} + } // 近 30 日流量带宽趋势 var dailyTrafficStats = []*pb.ComposeUserDashboardResponse_DailyTrafficStat{} @@ -466,10 +469,13 @@ func (this *UserService) ComposeUserDashboard(ctx context.Context, req *pb.Compo } // 流量 - trafficBytes, err := models.SharedServerDailyStatDAO.SumUserDaily(tx, req.UserId, 0, day) + trafficStat, err := models.SharedServerDailyStatDAO.SumUserDaily(tx, req.UserId, 0, day) if err != nil { return nil, err } + if trafficStat == nil { + trafficStat = &models.ServerDailyStat{} + } // 峰值带宽 peekBandwidthBytesStat, err := models.SharedUserBandwidthStatDAO.FindUserPeekBandwidthInDay(tx, req.UserId, day) @@ -481,14 +487,22 @@ func (this *UserService) ComposeUserDashboard(ctx context.Context, req *pb.Compo peekBandwidthBytes = int64(peekBandwidthBytesStat.Bytes) } - dailyTrafficStats = append(dailyTrafficStats, &pb.ComposeUserDashboardResponse_DailyTrafficStat{Day: day, Bytes: trafficBytes}) + dailyTrafficStats = append(dailyTrafficStats, &pb.ComposeUserDashboardResponse_DailyTrafficStat{ + Day: day, + Bytes: int64(trafficStat.Bytes), + CachedBytes: int64(trafficStat.CachedBytes), + AttackBytes: int64(trafficStat.AttackBytes), + CountRequests: int64(trafficStat.CountRequests), + CountCachedRequests: int64(trafficStat.CountCachedRequests), + CountAttackRequests: int64(trafficStat.CountAttackRequests), + }) dailyPeekBandwidthStats = append(dailyPeekBandwidthStats, &pb.ComposeUserDashboardResponse_DailyPeekBandwidthStat{Day: day, Bytes: peekBandwidthBytes}) } var result = &pb.ComposeUserDashboardResponse{ CountServers: countServers, MonthlyTrafficBytes: monthlyTrafficBytes, MonthlyPeekBandwidthBytes: monthlyPeekBandwidthBytes, - DailyTrafficBytes: dailyTrafficBytes, + DailyTrafficBytes: int64(dailyTrafficStat.Bytes), DailyPeekBandwidthBytes: dailyPeekBandwidthBytes, DailyTrafficStats: dailyTrafficStats, DailyPeekBandwidthStats: dailyPeekBandwidthStats,