From 443fb992699818305e3d7f6885ca7d1d36fbe7cd Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期三, 01 十一月 2023 15:47:57 +0800 Subject: [PATCH] 增加系统运行时间,系统状态,集群状态,集群节点数 --- utils/cmd.go | 14 +++ conf/config.go | 34 ++++++++ serf/sync.go | 34 +++++++- model/response/common.go | 17 +++ docs/swagger.yaml | 24 ++++++ api/v1/device.go | 10 + crontask/cron_task.go | 10 ++ docs/docs.go | 35 ++++++++ docs/swagger.json | 35 ++++++++ 9 files changed, 202 insertions(+), 11 deletions(-) diff --git a/api/v1/device.go b/api/v1/device.go index ee652be..5c08540 100644 --- a/api/v1/device.go +++ b/api/v1/device.go @@ -73,9 +73,13 @@ return } resp := response.DeviceListResponse{ - SystemDeviceID: conf.Conf.System.DeviceId, - CurrentDeviceID: conf.Conf.CurrentDeviceID, - DeviceIDList: list, + SystemDeviceID: conf.Conf.System.DeviceId, + CurrentDeviceID: conf.Conf.CurrentDeviceID, + DeviceIDList: list, + SystemDeviceStatus: response.SystemDeviceStatusNormal, + ClusterStatus: conf.Conf.SerfClusterStatus, + ClusterNodeQuantity: conf.Conf.ClusterNodeQuantity, + SystemDeviceRunSince: conf.Conf.SystemDeviceRunSince, } ctx.OkWithDetailed(resp) } diff --git a/conf/config.go b/conf/config.go index ad8f0cc..53632ae 100644 --- a/conf/config.go +++ b/conf/config.go @@ -4,8 +4,11 @@ "apsClient/pkg/convertx" "apsClient/pkg/logx" "apsClient/pkg/sqlitex" + "apsClient/pkg/timex" + "apsClient/utils" "github.com/spf13/viper" "log" + "time" ) var ( @@ -104,7 +107,11 @@ CurrentDeviceID string //璁剧疆褰撳墠闈㈡澘鎺у埗鐨勮澶� - SerfClusterStatus string + SerfClusterStatus string //闆嗙兢鐘舵�� + + ClusterNodeQuantity int //闆嗙兢鑺傜偣鏁伴噺 + + SystemDeviceRunSince int64 //绯荤粺寮�濮嬭繍琛屾椂闂存埑 } ) @@ -130,6 +137,19 @@ if Conf.PLC.StandbyTime == 0 { Conf.PLC.StandbyTime = 300 //5鍒嗛挓 } + + uptimeStr, err := utils.Exec("uptime -s") + if err == nil { + t, err := timex.StringToTime(uptimeStr) + if err == nil { + Conf.SystemDeviceRunSince = t.Unix() + } + } else { + Conf.SystemDeviceRunSince = time.Now().Unix() + } + + SetUpTime() + ShowConfig() } @@ -150,3 +170,15 @@ log.Printf(" services : %+v", Conf.Services) log.Println("......................................................") } + +func SetUpTime() { + uptimeStr, err := utils.Exec("uptime -s") + if err == nil { + t, err := timex.StringToTime(uptimeStr) + if err == nil { + Conf.SystemDeviceRunSince = t.Unix() + } + } else { + Conf.SystemDeviceRunSince = time.Now().Unix() + } +} diff --git a/crontask/cron_task.go b/crontask/cron_task.go index 230d38e..66ddf9b 100644 --- a/crontask/cron_task.go +++ b/crontask/cron_task.go @@ -7,6 +7,7 @@ "apsClient/nsq" "apsClient/pkg/ecode" "apsClient/pkg/logx" + "apsClient/serf" "apsClient/service" "fmt" "github.com/go-co-op/gocron" @@ -79,6 +80,9 @@ s.Every(60).Seconds().Do(SyncProductionProgress) //鍚屾鐢熶骇鏁版嵁 s.Every(30).Seconds().Do(SyncTaskStatus) //鍚屾浠诲姟鐘舵�� } + + s.Every(10).Seconds().Do(QueryClusterStatus) //鏌ヨ闆嗙兢鑺傜偣鏁伴噺 + s.StartAsync() return nil } @@ -152,3 +156,9 @@ logx.Errorf("send pull data msg error:%v, msg:%+v", err.Error(), msg) } } + +func QueryClusterStatus() { + clusterStatus, nodeQuantity := serf.QueryClusterStatusAndNodeQuantity() + conf.Conf.SerfClusterStatus = clusterStatus + conf.Conf.ClusterNodeQuantity = nodeQuantity +} diff --git a/docs/docs.go b/docs/docs.go index c4341c0..27a9079 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -1482,6 +1482,14 @@ "response.DeviceListResponse": { "type": "object", "properties": { + "clusterNodeQuantity": { + "description": "闆嗙兢鑺傜偣鏁伴噺", + "type": "integer" + }, + "clusterStatus": { + "description": "闆嗙兢鐘舵��", + "type": "string" + }, "currentDeviceID": { "description": "褰撳墠閫夊畾鐨勭敓浜ц澶�", "type": "string" @@ -1496,6 +1504,18 @@ "systemDeviceID": { "description": "宸ユ帶鏈鸿澶嘔D", "type": "string" + }, + "systemDeviceRunSince": { + "description": "绯荤粺杩愯寮�濮嬫椂闂存埑", + "type": "integer" + }, + "systemDeviceStatus": { + "description": "璁惧鐘舵��", + "allOf": [ + { + "$ref": "#/definitions/response.SystemDeviceStatus" + } + ] } } }, @@ -1551,6 +1571,21 @@ } } }, + "response.SystemDeviceStatus": { + "type": "integer", + "enum": [ + 1, + 2 + ], + "x-enum-comments": { + "SystemDeviceStatusNormal": "姝e父", + "SystemDeviceStatusUnNormal": "寮傚父" + }, + "x-enum-varnames": [ + "SystemDeviceStatusNormal", + "SystemDeviceStatusUnNormal" + ] + }, "response.TaskCountdown": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index ca08c1d..45f97c4 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -1470,6 +1470,14 @@ "response.DeviceListResponse": { "type": "object", "properties": { + "clusterNodeQuantity": { + "description": "闆嗙兢鑺傜偣鏁伴噺", + "type": "integer" + }, + "clusterStatus": { + "description": "闆嗙兢鐘舵��", + "type": "string" + }, "currentDeviceID": { "description": "褰撳墠閫夊畾鐨勭敓浜ц澶�", "type": "string" @@ -1484,6 +1492,18 @@ "systemDeviceID": { "description": "宸ユ帶鏈鸿澶嘔D", "type": "string" + }, + "systemDeviceRunSince": { + "description": "绯荤粺杩愯寮�濮嬫椂闂存埑", + "type": "integer" + }, + "systemDeviceStatus": { + "description": "璁惧鐘舵��", + "allOf": [ + { + "$ref": "#/definitions/response.SystemDeviceStatus" + } + ] } } }, @@ -1539,6 +1559,21 @@ } } }, + "response.SystemDeviceStatus": { + "type": "integer", + "enum": [ + 1, + 2 + ], + "x-enum-comments": { + "SystemDeviceStatusNormal": "姝e父", + "SystemDeviceStatusUnNormal": "寮傚父" + }, + "x-enum-varnames": [ + "SystemDeviceStatusNormal", + "SystemDeviceStatusUnNormal" + ] + }, "response.TaskCountdown": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index a990e3a..5e38b70 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -491,6 +491,12 @@ type: object response.DeviceListResponse: properties: + clusterNodeQuantity: + description: 闆嗙兢鑺傜偣鏁伴噺 + type: integer + clusterStatus: + description: 闆嗙兢鐘舵�� + type: string currentDeviceID: description: 褰撳墠閫夊畾鐨勭敓浜ц澶� type: string @@ -502,6 +508,13 @@ systemDeviceID: description: 宸ユ帶鏈鸿澶嘔D type: string + systemDeviceRunSince: + description: 绯荤粺杩愯寮�濮嬫椂闂存埑 + type: integer + systemDeviceStatus: + allOf: + - $ref: '#/definitions/response.SystemDeviceStatus' + description: 璁惧鐘舵�� type: object response.ListResponse: properties: @@ -537,6 +550,17 @@ totalNumber: type: integer type: object + response.SystemDeviceStatus: + enum: + - 1 + - 2 + type: integer + x-enum-comments: + SystemDeviceStatusNormal: 姝e父 + SystemDeviceStatusUnNormal: 寮傚父 + x-enum-varnames: + - SystemDeviceStatusNormal + - SystemDeviceStatusUnNormal response.TaskCountdown: properties: countDownHour: diff --git a/model/response/common.go b/model/response/common.go index 78341ce..9e36958 100644 --- a/model/response/common.go +++ b/model/response/common.go @@ -70,8 +70,19 @@ Data interface{} } +type SystemDeviceStatus int + +const ( + SystemDeviceStatusNormal SystemDeviceStatus = 1 //姝e父 + SystemDeviceStatusUnNormal SystemDeviceStatus = 2 //寮傚父 +) + type DeviceListResponse struct { - SystemDeviceID string `json:"systemDeviceID,omitempty"` //宸ユ帶鏈鸿澶嘔D - CurrentDeviceID string `json:"currentDeviceID,omitempty"` //褰撳墠閫夊畾鐨勭敓浜ц澶� - DeviceIDList []string `json:"deviceIDList,omitempty"` //鐢熶骇璁惧id鍒楄〃 + SystemDeviceID string `json:"systemDeviceID,omitempty"` //宸ユ帶鏈鸿澶嘔D + CurrentDeviceID string `json:"currentDeviceID,omitempty"` //褰撳墠閫夊畾鐨勭敓浜ц澶� + DeviceIDList []string `json:"deviceIDList,omitempty"` //鐢熶骇璁惧id鍒楄〃 + SystemDeviceStatus SystemDeviceStatus `json:"systemDeviceStatus"` //璁惧鐘舵�� + ClusterStatus string `json:"clusterStatus"` //闆嗙兢鐘舵�� + ClusterNodeQuantity int `json:"clusterNodeQuantity"` //闆嗙兢鑺傜偣鏁伴噺 + SystemDeviceRunSince int64 `json:"systemDeviceRunSince"` //绯荤粺杩愯寮�濮嬫椂闂存埑 } diff --git a/serf/sync.go b/serf/sync.go index d8ef4c7..16d19ac 100644 --- a/serf/sync.go +++ b/serf/sync.go @@ -5,6 +5,7 @@ "context" "encoding/json" "fmt" + "github.com/mitchellh/mapstructure" "os" "os/signal" "regexp" @@ -311,7 +312,7 @@ } // 鏌ヨ闆嗙兢鐘舵��, 杩斿洖 master, slave, leave -func (ss *SyncServer) QueryClusterStat() string { +func (ss *SyncServer) QueryClusterStat() *bhomeclient.Reply { clusterStatTopic := "/data/api-v/cluster/status" req := bhomeclient.Request{ Path: clusterStatTopic, @@ -322,14 +323,14 @@ if err != nil { fmt.Println("RequestTopic error", err.Error()) - return "" + return reply } ss.ClusterStatus = reply.Msg logx.Debugf("褰撳墠闆嗙兢鐘舵��: %s", ss.ClusterStatus) - return reply.Msg + return reply } func (ss *SyncServer) handleDbLoggerPrint() { @@ -439,7 +440,7 @@ return err } -func (ss *SyncServer)Print(values ...interface{}) { +func (ss *SyncServer) Print(values ...interface{}) { var ( level = values[0] ) @@ -519,3 +520,28 @@ return "" } + +type NodeInfo struct { + NodeID string `json:"node_id,omitempty"` + NodeIp string `json:"node_ip,omitempty"` + NodeName string `json:"node_name,omitempty"` + ClusterID string `json:"cluster_id"` + CreateTime string `json:"create_time"` + DeviceType string `json:"device_type"` + DriftState string `json:"drift_state"` + Online string `json:"online"` +} + +func QueryClusterStatusAndNodeQuantity() (string, int) { + reply := agent.QueryClusterStat() + if reply == nil { + return "", 0 + } + var nodes []NodeInfo + err := mapstructure.Decode(reply.Data, &nodes) + if err != nil { + logx.Errorf("mapstructure.Decode QueryClusterStat data err:%v", err) + return reply.Msg, 0 + } + return reply.Msg, len(nodes) +} diff --git a/utils/cmd.go b/utils/cmd.go index b7392b1..cbce3c6 100644 --- a/utils/cmd.go +++ b/utils/cmd.go @@ -26,3 +26,17 @@ } return nil } + +func Exec(command string) (outputStr string, err error) { + cmd := exec.Command(command) + + // 鎹曡幏鍛戒护鐨勮緭鍑� + output, err := cmd.Output() + if err != nil { + return "", fmt.Errorf("鍛戒护鎵ц澶辫触: %v", err) + } + + // 灏嗚緭鍑鸿浆鎹负瀛楃涓� + outputStr = string(output) + return +} -- Gitblit v1.8.0