mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-04 04:54:32 +08:00
删除不需要的文件
This commit is contained in:
@@ -2,10 +2,8 @@ package cluster
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/boards"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/groups"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/groups"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/node"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/node"
|
||||||
nodeboards "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/node/boards"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/node/thresholds"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/node/thresholds"
|
||||||
clusters "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/clusterutils"
|
clusters "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/clusterutils"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
||||||
@@ -46,8 +44,6 @@ func init() {
|
|||||||
Post("/up", new(node.UpAction)).
|
Post("/up", new(node.UpAction)).
|
||||||
Get("/thresholds", new(thresholds.IndexAction)).
|
Get("/thresholds", new(thresholds.IndexAction)).
|
||||||
Get("/detail", new(node.DetailAction)).
|
Get("/detail", new(node.DetailAction)).
|
||||||
GetPost("/boards", new(nodeboards.IndexAction)).
|
|
||||||
Post("/boards/data", new(nodeboards.DataAction)).
|
|
||||||
GetPost("/updateDNSPopup", new(node.UpdateDNSPopupAction)).
|
GetPost("/updateDNSPopup", new(node.UpdateDNSPopupAction)).
|
||||||
|
|
||||||
// 分组相关
|
// 分组相关
|
||||||
@@ -58,10 +54,6 @@ func init() {
|
|||||||
Post("/delete", new(groups.DeleteAction)).
|
Post("/delete", new(groups.DeleteAction)).
|
||||||
Post("/sort", new(groups.SortAction)).
|
Post("/sort", new(groups.SortAction)).
|
||||||
GetPost("/selectPopup", new(groups.SelectPopupAction)).
|
GetPost("/selectPopup", new(groups.SelectPopupAction)).
|
||||||
|
|
||||||
// 看板相关
|
|
||||||
Prefix("/clusters/cluster/boards").
|
|
||||||
GetPost("", new(boards.IndexAction)).
|
|
||||||
EndAll()
|
EndAll()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
||||||
|
|
||||||
package ipaddrutils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
"github.com/iwind/TeaGo/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
func InitIPAddr(parent *actionutils.ParentAction, addrId int64) (*pb.NodeIPAddress, error) {
|
|
||||||
addrResp, err := parent.RPC().NodeIPAddressRPC().FindEnabledNodeIPAddress(parent.AdminContext(), &pb.FindEnabledNodeIPAddressRequest{NodeIPAddressId: addrId})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
var addr = addrResp.NodeIPAddress
|
|
||||||
if addr == nil {
|
|
||||||
return nil, errors.New("nodeIPAddress with id '" + types.String(addrId) + "' not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
parent.Data["addr"] = maps.Map{
|
|
||||||
"id": addr.Id,
|
|
||||||
"name": addr.Name,
|
|
||||||
"ip": addr.Ip,
|
|
||||||
}
|
|
||||||
|
|
||||||
return addr, nil
|
|
||||||
}
|
|
||||||
@@ -1,133 +0,0 @@
|
|||||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
||||||
|
|
||||||
package boards
|
|
||||||
|
|
||||||
import (
|
|
||||||
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
"github.com/iwind/TeaGo/types"
|
|
||||||
timeutil "github.com/iwind/TeaGo/utils/time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type DnsAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *DnsAction) Init() {
|
|
||||||
this.Nav("", "", "dns")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *DnsAction) RunGet(params struct{}) {
|
|
||||||
if !teaconst.IsPlus {
|
|
||||||
this.RedirectURL("/dashboard")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := this.RPC().NSRPC().ComposeNSBoard(this.AdminContext(), &pb.ComposeNSBoardRequest{})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.Data["board"] = maps.Map{
|
|
||||||
"countDomains": resp.CountNSDomains,
|
|
||||||
"countRecords": resp.CountNSRecords,
|
|
||||||
"countClusters": resp.CountNSClusters,
|
|
||||||
"countNodes": resp.CountNSNodes,
|
|
||||||
"countOfflineNodes": resp.CountOfflineNSNodes,
|
|
||||||
}
|
|
||||||
|
|
||||||
// 流量排行
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.HourlyTrafficStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"day": stat.Hour[4:6] + "月" + stat.Hour[6:8] + "日",
|
|
||||||
"hour": stat.Hour[8:],
|
|
||||||
"countRequests": stat.CountRequests,
|
|
||||||
"bytes": stat.Bytes,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["hourlyStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.DailyTrafficStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"day": stat.Day[4:6] + "月" + stat.Day[6:] + "日",
|
|
||||||
"countRequests": stat.CountRequests,
|
|
||||||
"bytes": stat.Bytes,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["dailyStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// 域名排行
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.TopNSDomainStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"domainId": stat.NsDomainId,
|
|
||||||
"domainName": stat.NsDomainName,
|
|
||||||
"countRequests": stat.CountRequests,
|
|
||||||
"bytes": stat.Bytes,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["topDomainStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// 节点排行
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.TopNSNodeStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"clusterId": stat.NsClusterId,
|
|
||||||
"nodeId": stat.NsNodeId,
|
|
||||||
"nodeName": stat.NsNodeName,
|
|
||||||
"countRequests": stat.CountRequests,
|
|
||||||
"bytes": stat.Bytes,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["topNodeStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// CPU
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.CpuNodeValues {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"time": timeutil.FormatTime("H:i", stat.CreatedAt),
|
|
||||||
"value": types.Float32(string(stat.ValueJSON)),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["cpuValues"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// Memory
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.MemoryNodeValues {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"time": timeutil.FormatTime("H:i", stat.CreatedAt),
|
|
||||||
"value": types.Float32(string(stat.ValueJSON)),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["memoryValues"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.LoadNodeValues {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"time": timeutil.FormatTime("H:i", stat.CreatedAt),
|
|
||||||
"value": types.Float32(string(stat.ValueJSON)),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["loadValues"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,258 +0,0 @@
|
|||||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
||||||
|
|
||||||
package boards
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
|
||||||
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/utils/numberutils"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
"regexp"
|
|
||||||
)
|
|
||||||
|
|
||||||
type IndexAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) Init() {
|
|
||||||
this.Nav("", "", "index")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) RunGet(params struct{}) {
|
|
||||||
if !teaconst.IsPlus {
|
|
||||||
this.RedirectURL("/dashboard")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 取得用户的权限
|
|
||||||
module, ok := configloaders.FindFirstAdminModule(this.AdminId())
|
|
||||||
if ok {
|
|
||||||
if module != "dashboard" {
|
|
||||||
for _, m := range configloaders.AllModuleMaps() {
|
|
||||||
if m.GetString("code") == module {
|
|
||||||
this.RedirectURL(m.GetString("url"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) RunPost(params struct {
|
|
||||||
}) {
|
|
||||||
// 读取看板数据
|
|
||||||
resp, err := this.RPC().AdminRPC().ComposeAdminDashboard(this.AdminContext(), &pb.ComposeAdminDashboardRequest{
|
|
||||||
ApiVersion: teaconst.APINodeVersion,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.Data["dashboard"] = maps.Map{
|
|
||||||
"defaultClusterId": resp.DefaultNodeClusterId,
|
|
||||||
|
|
||||||
"countServers": resp.CountServers,
|
|
||||||
"countNodeClusters": resp.CountNodeClusters,
|
|
||||||
"countNodes": resp.CountNodes,
|
|
||||||
"countUsers": resp.CountUsers,
|
|
||||||
"countAPINodes": resp.CountAPINodes,
|
|
||||||
"countDBNodes": resp.CountDBNodes,
|
|
||||||
"countUserNodes": resp.CountUserNodes,
|
|
||||||
|
|
||||||
"canGoServers": configloaders.AllowModule(this.AdminId(), configloaders.AdminModuleCodeServer),
|
|
||||||
"canGoNodes": configloaders.AllowModule(this.AdminId(), configloaders.AdminModuleCodeNode),
|
|
||||||
"canGoSettings": configloaders.AllowModule(this.AdminId(), configloaders.AdminModuleCodeSetting),
|
|
||||||
"canGoUsers": configloaders.AllowModule(this.AdminId(), configloaders.AdminModuleCodeUser),
|
|
||||||
}
|
|
||||||
|
|
||||||
// 今日流量
|
|
||||||
todayTrafficBytes := int64(0)
|
|
||||||
if len(resp.DailyTrafficStats) > 0 {
|
|
||||||
todayTrafficBytes = resp.DailyTrafficStats[len(resp.DailyTrafficStats)-1].Bytes
|
|
||||||
}
|
|
||||||
todayTrafficString := numberutils.FormatBytes(todayTrafficBytes)
|
|
||||||
result := regexp.MustCompile(`^(?U)(.+)([a-zA-Z]+)$`).FindStringSubmatch(todayTrafficString)
|
|
||||||
if len(result) > 2 {
|
|
||||||
this.Data["todayTraffic"] = result[1]
|
|
||||||
this.Data["todayTrafficUnit"] = result[2]
|
|
||||||
} else {
|
|
||||||
this.Data["todayTraffic"] = todayTrafficString
|
|
||||||
this.Data["todayTrafficUnit"] = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// 24小时流量趋势
|
|
||||||
{
|
|
||||||
statMaps := []maps.Map{}
|
|
||||||
for _, stat := range resp.HourlyTrafficStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"bytes": stat.Bytes,
|
|
||||||
"cachedBytes": stat.CachedBytes,
|
|
||||||
"countRequests": stat.CountRequests,
|
|
||||||
"countCachedRequests": stat.CountCachedRequests,
|
|
||||||
"countAttackRequests": stat.CountAttackRequests,
|
|
||||||
"attackBytes": stat.AttackBytes,
|
|
||||||
"day": stat.Hour[4:6] + "月" + stat.Hour[6:8] + "日",
|
|
||||||
"hour": stat.Hour[8:],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["hourlyTrafficStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// 15天流量趋势
|
|
||||||
{
|
|
||||||
statMaps := []maps.Map{}
|
|
||||||
for _, stat := range resp.DailyTrafficStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"bytes": stat.Bytes,
|
|
||||||
"cachedBytes": stat.CachedBytes,
|
|
||||||
"countRequests": stat.CountRequests,
|
|
||||||
"countCachedRequests": stat.CountCachedRequests,
|
|
||||||
"countAttackRequests": stat.CountAttackRequests,
|
|
||||||
"attackBytes": stat.AttackBytes,
|
|
||||||
"day": stat.Day[4:6] + "月" + stat.Day[6:] + "日",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["dailyTrafficStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// 节点排行
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.TopNodeStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"nodeId": stat.NodeId,
|
|
||||||
"nodeName": stat.NodeName,
|
|
||||||
"countRequests": stat.CountRequests,
|
|
||||||
"bytes": stat.Bytes,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["topNodeStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// 域名排行
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.TopDomainStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"serverId": stat.ServerId,
|
|
||||||
"domain": stat.Domain,
|
|
||||||
"countRequests": stat.CountRequests,
|
|
||||||
"bytes": stat.Bytes,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["topDomainStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// 版本升级
|
|
||||||
if resp.NodeUpgradeInfo != nil {
|
|
||||||
this.Data["nodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": resp.NodeUpgradeInfo.CountNodes,
|
|
||||||
"version": resp.NodeUpgradeInfo.NewVersion,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.Data["nodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": 0,
|
|
||||||
"version": "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if resp.MonitorNodeUpgradeInfo != nil {
|
|
||||||
this.Data["monitorNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": resp.MonitorNodeUpgradeInfo.CountNodes,
|
|
||||||
"version": resp.MonitorNodeUpgradeInfo.NewVersion,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.Data["monitorNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": 0,
|
|
||||||
"version": "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if resp.ApiNodeUpgradeInfo != nil {
|
|
||||||
this.Data["apiNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": resp.ApiNodeUpgradeInfo.CountNodes,
|
|
||||||
"version": resp.ApiNodeUpgradeInfo.NewVersion,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.Data["apiNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": 0,
|
|
||||||
"version": "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if resp.UserNodeUpgradeInfo != nil {
|
|
||||||
this.Data["userNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": resp.UserNodeUpgradeInfo.CountNodes,
|
|
||||||
"version": resp.UserNodeUpgradeInfo.NewVersion,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.Data["userNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": 0,
|
|
||||||
"version": 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if resp.AuthorityNodeUpgradeInfo != nil {
|
|
||||||
this.Data["authorityNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": resp.AuthorityNodeUpgradeInfo.CountNodes,
|
|
||||||
"version": resp.AuthorityNodeUpgradeInfo.NewVersion,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.Data["authorityNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": 0,
|
|
||||||
"version": "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if resp.NsNodeUpgradeInfo != nil {
|
|
||||||
this.Data["nsNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": resp.NsNodeUpgradeInfo.CountNodes,
|
|
||||||
"version": resp.NsNodeUpgradeInfo.NewVersion,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.Data["nsNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": 0,
|
|
||||||
"version": "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 指标
|
|
||||||
{
|
|
||||||
var chartMaps = []maps.Map{}
|
|
||||||
for _, chart := range resp.MetricDataCharts {
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range chart.MetricStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"keys": stat.Keys,
|
|
||||||
"time": stat.Time,
|
|
||||||
"value": stat.Value,
|
|
||||||
"count": stat.SumCount,
|
|
||||||
"total": stat.SumTotal,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
chartMaps = append(chartMaps, maps.Map{
|
|
||||||
"chart": maps.Map{
|
|
||||||
"id": chart.MetricChart.Id,
|
|
||||||
"name": chart.MetricChart.Name,
|
|
||||||
"widthDiv": chart.MetricChart.WidthDiv,
|
|
||||||
"isOn": chart.MetricChart.IsOn,
|
|
||||||
"maxItems": chart.MetricChart.MaxItems,
|
|
||||||
"type": chart.MetricChart.Type,
|
|
||||||
},
|
|
||||||
"item": maps.Map{
|
|
||||||
"id": chart.MetricChart.MetricItem.Id,
|
|
||||||
"name": chart.MetricChart.MetricItem.Name,
|
|
||||||
"period": chart.MetricChart.MetricItem.Period,
|
|
||||||
"periodUnit": chart.MetricChart.MetricItem.PeriodUnit,
|
|
||||||
"valueType": serverconfigs.FindMetricValueType(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
|
|
||||||
"valueTypeName": serverconfigs.FindMetricValueName(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
|
|
||||||
"keys": chart.MetricChart.MetricItem.Keys,
|
|
||||||
},
|
|
||||||
"stats": statMaps,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["metricCharts"] = chartMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
||||||
|
|
||||||
package boards
|
|
||||||
|
|
||||||
import (
|
|
||||||
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
"github.com/iwind/TeaGo/types"
|
|
||||||
timeutil "github.com/iwind/TeaGo/utils/time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type UserAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UserAction) Init() {
|
|
||||||
this.Nav("", "", "user")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UserAction) RunGet(params struct{}) {
|
|
||||||
if !teaconst.IsPlus {
|
|
||||||
this.RedirectURL("/dashboard")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := this.RPC().UserRPC().ComposeUserGlobalBoard(this.AdminContext(), &pb.ComposeUserGlobalBoardRequest{})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.Data["board"] = maps.Map{
|
|
||||||
"totalUsers": resp.TotalUsers,
|
|
||||||
"countTodayUsers": resp.CountTodayUsers,
|
|
||||||
"countWeeklyUsers": resp.CountWeeklyUsers,
|
|
||||||
"countUserNodes": resp.CountUserNodes,
|
|
||||||
"countOfflineUserNodes": resp.CountOfflineUserNodes,
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
statMaps := []maps.Map{}
|
|
||||||
for _, stat := range resp.DailyStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"day": stat.Day,
|
|
||||||
"count": stat.Count,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["dailyStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// CPU
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.CpuNodeValues {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"time": timeutil.FormatTime("H:i", stat.CreatedAt),
|
|
||||||
"value": types.Float32(string(stat.ValueJSON)),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["cpuValues"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// Memory
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.MemoryNodeValues {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"time": timeutil.FormatTime("H:i", stat.CreatedAt),
|
|
||||||
"value": types.Float32(string(stat.ValueJSON)),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["memoryValues"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.LoadNodeValues {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"time": timeutil.FormatTime("H:i", stat.CreatedAt),
|
|
||||||
"value": types.Float32(string(stat.ValueJSON)),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["loadValues"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
// 流量排行
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.TopTrafficStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"userId": stat.UserId,
|
|
||||||
"userName": stat.UserName,
|
|
||||||
"countRequests": stat.CountRequests,
|
|
||||||
"bytes": stat.Bytes,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["topTrafficStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
||||||
|
|
||||||
package boards
|
|
||||||
|
|
||||||
import (
|
|
||||||
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type WafAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *WafAction) Init() {
|
|
||||||
this.Nav("", "", "waf")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *WafAction) RunGet(params struct{}) {
|
|
||||||
if !teaconst.IsPlus {
|
|
||||||
this.RedirectURL("/dashboard")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := this.RPC().FirewallRPC().ComposeFirewallGlobalBoard(this.AdminContext(), &pb.ComposeFirewallGlobalBoardRequest{})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.Data["board"] = maps.Map{
|
|
||||||
"countDailyLogs": resp.CountDailyLogs,
|
|
||||||
"countDailyBlocks": resp.CountDailyBlocks,
|
|
||||||
"countDailyCaptcha": resp.CountDailyCaptcha,
|
|
||||||
"countWeeklyBlocks": resp.CountWeeklyBlocks,
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.HourlyStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"hour": stat.Hour,
|
|
||||||
"countLogs": stat.CountLogs,
|
|
||||||
"countCaptcha": stat.CountCaptcha,
|
|
||||||
"countBlocks": stat.CountBlocks,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["hourlyStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.DailyStats {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"day": stat.Day,
|
|
||||||
"countLogs": stat.CountLogs,
|
|
||||||
"countCaptcha": stat.CountCaptcha,
|
|
||||||
"countBlocks": stat.CountBlocks,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["dailyStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
var statMaps = []maps.Map{}
|
|
||||||
for _, stat := range resp.HttpFirewallRuleGroups {
|
|
||||||
statMaps = append(statMaps, maps.Map{
|
|
||||||
"name": stat.HttpFirewallRuleGroup.Name,
|
|
||||||
"count": stat.Count,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["groupStats"] = statMaps
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
||||||
|
|
||||||
package boards
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
timeutil "github.com/iwind/TeaGo/utils/time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type WafLogsAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *WafLogsAction) RunPost(params struct{}) {
|
|
||||||
resp, err := this.RPC().HTTPAccessLogRPC().ListHTTPAccessLogs(this.AdminContext(), &pb.ListHTTPAccessLogsRequest{
|
|
||||||
HasFirewallPolicy: true,
|
|
||||||
Reverse: false,
|
|
||||||
Day: timeutil.Format("Ymd"),
|
|
||||||
Size: 5,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.Data["accessLogs"] = resp.HttpAccessLogs
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,6 @@ package dashboard
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/dashboard/boards"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
||||||
"github.com/iwind/TeaGo"
|
"github.com/iwind/TeaGo"
|
||||||
)
|
)
|
||||||
@@ -13,14 +12,6 @@ func init() {
|
|||||||
Data("teaMenu", "dashboard").
|
Data("teaMenu", "dashboard").
|
||||||
Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeCommon)).
|
Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeCommon)).
|
||||||
GetPost("", new(IndexAction)).
|
GetPost("", new(IndexAction)).
|
||||||
|
|
||||||
// 看板
|
|
||||||
Prefix("/dashboard/boards").
|
|
||||||
GetPost("", new(boards.IndexAction)).
|
|
||||||
Get("/waf", new(boards.WafAction)).
|
|
||||||
Post("/wafLogs", new(boards.WafLogsAction)).
|
|
||||||
Get("/dns", new(boards.DnsAction)).
|
|
||||||
Get("/user", new(boards.UserAction)).
|
|
||||||
EndAll()
|
EndAll()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user