// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . //go:build plus package services import ( "context" teaconst "github.com/TeaOSLab/EdgeAPI/internal/const" "github.com/TeaOSLab/EdgeAPI/internal/db/models" "github.com/TeaOSLab/EdgeAPI/internal/db/models/regions" "github.com/TeaOSLab/EdgeAPI/internal/db/models/stats" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/dbs" timeutil "github.com/iwind/TeaGo/utils/time" "time" ) // 检查节点版本 func (this *AdminService) composeAdminDashboardExt(tx *dbs.Tx, ctx context.Context, result *pb.ComposeAdminDashboardResponse) error { var isPlus = teaconst.IsPlus // 用户节点升级信息 if isPlus { upgradeInfo := &pb.ComposeAdminDashboardResponse_UpgradeInfo{ NewVersion: teaconst.UserNodeVersion, } this.BeginTag(ctx, "SharedUserNodeDAO.CountAllLowerVersionNodes") countNodes, err := models.SharedUserNodeDAO.CountAllLowerVersionNodes(tx, upgradeInfo.NewVersion) this.EndTag(ctx, "SharedUserNodeDAO.CountAllLowerVersionNodes") if err != nil { return err } upgradeInfo.CountNodes = countNodes result.UserNodeUpgradeInfo = upgradeInfo } // DNS节点升级信息 if isPlus { upgradeInfo := &pb.ComposeAdminDashboardResponse_UpgradeInfo{ NewVersion: teaconst.DNSNodeVersion, } this.BeginTag(ctx, "SharedNSNodeDAO.CountAllLowerVersionNodes") countNodes, err := models.SharedNSNodeDAO.CountAllLowerVersionNodes(tx, upgradeInfo.NewVersion) this.EndTag(ctx, "SharedNSNodeDAO.CountAllLowerVersionNodes") if err != nil { return err } upgradeInfo.CountNodes = countNodes result.NsNodeUpgradeInfo = upgradeInfo } // Report节点升级信息 if isPlus { upgradeInfo := &pb.ComposeAdminDashboardResponse_UpgradeInfo{ NewVersion: teaconst.ReportNodeVersion, } this.BeginTag(ctx, "SharedReportNodeDAO.CountAllLowerVersionNodes") countNodes, err := models.SharedReportNodeDAO.CountAllLowerVersionNodes(tx, upgradeInfo.NewVersion) this.EndTag(ctx, "SharedReportNodeDAO.CountAllLowerVersionNodes") if err != nil { return err } upgradeInfo.CountNodes = countNodes result.ReportNodeUpgradeInfo = upgradeInfo } // 节点排行 var hourFrom = timeutil.Format("YmdH", time.Now().Add(-23*time.Hour)) var hourTo = timeutil.Format("YmdH") if isPlus { this.BeginTag(ctx, "SharedNodeTrafficHourlyStatDAO.FindTopNodeStats") topNodeStats, err := stats.SharedNodeTrafficHourlyStatDAO.FindTopNodeStats(tx, "node", hourFrom, hourTo, 10) this.EndTag(ctx, "SharedNodeTrafficHourlyStatDAO.FindTopNodeStats") if err != nil { return err } for _, stat := range topNodeStats { nodeName, err := models.SharedNodeDAO.FindNodeName(tx, int64(stat.NodeId)) if err != nil { return err } if len(nodeName) == 0 { continue } result.TopNodeStats = append(result.TopNodeStats, &pb.ComposeAdminDashboardResponse_NodeStat{ NodeId: int64(stat.NodeId), NodeName: nodeName, CountRequests: int64(stat.CountRequests), Bytes: int64(stat.Bytes), }) } } // 地区流量排行 if isPlus { this.BeginTag(ctx, "SharedServerRegionCountryDailyStatDAO.SumDailyTotalBytes") totalCountryBytes, err := stats.SharedServerRegionCountryDailyStatDAO.SumDailyTotalBytes(tx, timeutil.Format("Ymd")) this.EndTag(ctx, "SharedServerRegionCountryDailyStatDAO.SumDailyTotalBytes") if err != nil { return err } if totalCountryBytes > 0 { topCountryStats, err := stats.SharedServerRegionCountryDailyStatDAO.ListSumStats(tx, timeutil.Format("Ymd"), "bytes", 0, 100) if err != nil { return err } for _, stat := range topCountryStats { countryName, err := regions.SharedRegionCountryDAO.FindRegionCountryName(tx, int64(stat.CountryId)) if err != nil { return err } result.TopCountryStats = append(result.TopCountryStats, &pb.ComposeAdminDashboardResponse_CountryStat{ CountryName: countryName, Bytes: int64(stat.Bytes), CountRequests: int64(stat.CountRequests), AttackBytes: int64(stat.AttackBytes), CountAttackRequests: int64(stat.CountAttackRequests), Percent: float32(stat.Bytes*100) / float32(totalCountryBytes), }) } } } return nil }