diff --git a/internal/web/actions/default/api/node/logs.go b/internal/web/actions/default/api/node/logs.go index d10126be..274a1946 100644 --- a/internal/web/actions/default/api/node/logs.go +++ b/internal/web/actions/default/api/node/logs.go @@ -2,6 +2,7 @@ package node import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/maps" timeutil "github.com/iwind/TeaGo/utils/time" @@ -18,7 +19,18 @@ func (this *LogsAction) Init() { func (this *LogsAction) RunGet(params struct { NodeId int64 + + DayFrom string + DayTo string + Keyword string + Level string }) { + this.Data["nodeId"] = params.NodeId + this.Data["dayFrom"] = params.DayFrom + this.Data["dayTo"] = params.DayTo + this.Data["keyword"] = params.Keyword + this.Data["level"] = params.Level + apiNodeResp, err := this.RPC().APINodeRPC().FindEnabledAPINode(this.AdminContext(), &pb.FindEnabledAPINodeRequest{NodeId: params.NodeId}) if err != nil { this.ErrorPage(err) @@ -36,8 +48,12 @@ func (this *LogsAction) RunGet(params struct { } countResp, err := this.RPC().NodeLogRPC().CountNodeLogs(this.AdminContext(), &pb.CountNodeLogsRequest{ - Role: "api", - NodeId: params.NodeId, + Role: nodeconfigs.NodeRoleAPI, + NodeId: params.NodeId, + DayFrom: params.DayFrom, + DayTo: params.DayTo, + Keyword: params.Keyword, + Level: params.Level, }) if err != nil { this.ErrorPage(err) @@ -47,8 +63,13 @@ func (this *LogsAction) RunGet(params struct { page := this.NewPage(count, 20) logsResp, err := this.RPC().NodeLogRPC().ListNodeLogs(this.AdminContext(), &pb.ListNodeLogsRequest{ - NodeId: params.NodeId, - Role: "api", + NodeId: params.NodeId, + Role: nodeconfigs.NodeRoleAPI, + DayFrom: params.DayFrom, + DayTo: params.DayTo, + Keyword: params.Keyword, + Level: params.Level, + Offset: page.Offset, Size: page.Size, }) diff --git a/internal/web/actions/default/clusters/index.go b/internal/web/actions/default/clusters/index.go index 3b4a6823..38abfb86 100644 --- a/internal/web/actions/default/clusters/index.go +++ b/internal/web/actions/default/clusters/index.go @@ -29,13 +29,7 @@ func (this *IndexAction) RunGet(params struct { this.Data["searchType"] = params.SearchType this.Data["isSearching"] = isSearching - // 搜索节点 - if params.SearchType == "node" && len(params.Keyword) > 0 { - this.searchNodes(params.Keyword) - return - } - - // 常用的节点 + // 常用的集群 latestClusterMaps := []maps.Map{} if !isSearching { clustersResp, err := this.RPC().NodeClusterRPC().FindLatestNodeClusters(this.AdminContext(), &pb.FindLatestNodeClustersRequest{Size: 6}) @@ -52,6 +46,12 @@ func (this *IndexAction) RunGet(params struct { } this.Data["latestClusters"] = latestClusterMaps + // 搜索节点 + if params.SearchType == "node" && len(params.Keyword) > 0 { + this.searchNodes(params.Keyword) + return + } + // 搜索集群 countResp, err := this.RPC().NodeClusterRPC().CountAllEnabledNodeClusters(this.AdminContext(), &pb.CountAllEnabledNodeClustersRequest{ Keyword: params.Keyword, diff --git a/internal/web/actions/default/settings/authority/nodes/node/init.go b/internal/web/actions/default/settings/authority/nodes/node/init.go index 489ebfbf..19bc63ef 100644 --- a/internal/web/actions/default/settings/authority/nodes/node/init.go +++ b/internal/web/actions/default/settings/authority/nodes/node/init.go @@ -17,6 +17,7 @@ func init() { // 节点相关 Helper(NewHelper()). Get("", new(IndexAction)). + Get("/logs", new(LogsAction)). GetPost("/update", new(UpdateAction)). Get("/install", new(InstallAction)). diff --git a/internal/web/actions/default/settings/authority/nodes/node/logs.go b/internal/web/actions/default/settings/authority/nodes/node/logs.go new file mode 100644 index 00000000..3ddc1bdb --- /dev/null +++ b/internal/web/actions/default/settings/authority/nodes/node/logs.go @@ -0,0 +1,92 @@ +package node + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/maps" + timeutil "github.com/iwind/TeaGo/utils/time" +) + +type LogsAction struct { + actionutils.ParentAction +} + +func (this *LogsAction) Init() { + this.Nav("", "node", "log") + this.SecondMenu("nodes") +} + +func (this *LogsAction) RunGet(params struct { + NodeId int64 + + DayFrom string + DayTo string + Keyword string + Level string +}) { + this.Data["nodeId"] = params.NodeId + this.Data["dayFrom"] = params.DayFrom + this.Data["dayTo"] = params.DayTo + this.Data["keyword"] = params.Keyword + this.Data["level"] = params.Level + + apiNodeResp, err := this.RPC().APINodeRPC().FindEnabledAPINode(this.AdminContext(), &pb.FindEnabledAPINodeRequest{NodeId: params.NodeId}) + if err != nil { + this.ErrorPage(err) + return + } + apiNode := apiNodeResp.Node + if apiNode == nil { + this.NotFound("apiNode", params.NodeId) + return + } + + this.Data["node"] = maps.Map{ + "id": apiNode.Id, + "name": apiNode.Name, + } + + countResp, err := this.RPC().NodeLogRPC().CountNodeLogs(this.AdminContext(), &pb.CountNodeLogsRequest{ + Role: nodeconfigs.NodeRoleAuthority, + NodeId: params.NodeId, + DayFrom: params.DayFrom, + DayTo: params.DayTo, + Keyword: params.Keyword, + Level: params.Level, + }) + if err != nil { + this.ErrorPage(err) + return + } + count := countResp.Count + page := this.NewPage(count, 20) + + logsResp, err := this.RPC().NodeLogRPC().ListNodeLogs(this.AdminContext(), &pb.ListNodeLogsRequest{ + NodeId: params.NodeId, + Role: nodeconfigs.NodeRoleAuthority, + DayFrom: params.DayFrom, + DayTo: params.DayTo, + Keyword: params.Keyword, + Level: params.Level, + + Offset: page.Offset, + Size: page.Size, + }) + + logs := []maps.Map{} + for _, log := range logsResp.NodeLogs { + logs = append(logs, maps.Map{ + "tag": log.Tag, + "description": log.Description, + "createdTime": timeutil.FormatTime("Y-m-d H:i:s", log.CreatedAt), + "level": log.Level, + "isToday": timeutil.FormatTime("Y-m-d", log.CreatedAt) == timeutil.Format("Y-m-d"), + }) + } + this.Data["logs"] = logs + + this.Data["page"] = page.AsHTML() + + this.Show() +} diff --git a/internal/web/actions/default/settings/monitor-nodes/node/init.go b/internal/web/actions/default/settings/monitor-nodes/node/init.go index 7b3800a5..90e88c6e 100644 --- a/internal/web/actions/default/settings/monitor-nodes/node/init.go +++ b/internal/web/actions/default/settings/monitor-nodes/node/init.go @@ -17,6 +17,7 @@ func init() { // 节点相关 Helper(NewHelper()). Get("", new(IndexAction)). + Get("/logs", new(LogsAction)). GetPost("/update", new(UpdateAction)). Get("/install", new(InstallAction)). diff --git a/internal/web/actions/default/settings/monitor-nodes/node/logs.go b/internal/web/actions/default/settings/monitor-nodes/node/logs.go new file mode 100644 index 00000000..838e8aaf --- /dev/null +++ b/internal/web/actions/default/settings/monitor-nodes/node/logs.go @@ -0,0 +1,92 @@ +package node + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/maps" + timeutil "github.com/iwind/TeaGo/utils/time" +) + +type LogsAction struct { + actionutils.ParentAction +} + +func (this *LogsAction) Init() { + this.Nav("", "node", "log") + this.SecondMenu("nodes") +} + +func (this *LogsAction) RunGet(params struct { + NodeId int64 + + DayFrom string + DayTo string + Keyword string + Level string +}) { + this.Data["nodeId"] = params.NodeId + this.Data["dayFrom"] = params.DayFrom + this.Data["dayTo"] = params.DayTo + this.Data["keyword"] = params.Keyword + this.Data["level"] = params.Level + + apiNodeResp, err := this.RPC().APINodeRPC().FindEnabledAPINode(this.AdminContext(), &pb.FindEnabledAPINodeRequest{NodeId: params.NodeId}) + if err != nil { + this.ErrorPage(err) + return + } + apiNode := apiNodeResp.Node + if apiNode == nil { + this.NotFound("apiNode", params.NodeId) + return + } + + this.Data["node"] = maps.Map{ + "id": apiNode.Id, + "name": apiNode.Name, + } + + countResp, err := this.RPC().NodeLogRPC().CountNodeLogs(this.AdminContext(), &pb.CountNodeLogsRequest{ + Role: nodeconfigs.NodeRoleMonitor, + NodeId: params.NodeId, + DayFrom: params.DayFrom, + DayTo: params.DayTo, + Keyword: params.Keyword, + Level: params.Level, + }) + if err != nil { + this.ErrorPage(err) + return + } + count := countResp.Count + page := this.NewPage(count, 20) + + logsResp, err := this.RPC().NodeLogRPC().ListNodeLogs(this.AdminContext(), &pb.ListNodeLogsRequest{ + NodeId: params.NodeId, + Role: nodeconfigs.NodeRoleMonitor, + DayFrom: params.DayFrom, + DayTo: params.DayTo, + Keyword: params.Keyword, + Level: params.Level, + + Offset: page.Offset, + Size: page.Size, + }) + + logs := []maps.Map{} + for _, log := range logsResp.NodeLogs { + logs = append(logs, maps.Map{ + "tag": log.Tag, + "description": log.Description, + "createdTime": timeutil.FormatTime("Y-m-d H:i:s", log.CreatedAt), + "level": log.Level, + "isToday": timeutil.FormatTime("Y-m-d", log.CreatedAt) == timeutil.Format("Y-m-d"), + }) + } + this.Data["logs"] = logs + + this.Data["page"] = page.AsHTML() + + this.Show() +} diff --git a/internal/web/actions/default/settings/user-nodes/node/init.go b/internal/web/actions/default/settings/user-nodes/node/init.go index 398b6293..c91fb4e5 100644 --- a/internal/web/actions/default/settings/user-nodes/node/init.go +++ b/internal/web/actions/default/settings/user-nodes/node/init.go @@ -21,6 +21,7 @@ func init() { // 节点相关 Helper(NewHelper()). Get("", new(IndexAction)). + Get("/logs", new(LogsAction)). GetPost("/update", new(UpdateAction)). Get("/install", new(InstallAction)). diff --git a/internal/web/actions/default/settings/user-nodes/node/logs.go b/internal/web/actions/default/settings/user-nodes/node/logs.go new file mode 100644 index 00000000..478b664a --- /dev/null +++ b/internal/web/actions/default/settings/user-nodes/node/logs.go @@ -0,0 +1,92 @@ +package node + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/maps" + timeutil "github.com/iwind/TeaGo/utils/time" +) + +type LogsAction struct { + actionutils.ParentAction +} + +func (this *LogsAction) Init() { + this.Nav("", "node", "log") + this.SecondMenu("nodes") +} + +func (this *LogsAction) RunGet(params struct { + NodeId int64 + + DayFrom string + DayTo string + Keyword string + Level string +}) { + this.Data["nodeId"] = params.NodeId + this.Data["dayFrom"] = params.DayFrom + this.Data["dayTo"] = params.DayTo + this.Data["keyword"] = params.Keyword + this.Data["level"] = params.Level + + apiNodeResp, err := this.RPC().APINodeRPC().FindEnabledAPINode(this.AdminContext(), &pb.FindEnabledAPINodeRequest{NodeId: params.NodeId}) + if err != nil { + this.ErrorPage(err) + return + } + apiNode := apiNodeResp.Node + if apiNode == nil { + this.NotFound("apiNode", params.NodeId) + return + } + + this.Data["node"] = maps.Map{ + "id": apiNode.Id, + "name": apiNode.Name, + } + + countResp, err := this.RPC().NodeLogRPC().CountNodeLogs(this.AdminContext(), &pb.CountNodeLogsRequest{ + Role: nodeconfigs.NodeRoleUser, + NodeId: params.NodeId, + DayFrom: params.DayFrom, + DayTo: params.DayTo, + Keyword: params.Keyword, + Level: params.Level, + }) + if err != nil { + this.ErrorPage(err) + return + } + count := countResp.Count + page := this.NewPage(count, 20) + + logsResp, err := this.RPC().NodeLogRPC().ListNodeLogs(this.AdminContext(), &pb.ListNodeLogsRequest{ + NodeId: params.NodeId, + Role: nodeconfigs.NodeRoleUser, + DayFrom: params.DayFrom, + DayTo: params.DayTo, + Keyword: params.Keyword, + Level: params.Level, + + Offset: page.Offset, + Size: page.Size, + }) + + logs := []maps.Map{} + for _, log := range logsResp.NodeLogs { + logs = append(logs, maps.Map{ + "tag": log.Tag, + "description": log.Description, + "createdTime": timeutil.FormatTime("Y-m-d H:i:s", log.CreatedAt), + "level": log.Level, + "isToday": timeutil.FormatTime("Y-m-d", log.CreatedAt) == timeutil.Format("Y-m-d"), + }) + } + this.Data["logs"] = logs + + this.Data["page"] = page.AsHTML() + + this.Show() +} diff --git a/web/public/js/components/common/node-log-row.js b/web/public/js/components/common/node-log-row.js new file mode 100644 index 00000000..e74671a1 --- /dev/null +++ b/web/public/js/components/common/node-log-row.js @@ -0,0 +1,12 @@ +Vue.component("node-log-row", { + props: ["v-log", "v-keyword"], + data: function () { + return { + log: this.vLog, + keyword: this.vKeyword + } + }, + template: `
[{{log.createdTime}}][{{log.createdTime}}]+[{{log.tag}}]{{log.description}} 共{{log.count}}条
暂时还没有日志。
+暂时还没有日志。
-
- [{{log.createdTime}}][{{log.createdTime}}][{{log.tag}}]{{log.description}}
- |
-