// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. package boards import ( "fmt" "github.com/TeaOSLab/EdgeAdmin/internal/utils/numberutils" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/maps" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) type ValuesAction struct { actionutils.ParentAction } func (this *ValuesAction) RunPost(params struct{}) { resp, err := this.RPC().NodeValueRPC().SumAllNodeValueStats(this.AdminContext(), &pb.SumAllNodeValueStatsRequest{}) if err != nil { this.ErrorPage(err) return } var resultBytes = resp.TotalTrafficBytesPerSecond // 当天流量统计 trafficDailyStatResp, err := this.RPC().TrafficDailyStatRPC().FindTrafficDailyStatWithDay(this.AdminContext(), &pb.FindTrafficDailyStatWithDayRequest{Day: timeutil.Format("Ymd")}) if err != nil { this.ErrorPage(err) return } var todayTrafficBytes int64 = 0 var todayTrafficFormat = "0B" if trafficDailyStatResp.TrafficDailyStat != nil { todayTrafficBytes = trafficDailyStatResp.TrafficDailyStat.Bytes todayTrafficFormat = numberutils.FormatBytes(todayTrafficBytes) } // 昨天同期流量 yesterdayTrafficResp, err := this.RPC().TrafficDailyStatRPC().FindTrafficDailyStatWithDay(this.AdminContext(), &pb.FindTrafficDailyStatWithDayRequest{ Day: timeutil.Format("Ymd", time.Now().AddDate(0, 0, -1)), Minute: timeutil.Format("His"), }) if err != nil { this.ErrorPage(err) return } var yesterdayPercentFormat = "" if yesterdayTrafficResp.TrafficDailyStat != nil { var yesterdayTrafficBytes = yesterdayTrafficResp.TrafficDailyStat.Bytes if yesterdayTrafficBytes > 0 { var percent = float64((todayTrafficBytes-yesterdayTrafficBytes)*100) / float64(yesterdayTrafficBytes) if percent > 0.01 { yesterdayPercentFormat = "+" + fmt.Sprintf("%.2f", percent) } else if percent < 0.01 { yesterdayPercentFormat = fmt.Sprintf("%.2f", percent) } } } this.Data["stat"] = maps.Map{ "totalTrafficBytesPerSecond": resultBytes, "totalTrafficPerSecondFormat": numberutils.FormatBits(resultBytes * 8), "avgCPUUsage": resp.AvgCPUUsage * 100, "avgCPUUsageFormat": fmt.Sprintf("%.2f", resp.AvgCPUUsage*100), "maxCPUUsage": resp.MaxCPUUsage * 100, "totalCPUCores": resp.TotalCPUCores, "avgMemoryUsage": resp.AvgMemoryUsage * 100, "avgMemoryUsageFormat": fmt.Sprintf("%.2f", resp.AvgMemoryUsage*100), "maxMemoryUsage": resp.MaxMemoryUsage * 100, "totalMemoryBytes": resp.TotalMemoryBytes, "totalMemoryFormat": numberutils.FormatBytes(resp.TotalMemoryBytes), "avgLoad1min": resp.AvgLoad1Min, "avgLoad1minFormat": fmt.Sprintf("%.2f", resp.AvgLoad1Min), "maxLoad1min": resp.MaxLoad1Min, "avgLoad5min": resp.AvgLoad5Min, "avgLoad5minFormat": fmt.Sprintf("%.2f", resp.AvgLoad5Min), "todayTrafficFormat": todayTrafficFormat, "yesterdayPercentFormat": yesterdayPercentFormat, } this.Success() }