diff --git a/internal/db/models/sys_setting_dao.go b/internal/db/models/sys_setting_dao.go index bde4ba94..1a22e445 100644 --- a/internal/db/models/sys_setting_dao.go +++ b/internal/db/models/sys_setting_dao.go @@ -172,6 +172,24 @@ func (this *SysSettingDAO) ReadAdminUIConfig(tx *dbs.Tx, cacheMap *utils.CacheMa return &systemconfigs.AdminUIConfig{}, nil } +// ReadUserUIConfig 读取用户UI配置 +func (this *SysSettingDAO) ReadUserUIConfig(tx *dbs.Tx) (*systemconfigs.UserUIConfig, error) { + valueJSON, err := this.ReadSetting(tx, systemconfigs.SettingCodeUserUIConfig) + if err != nil { + return nil, err + } + if len(valueJSON) == 0 { + return systemconfigs.DefaultUserUIConfig(), nil + } + + var config = systemconfigs.DefaultUserUIConfig() + err = json.Unmarshal(valueJSON, config) + if err != nil { + return nil, err + } + return config, nil +} + // NotifyUpdate 通知更改 func (this *SysSettingDAO) NotifyUpdate(tx *dbs.Tx, code string) error { switch code { diff --git a/internal/rpc/services/service_user.go b/internal/rpc/services/service_user.go index 88d20707..48110798 100644 --- a/internal/rpc/services/service_user.go +++ b/internal/rpc/services/service_user.go @@ -483,8 +483,16 @@ func (this *UserService) ComposeUserDashboard(ctx context.Context, req *pb.Compo var dailyTrafficStats = []*pb.ComposeUserDashboardResponse_DailyTrafficStat{} var dailyPeekBandwidthStats = []*pb.ComposeUserDashboardResponse_DailyPeekBandwidthStat{} + var dayFrom = "" + var dayTo = "" for i := 30; i >= 0; i-- { var day = timeutil.Format("Ymd", time.Now().AddDate(0, 0, -i)) + if len(dayFrom) == 0 { + dayFrom = day + } + if len(dayTo) == 0 || day > dayTo { + dayTo = day + } // 流量 trafficBytes, err := models.SharedServerDailyStatDAO.SumUserDaily(tx, req.UserId, 0, day) @@ -505,8 +513,7 @@ func (this *UserService) ComposeUserDashboard(ctx context.Context, req *pb.Compo dailyTrafficStats = append(dailyTrafficStats, &pb.ComposeUserDashboardResponse_DailyTrafficStat{Day: day, Bytes: trafficBytes}) dailyPeekBandwidthStats = append(dailyPeekBandwidthStats, &pb.ComposeUserDashboardResponse_DailyPeekBandwidthStat{Day: day, Bytes: peekBandwidthBytes}) } - - return &pb.ComposeUserDashboardResponse{ + var result = &pb.ComposeUserDashboardResponse{ CountServers: countServers, MonthlyTrafficBytes: monthlyTrafficBytes, MonthlyPeekBandwidthBytes: monthlyPeekBandwidthBytes, @@ -514,7 +521,24 @@ func (this *UserService) ComposeUserDashboard(ctx context.Context, req *pb.Compo DailyPeekBandwidthBytes: dailyPeekBandwidthBytes, DailyTrafficStats: dailyTrafficStats, DailyPeekBandwidthStats: dailyPeekBandwidthStats, - }, nil + } + + // 带宽百分位 + var bandwidthPercentile = systemconfigs.DefaultBandwidthPercentile + userConfig, _ := models.SharedSysSettingDAO.ReadUserUIConfig(tx) + if userConfig != nil && userConfig.TrafficStats.BandwidthPercentile > 0 { + bandwidthPercentile = userConfig.TrafficStats.BandwidthPercentile + } + result.BandwidthPercentile = bandwidthPercentile + stat, err := models.SharedUserBandwidthStatDAO.FindPercentileBetweenDays(tx, req.UserId, 0, dayFrom, dayTo, bandwidthPercentile) + if err != nil { + return nil, err + } + if stat != nil { + result.BandwidthPercentileBits = int64(stat.Bytes) * 8 + } + + return result, nil } // FindUserNodeClusterId 获取用户所在的集群ID