diff --git a/go.mod b/go.mod index 4b7e5d64..169f8a51 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/TeaOSLab/EdgeCommon v0.0.0-00010101000000-000000000000 github.com/go-sql-driver/mysql v1.5.0 github.com/go-yaml/yaml v2.1.0+incompatible - github.com/iwind/TeaGo v0.0.0-20201010005321-430e836dee8a + github.com/iwind/TeaGo v0.0.0-20201020081413-7cf62d6f420f golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c // indirect google.golang.org/grpc v1.32.0 gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 diff --git a/go.sum b/go.sum index 28d19f39..61e86f49 100644 --- a/go.sum +++ b/go.sum @@ -50,6 +50,8 @@ github.com/iwind/TeaGo v0.0.0-20200923021120-f5d76441fe9e h1:/xn7wUvlwaoA5IkdBUc github.com/iwind/TeaGo v0.0.0-20200923021120-f5d76441fe9e/go.mod h1:KU4mS7QNiZ7QWEuDBk1zw0/Q2LrAPZv3tycEFBsuUwc= github.com/iwind/TeaGo v0.0.0-20201010005321-430e836dee8a h1:sO6uDbQOEe6/tIB3o31vn6eD/JmkKGErKgcOA/Cpb+Q= github.com/iwind/TeaGo v0.0.0-20201010005321-430e836dee8a/go.mod h1:KU4mS7QNiZ7QWEuDBk1zw0/Q2LrAPZv3tycEFBsuUwc= +github.com/iwind/TeaGo v0.0.0-20201020081413-7cf62d6f420f h1:6Ws2H+eorfVUoMO2jta6A9nIdh8oi5/5LXo/LkAxR+E= +github.com/iwind/TeaGo v0.0.0-20201020081413-7cf62d6f420f/go.mod h1:KU4mS7QNiZ7QWEuDBk1zw0/Q2LrAPZv3tycEFBsuUwc= github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= diff --git a/internal/rpc/rpc_client.go b/internal/rpc/rpc_client.go index 961c5074..db45ac7f 100644 --- a/internal/rpc/rpc_client.go +++ b/internal/rpc/rpc_client.go @@ -175,6 +175,10 @@ func (this *RPCClient) SysSettingRPC() pb.SysSettingServiceClient { return pb.NewSysSettingServiceClient(this.pickConn()) } +func (this *RPCClient) MessageRPC() pb.MessageServiceClient { + return pb.NewMessageServiceClient(this.pickConn()) +} + // 构造Admin上下文 func (this *RPCClient) Context(adminId int64) context.Context { ctx := context.Background() diff --git a/internal/web/actions/default/messages/badge.go b/internal/web/actions/default/messages/badge.go new file mode 100644 index 00000000..6471e837 --- /dev/null +++ b/internal/web/actions/default/messages/badge.go @@ -0,0 +1,22 @@ +package messages + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" +) + +type BadgeAction struct { + actionutils.ParentAction +} + +func (this *BadgeAction) RunPost(params struct{}) { + countResp, err := this.RPC().MessageRPC().CountUnreadMessages(this.AdminContext(), &pb.CountUnreadMessagesRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["count"] = countResp.Count + + this.Success() +} diff --git a/internal/web/actions/default/messages/helper.go b/internal/web/actions/default/messages/helper.go new file mode 100644 index 00000000..7f294bfc --- /dev/null +++ b/internal/web/actions/default/messages/helper.go @@ -0,0 +1,11 @@ +package messages + +import "github.com/iwind/TeaGo/actions" + +type Helper struct { +} + +func (this *Helper) BeforeAction(actionPtr actions.ActionWrapper) { + action := actionPtr.Object() + action.Data["teaMenu"] = "message" +} \ No newline at end of file diff --git a/internal/web/actions/default/messages/index.go b/internal/web/actions/default/messages/index.go new file mode 100644 index 00000000..7810a266 --- /dev/null +++ b/internal/web/actions/default/messages/index.go @@ -0,0 +1,65 @@ +package messages + +import ( + "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" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { + this.Nav("", "", "") +} + +func (this *IndexAction) RunGet(params struct{}) { + countResp, err := this.RPC().MessageRPC().CountUnreadMessages(this.AdminContext(), &pb.CountUnreadMessagesRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + count := countResp.Count + + page := this.NewPage(count) + this.Data["page"] = page.AsHTML() + + listResp, err := this.RPC().MessageRPC().ListUnreadMessages(this.AdminContext(), &pb.ListUnreadMessagesRequest{ + Offset: page.Offset, + Size: page.Size, + }) + if err != nil { + this.ErrorPage(err) + return + } + + messages := []maps.Map{} + for _, message := range listResp.Messages { + clusterMap := maps.Map{} + if message.Cluster != nil { + clusterMap = maps.Map{ + "id": message.Cluster.Id, + "name": message.Cluster.Name, + } + } + + nodeMap := maps.Map{} + + messages = append(messages, maps.Map{ + "id": message.Id, + "isRead": message.IsRead, + "body": message.Body, + "level": message.Level, + "datetime": timeutil.FormatTime("Y-m-d H:i:s", message.CreatedAt), + "params": string(message.ParamsJSON), + "type": message.Type, + "cluster": clusterMap, + "node": nodeMap, + }) + } + this.Data["messages"] = messages + + this.Show() +} diff --git a/internal/web/actions/default/messages/init.go b/internal/web/actions/default/messages/init.go new file mode 100644 index 00000000..39cc0efe --- /dev/null +++ b/internal/web/actions/default/messages/init.go @@ -0,0 +1,20 @@ +package messages + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/helpers" + "github.com/iwind/TeaGo" +) + +func init() { + TeaGo.BeforeStart(func(server *TeaGo.Server) { + server. + Helper(new(helpers.UserMustAuth)). + Helper(new(Helper)). + Prefix("/messages"). + GetPost("", new(IndexAction)). + Post("/badge", new(BadgeAction)). + Post("/readAll", new(ReadAllAction)). + Post("/readPage", new(ReadPageAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/messages/readAll.go b/internal/web/actions/default/messages/readAll.go new file mode 100644 index 00000000..aaf7edb7 --- /dev/null +++ b/internal/web/actions/default/messages/readAll.go @@ -0,0 +1,20 @@ +package messages + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" +) + +type ReadAllAction struct { + actionutils.ParentAction +} + +func (this *ReadAllAction) RunPost(params struct{}) { + _, err := this.RPC().MessageRPC().UpdateAllMessagesRead(this.AdminContext(), &pb.UpdateAllMessagesReadRequest{}) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/messages/readPage.go b/internal/web/actions/default/messages/readPage.go new file mode 100644 index 00000000..39c9bad1 --- /dev/null +++ b/internal/web/actions/default/messages/readPage.go @@ -0,0 +1,25 @@ +package messages + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" +) + +type ReadPageAction struct { + actionutils.ParentAction +} + +func (this *ReadPageAction) RunPost(params struct { + MessageIds []int64 +}) { + _, err := this.RPC().MessageRPC().UpdateMessagesRead(this.AdminContext(), &pb.UpdateMessagesReadRequest{ + MessageIds: params.MessageIds, + IsRead: true, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/import.go b/internal/web/import.go index 95b4eb7f..5586f927 100644 --- a/internal/web/import.go +++ b/internal/web/import.go @@ -13,6 +13,7 @@ import ( _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/index" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/log" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/logout" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/messages" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/nodes" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/components" diff --git a/web/public/js/components/messages/message-row.js b/web/public/js/components/messages/message-row.js new file mode 100644 index 00000000..344434d3 --- /dev/null +++ b/web/public/js/components/messages/message-row.js @@ -0,0 +1,38 @@ +Vue.component("message-row", { + props: ["v-message"], + data: function () { + let paramsJSON = this.vMessage.params + let params = null + if (paramsJSON != null && paramsJSON.length > 0) { + params = JSON.parse(paramsJSON) + } + + return { + message: this.vMessage, + params: params + } + }, + template: `
+ + + + + + + +
+ {{message.datetime}} + + | + 集群:{{message.cluster.name}} + +
+ {{message.body}} + + +
+
+
` +}) \ No newline at end of file diff --git a/web/views/@default/@layout.html b/web/views/@default/@layout.html index aabb4734..6604dc2c 100644 --- a/web/views/@default/@layout.html +++ b/web/views/@default/@layout.html @@ -28,7 +28,7 @@