From 16541183efef645636c77d8c933975e369c3b7aa Mon Sep 17 00:00:00 2001 From: zeaslity Date: Tue, 23 Apr 2024 11:45:32 +0800 Subject: [PATCH] [message pusher] - standlone gin service --- .../SyncCommandToAgentBody.rapi | 77 ++++ .../fastRequestCurrentProjectConfig.json | 26 +- .../fastRequestCurrentProjectEnvironment.json | 6 + agent-common/message_pusher/client_test.go | 34 -- agent-common/message_pusher/publish.go | 27 -- agent-common/message_pusher/push_template.go | 43 -- .../message_pusher/push_template_test.go | 20 - message_pusher/cmii/CmiiMessageBody.go | 67 +++ message_pusher/cmii/CmiiMessageBody_test.go | 20 + message_pusher/go.mod | 40 ++ message_pusher/go.sum | 94 +++++ message_pusher/main.go | 25 ++ .../pusher}/client.go | 7 +- .../pusher}/config.go | 2 +- .../pusher}/options.go | 2 +- message_pusher/router/CmiiRouter.go | 32 ++ message_pusher/router/OctopusRouter.go | 15 + server/pom.xml | 1 + .../main/java/io/wdd/pusher/NtfyClient.java | 33 ++ .../wdd/pusher/core/common/NtfyConstants.java | 14 + .../exception/NtfyConnectionException.java | 20 + .../pusher/core/exception/NtfyException.java | 24 ++ .../exception/NtfyStreamingException.java | 24 ++ .../io/wdd/pusher/core/model/ACTIONS.java | 19 + .../java/io/wdd/pusher/core/model/Action.java | 49 +++ .../io/wdd/pusher/core/model/ClientType.java | 6 + .../io/wdd/pusher/core/model/NtfyRequest.java | 381 ++++++++++++++++++ .../io/wdd/pusher/core/model/PRIORITY.java | 27 ++ .../pusher/core/model/PublishResponse.java | 5 + .../wdd/pusher/core/model/RequestModel.java | 117 ++++++ .../wdd/pusher/core/model/StreamRequest.java | 25 ++ .../io/wdd/pusher/core/publish/PubClient.java | 9 + .../pusher/core/publish/PubClientImpl.java | 26 ++ .../wdd/pusher/core/publish/PubService.java | 9 + .../pusher/core/publish/PubServiceImpl.java | 117 ++++++ .../core/stream/StreamingDataListener.java | 5 + .../pusher/core/stream/StreamingService.java | 63 +++ .../io/wdd/pusher/example/PublishExample.java | 40 ++ .../wdd/pusher/example/StreamingExample.java | 27 ++ .../test/java/io/wdd/pusher/PusherTest.java | 34 ++ .../server/func/TestImageSyncScheduler.java | 2 +- 41 files changed, 1481 insertions(+), 133 deletions(-) create mode 100644 .fastRequest/collections/Root/server/ExecutionController/SyncCommandToAgentBody.rapi create mode 100644 .fastRequest/config/fastRequestCurrentProjectEnvironment.json delete mode 100644 agent-common/message_pusher/client_test.go delete mode 100644 agent-common/message_pusher/publish.go delete mode 100644 agent-common/message_pusher/push_template.go delete mode 100644 agent-common/message_pusher/push_template_test.go create mode 100644 message_pusher/cmii/CmiiMessageBody.go create mode 100644 message_pusher/cmii/CmiiMessageBody_test.go create mode 100644 message_pusher/go.mod create mode 100644 message_pusher/go.sum create mode 100644 message_pusher/main.go rename {agent-common/message_pusher => message_pusher/pusher}/client.go (95%) rename {agent-common/message_pusher => message_pusher/pusher}/config.go (98%) rename {agent-common/message_pusher => message_pusher/pusher}/options.go (99%) create mode 100644 message_pusher/router/CmiiRouter.go create mode 100644 message_pusher/router/OctopusRouter.go create mode 100644 server/src/main/java/io/wdd/pusher/NtfyClient.java create mode 100644 server/src/main/java/io/wdd/pusher/core/common/NtfyConstants.java create mode 100644 server/src/main/java/io/wdd/pusher/core/exception/NtfyConnectionException.java create mode 100644 server/src/main/java/io/wdd/pusher/core/exception/NtfyException.java create mode 100644 server/src/main/java/io/wdd/pusher/core/exception/NtfyStreamingException.java create mode 100644 server/src/main/java/io/wdd/pusher/core/model/ACTIONS.java create mode 100644 server/src/main/java/io/wdd/pusher/core/model/Action.java create mode 100644 server/src/main/java/io/wdd/pusher/core/model/ClientType.java create mode 100644 server/src/main/java/io/wdd/pusher/core/model/NtfyRequest.java create mode 100644 server/src/main/java/io/wdd/pusher/core/model/PRIORITY.java create mode 100644 server/src/main/java/io/wdd/pusher/core/model/PublishResponse.java create mode 100644 server/src/main/java/io/wdd/pusher/core/model/RequestModel.java create mode 100644 server/src/main/java/io/wdd/pusher/core/model/StreamRequest.java create mode 100644 server/src/main/java/io/wdd/pusher/core/publish/PubClient.java create mode 100644 server/src/main/java/io/wdd/pusher/core/publish/PubClientImpl.java create mode 100644 server/src/main/java/io/wdd/pusher/core/publish/PubService.java create mode 100644 server/src/main/java/io/wdd/pusher/core/publish/PubServiceImpl.java create mode 100644 server/src/main/java/io/wdd/pusher/core/stream/StreamingDataListener.java create mode 100644 server/src/main/java/io/wdd/pusher/core/stream/StreamingService.java create mode 100644 server/src/main/java/io/wdd/pusher/example/PublishExample.java create mode 100644 server/src/main/java/io/wdd/pusher/example/StreamingExample.java create mode 100644 server/src/test/java/io/wdd/pusher/PusherTest.java diff --git a/.fastRequest/collections/Root/server/ExecutionController/SyncCommandToAgentBody.rapi b/.fastRequest/collections/Root/server/ExecutionController/SyncCommandToAgentBody.rapi new file mode 100644 index 0000000..11111ff --- /dev/null +++ b/.fastRequest/collections/Root/server/ExecutionController/SyncCommandToAgentBody.rapi @@ -0,0 +1,77 @@ +{ + "activeGroup": "Default", + "apiParamGroup": { + "message_pusher": { + "bodyKeyValueListJson": "", + "classDescription": "", + "className": "io.wdd.rpc.controller.ExecutionController", + "headerParamsKeyValueList": [ + { + "enabled": true, + "type": "", + "value": "" + } + ], + "jsonDocument": "", + "method": "SyncCommandToAgentBody", + "methodDescription": "[命令] [同步] - 单机-等待命令结果", + "methodType": "GET", + "multipartKeyValueListJson": "[]", + "originUrl": "/octopus/server/executor/command/sync/one/body", + "pathParamsKeyValueListJson": "[]", + "postScript": "", + "postType": "json", + "preScript": "", + "returnDocument": "{\"code\":\"No comment,Type =Number\",\"msg\":\"No comment,Type =String\",\"data\":{}}", + "tempId": "", + "url": "/cmii", + "urlEncodedKeyValueListJson": "[]", + "urlEncodedKeyValueListText": "", + "urlParamsKeyValueListJson": "[]", + "urlParamsKeyValueListText": "" + } + }, + "childList": [], + "classDescription": "", + "description": "", + "directory": "/.fastRequest/collections/Root/server/ExecutionController", + "domain": "localhost:8080", + "enableEnv": "local", + "enableProject": "message_pusher", + "filePath": "/.fastRequest/collections/Root/server/ExecutionController~SyncCommandToAgentBody.rapi", + "id": "api_io.wdd.rpc.controller.ExecutionController.SyncCommandToAgentBody", + "name": "[命令] [同步] - 单机-等待命令结果", + "paramGroup": { + "bodyKeyValueListJson": "{\n \"Namespace\": \"devflight\",\n \"AppName\": \"cmii-uav-device\",\n \"ToTag\": \"5.5.0-1234\",\n \"Replicas\": 10\n}", + "classDescription": "", + "className": "io.wdd.rpc.controller.ExecutionController", + "headerParamsKeyValueList": [ + { + "enabled": true, + "type": "", + "value": "" + } + ], + "jsonDocument": "", + "method": "SyncCommandToAgentBody", + "methodDescription": "[命令] [同步] - 单机-等待命令结果", + "methodType": "POST", + "multipartKeyValueListJson": "[{\"customFlag\":2,\"enabled\":true,\"key\":\"Namespace\",\"type\":\"String\",\"value\":\"devflight\"},{\"customFlag\":2,\"enabled\":true,\"key\":\"AppName\",\"type\":\"String\",\"value\":\"cmii-uag-device\"},{\"customFlag\":2,\"enabled\":true,\"key\":\"ToTag\",\"type\":\"String\",\"value\":\"5.5.0-1234\"},{\"customFlag\":2,\"enabled\":true,\"key\":\"Replicas\",\"type\":\"String\",\"value\":\"2\"}]", + "originUrl": "/octopus/server/executor/command/sync/one/body", + "pathParamsKeyValueListJson": "[]", + "postScript": "", + "postType": "json", + "preScript": "", + "returnDocument": "{\"code\":\"No comment,Type =Number\",\"msg\":\"No comment,Type =String\",\"data\":{}}", + "tempId": "", + "url": "/cmii/upgrade", + "urlEncodedKeyValueListJson": "[{\"customFlag\":2,\"enabled\":true,\"key\":\"{\\\"Namespace\\\":\\\"foo\\\",\\\"AppName\\\":\\\"bar\\\",\\\"ToTag\\\":\\\"baz\\\",\\\"Replicas\\\":10}\",\"type\":\"String\",\"value\":\"\"}]", + "urlEncodedKeyValueListText": "{\"Namespace\":\"foo\",\"AppName\":\"bar\",\"ToTag\":\"baz\",\"Replicas\":10}=", + "urlParamsKeyValueListJson": "[]", + "urlParamsKeyValueListText": "" + }, + "pmRequestId": "", + "pmResponseId": "", + "tempId": "api_io.wdd.rpc.controller.ExecutionController.SyncCommandToAgentBody", + "type": 2 +} \ No newline at end of file diff --git a/.fastRequest/config/fastRequestCurrentProjectConfig.json b/.fastRequest/config/fastRequestCurrentProjectConfig.json index b7c7f6f..8508e47 100644 --- a/.fastRequest/config/fastRequestCurrentProjectConfig.json +++ b/.fastRequest/config/fastRequestCurrentProjectConfig.json @@ -1,4 +1,9 @@ { + "apiDocTemplate": "#if (${namingPolicy}=='byDoc')\n$H1 ${methodDescription}\n#else\n$H1 $!{methodName}\n\n$H3 Method description\n\n```\n$!{methodDescription}\n```\n#end\n\n> URL: $!{url}\n>\n> Origin Url: $!{originUrl}\n>\n> Type: $!{methodType}\n\n\n$H3 Request headers\n\n|Header Name| Header Value|\n|---------|------|\n#foreach( $h in ${headerList})\n|$h.type|$h.value|\n#end\n\n$H3 Parameters\n\n$H5 Path parameters\n\n| Parameter | Type | Value | Description |\n|---------|------|------|------------|\n#foreach( $node in ${pathKeyValueList})\n|$node.key|$!{node.type}|$!{node.value}|$!{node.comment}|\n#end\n\n\n$H5 URL parameters\n\n|Required| Parameter | Type | Value | Description |\n|---------|---------|------|------|------------|\n#foreach( $node in ${urlParamsKeyValueList})\n|$!{node.enabled}|$!{node.key}|$!{node.type}|$!{node.value}|$!{node.comment}|\n#end\n\n\n$H5 Body parameters\n\n$H6 JSON\n\n```\n${jsonParam}\n```\n\n$H6 JSON document\n\n```\n${jsonParamDocument}\n```\n\n\n$H5 Form URL-Encoded\n|Required| Parameter | Type | Value | Description |\n|---------|---------|------|------|------------|\n#foreach( $node in ${urlEncodedKeyValueList})\n|$!{node.enabled}|$!{node.key}|$!{node.type}|$!{node.value}|$!{node.comment}|\n#end\n\n\n$H5 Multipart\n|Required | Parameter | Type | Value | Description |\n|---------|---------|------|------|------------|\n#foreach( $node in ${multipartKeyValueList})\n|$!{node.enabled}|$!{node.key}|$!{node.type}|$!{node.value}|$!{node.comment}|\n#end\n\n\n$H3 Response\n\n$H5 Response example\n\n```\n$!{responseExample}\n```\n\n$H5 Response document\n```\n$!{returnDocument}\n```\n\n\n", + "apifoxSetting": { + "domain": "https://api.apifox.com", + "syncAfterSave": false + }, "dataList": [ { "hostGroup": [ @@ -17,31 +22,46 @@ } ], "name": "server" + }, + { + "hostGroup": [ + { + "env": "local", + "url": "localhost:8080" + } + ], + "name": "message_pusher" } ], "envList": [ "local" ], "headerList": [], + "ignoreParseFieldList": [], + "maxDescriptionLength": -1, + "pmCollectionId": "", "postScript": "", "preScript": "", "projectList": [ "OctpusGO", - "server" + "server", + "message_pusher" ], "syncModel": { "branch": "master", "domain": "https://github.com", "enabled": false, + "gitToken": "", "namingPolicy": "byDoc", "owner": "", "repo": "", "repoUrl": "", "syncAfterRun": false, - "token": "", "type": "github" }, + "syncPmAfterSave": false, "urlEncodedKeyValueList": [], "urlParamsKeyValueList": [], - "urlSuffix": "" + "urlSuffix": "", + "workspaceId": "" } \ No newline at end of file diff --git a/.fastRequest/config/fastRequestCurrentProjectEnvironment.json b/.fastRequest/config/fastRequestCurrentProjectEnvironment.json new file mode 100644 index 0000000..32852d9 --- /dev/null +++ b/.fastRequest/config/fastRequestCurrentProjectEnvironment.json @@ -0,0 +1,6 @@ +{ + "apifoxRelationMap": {}, + "apifoxServerMap": {}, + "environment": {}, + "pmRelationMap": {} +} \ No newline at end of file diff --git a/agent-common/message_pusher/client_test.go b/agent-common/message_pusher/client_test.go deleted file mode 100644 index 26448f9..0000000 --- a/agent-common/message_pusher/client_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package message_pusher - -import ( - "testing" - "wdd.io/agent-common/utils" -) - -func TestClient_Publish(t *testing.T) { - - client := NewDefaultClient() - - optionList := []PublishOption{ - WithTitle("测试内容"), - WithPriority("5"), - WithMarkdown(), - } - - deployPush := DeployPush{ - Namespace: "uavcloud-dev", - AppName: "cmii-uav-platform", - Replicas: "1", - DeployStatus: false, - } - - deployPush.ParseCmiiDeployTemplate() - - message, err := client.PublishDefault(deployPush.ParseCmiiDeployTemplate(), optionList) - if err != nil { - return - } - - utils.BeautifulPrint(message) - -} diff --git a/agent-common/message_pusher/publish.go b/agent-common/message_pusher/publish.go deleted file mode 100644 index a5d3719..0000000 --- a/agent-common/message_pusher/publish.go +++ /dev/null @@ -1,27 +0,0 @@ -package message_pusher - -var DefaultClientOp = NewDefaultClient() - -var CmiiUpdatePushOptions = []PublishOption{ - WithTitle("更新应用"), - WithPriority("3"), -} - -func PushCmiiUpdateMessage(cmiiEnv, appName, newTag string, updateStatus bool) { - - deployPush := DeployPush{ - Namespace: cmiiEnv, - AppName: appName, - DeployStatus: updateStatus, - ToTag: newTag, - } - - deployPush.ParseCmiiDeployTemplate() - - _, err := DefaultClientOp.PublishDefault(deployPush.ParseCmiiDeployTemplate(), CmiiUpdatePushOptions) - if err != nil { - log.ErrorF("[PushCmiiUpdateMessage] - message push error ! %s", err.Error()) - return - } - -} diff --git a/agent-common/message_pusher/push_template.go b/agent-common/message_pusher/push_template.go deleted file mode 100644 index ab0f28a..0000000 --- a/agent-common/message_pusher/push_template.go +++ /dev/null @@ -1,43 +0,0 @@ -package message_pusher - -import ( - "bytes" - "text/template" -) - -const cmiiDeployTemplate = ` - {{if .DeployStatus}} - 部署状态: 成功😍 - {{- else }} - 部署状态: 失败👿👿👿 - {{- end}} -命名空间: {{.Namespace}} -应用名称: {{.AppName}} -副本数量: {{.Replicas}} -目标版本: {{.ToTag}} - ` - -type DeployPush struct { - Namespace string - AppName string - Replicas string - DeployStatus bool - ToTag string -} - -func (d DeployPush) ParseCmiiDeployTemplate() bytes.Buffer { - // 解析模板 - tmpl, err := template.New("cmiiDeployTemplate").Parse(cmiiDeployTemplate) - if err != nil { - panic(err) - } - - // 应用数据并打印结果 - var result bytes.Buffer - err = tmpl.Execute(&result, d) - if err != nil { - panic(err) - } - - return result -} diff --git a/agent-common/message_pusher/push_template_test.go b/agent-common/message_pusher/push_template_test.go deleted file mode 100644 index 998e12c..0000000 --- a/agent-common/message_pusher/push_template_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package message_pusher - -import ( - "fmt" - "testing" -) - -func TestDeployPush_ParseCmiiDeployTemplate(t *testing.T) { - deployPush := DeployPush{ - Namespace: "casc", - AppName: "sdasdas", - Replicas: "dasdasd", - DeployStatus: false, - ToTag: "5.4.0", - } - - template := deployPush.ParseCmiiDeployTemplate() - - fmt.Println(template.String()) -} diff --git a/message_pusher/cmii/CmiiMessageBody.go b/message_pusher/cmii/CmiiMessageBody.go new file mode 100644 index 0000000..531fbf8 --- /dev/null +++ b/message_pusher/cmii/CmiiMessageBody.go @@ -0,0 +1,67 @@ +package cmii + +import ( + "bytes" + "io.wdd.message_pusher/pusher" + "text/template" + "wdd.io/agent-common/logger" +) + +var log = logger.Log + +type MessageBody struct { + Namespace string + AppName string + ToTag string + Replicas string + DeployStatus bool +} + +const cmiiUpgradeTemplate = ` + {{if .DeployStatus}} + 部署状态: 成功😍 + {{- else }} + 部署状态: 失败👿👿👿 + {{- end}} +命名空间: {{.Namespace}} +应用名称: {{.AppName}} +副本数量: {{.Replicas}} +目标版本: {{.ToTag}} + ` + +func (d *MessageBody) ParseCmiiUpgradeTemplate() bytes.Buffer { + // 解析模板 + tmpl, err := template.New("cmiiUpgradeTemplate").Parse(cmiiUpgradeTemplate) + if err != nil { + panic(err) + } + + // 应用数据并打印结果 + var result bytes.Buffer + err = tmpl.Execute(&result, d) + if err != nil { + panic(err) + } + + return result +} + +var UpdatePushOptions = []pusher.PublishOption{ + pusher.WithTitle("更新应用"), + pusher.WithPriority("3"), +} + +// DefaultPushUpgradeMessage 使用默认的Client 发布更新的消息 +func (d *MessageBody) DefaultPushUpgradeMessage() *pusher.Message { + + upgradeTemplate := d.ParseCmiiUpgradeTemplate() + + result, err := pusher.DefaultPusherClient.PublishDefault(upgradeTemplate, UpdatePushOptions) + if err != nil { + log.ErrorF("[PushCmiiUpgradeMessage] - message push error ! %s", err.Error()) + return result + } + + return result + +} diff --git a/message_pusher/cmii/CmiiMessageBody_test.go b/message_pusher/cmii/CmiiMessageBody_test.go new file mode 100644 index 0000000..ce55175 --- /dev/null +++ b/message_pusher/cmii/CmiiMessageBody_test.go @@ -0,0 +1,20 @@ +package cmii + +import ( + "testing" + "wdd.io/agent-common/utils" +) + +func TestMessageBody_DefaultPushUpgradeMessage(t *testing.T) { + + deployPush := &MessageBody{ + Namespace: "uavcloud-dev", + AppName: "cmii-uav-platform", + Replicas: "1", + DeployStatus: false, + } + + message := deployPush.DefaultPushUpgradeMessage() + + utils.BeautifulPrint(message) +} diff --git a/message_pusher/go.mod b/message_pusher/go.mod new file mode 100644 index 0000000..5f91624 --- /dev/null +++ b/message_pusher/go.mod @@ -0,0 +1,40 @@ +module io.wdd.message_pusher + +go 1.22.1 + +require ( + github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6 + github.com/gin-gonic/gin v1.9.1 + gopkg.in/yaml.v3 v3.0.1 + wdd.io/agent-common v0.0.0 +) + +require ( + github.com/bytedance/sonic v1.9.1 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/leodido/go-urn v1.2.4 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect + go.uber.org/multierr v1.10.0 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/arch v0.3.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect +) + +replace wdd.io/agent-common => ../agent-common diff --git a/message_pusher/go.sum b/message_pusher/go.sum new file mode 100644 index 0000000..7ab702c --- /dev/null +++ b/message_pusher/go.sum @@ -0,0 +1,94 @@ +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6 h1:6VSn3hB5U5GeA6kQw4TwWIWbOhtvR2hmbBJnTOtqTWc= +github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6/go.mod h1:YxOVT5+yHzKvwhsiSIWmbAYM3Dr9AEEbER2dVayfBkg= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/message_pusher/main.go b/message_pusher/main.go new file mode 100644 index 0000000..ce63494 --- /dev/null +++ b/message_pusher/main.go @@ -0,0 +1,25 @@ +package main + +import ( + "github.com/gin-gonic/gin" + "io.wdd.message_pusher/router" +) + +func main() { + + engine := gin.Default() + + // 强制日志颜色化 + gin.ForceConsoleColor() + + // 定义路由组 + { + router.CMIIRouter(engine) + router.OctopusRouter(engine) + } + + err := engine.Run(":8080") + if err != nil { + panic(err) + } +} diff --git a/agent-common/message_pusher/client.go b/message_pusher/pusher/client.go similarity index 95% rename from agent-common/message_pusher/client.go rename to message_pusher/pusher/client.go index f83a17c..3bfab59 100644 --- a/agent-common/message_pusher/client.go +++ b/message_pusher/pusher/client.go @@ -1,4 +1,4 @@ -package message_pusher +package pusher import ( "bytes" @@ -13,8 +13,9 @@ import ( ) var ( - topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // Same as in server/server.go - log = logger.Log + topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // Same as in server/server.go + log = logger.Log + DefaultPusherClient = NewDefaultClient() ) const ( diff --git a/agent-common/message_pusher/config.go b/message_pusher/pusher/config.go similarity index 98% rename from agent-common/message_pusher/config.go rename to message_pusher/pusher/config.go index 3153d4d..e8dc7a5 100644 --- a/agent-common/message_pusher/config.go +++ b/message_pusher/pusher/config.go @@ -1,4 +1,4 @@ -package message_pusher +package pusher import ( "gopkg.in/yaml.v3" diff --git a/agent-common/message_pusher/options.go b/message_pusher/pusher/options.go similarity index 99% rename from agent-common/message_pusher/options.go rename to message_pusher/pusher/options.go index 3323d4e..5efc905 100644 --- a/agent-common/message_pusher/options.go +++ b/message_pusher/pusher/options.go @@ -1,4 +1,4 @@ -package message_pusher +package pusher import ( "encoding/base64" diff --git a/message_pusher/router/CmiiRouter.go b/message_pusher/router/CmiiRouter.go new file mode 100644 index 0000000..562e040 --- /dev/null +++ b/message_pusher/router/CmiiRouter.go @@ -0,0 +1,32 @@ +package router + +import ( + "github.com/gin-gonic/gin" + "io.wdd.message_pusher/cmii" + "net/http" +) + +func CMIIRouter(r *gin.Engine) { + + cmiiGroup := r.Group("/cmii") + + { + // 在这个组中添加你需要的路由器 + cmiiGroup.GET("/", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"message": "Welcome to cmii route group"}) + }) + + cmiiGroup.POST("/upgrade", func(c *gin.Context) { + // 获取请求中的参数 + var messageBody cmii.MessageBody + if err := c.ShouldBindJSON(&messageBody); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request body"}) + return + } + // 处理请求 + upgradeMessage := messageBody.DefaultPushUpgradeMessage() + + c.JSON(http.StatusOK, gin.H{"upgrade result are ": upgradeMessage}) + }) + } +} diff --git a/message_pusher/router/OctopusRouter.go b/message_pusher/router/OctopusRouter.go new file mode 100644 index 0000000..9cfd152 --- /dev/null +++ b/message_pusher/router/OctopusRouter.go @@ -0,0 +1,15 @@ +package router + +import ( + "github.com/gin-gonic/gin" + "net/http" +) + +func OctopusRouter(r *gin.Engine) { + octopusGroup := r.Group("/octopus") + { + octopusGroup.GET("/", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"message": "Welcome to octopus route group"}) + }) + } +} diff --git a/server/pom.xml b/server/pom.xml index 0175795..6ba8911 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -66,6 +66,7 @@ 1.5.5.Final +