diff --git a/internal/db/models/message_dao.go b/internal/db/models/message_dao.go index 405c84dd..1e5a7bb3 100644 --- a/internal/db/models/message_dao.go +++ b/internal/db/models/message_dao.go @@ -111,8 +111,11 @@ func (this *MessageDAO) FindEnabledMessage(tx *dbs.Tx, id int64) (*Message, erro } // CreateClusterMessage 创建集群消息 -func (this *MessageDAO) CreateClusterMessage(tx *dbs.Tx, role string, clusterId int64, messageType MessageType, level string, subject string, body string, paramsJSON []byte) error { - _, err := this.createMessage(tx, role, clusterId, 0, messageType, level, subject, body, paramsJSON) +func (this *MessageDAO) CreateClusterMessage(tx *dbs.Tx, role string, clusterId int64, messageType MessageType, level string, subject string, shortBody string, body string, paramsJSON []byte) error { + if len(shortBody) == 0 { + shortBody = body + } + _, err := this.createMessage(tx, role, clusterId, 0, messageType, level, subject, shortBody, paramsJSON) if err != nil { return err } diff --git a/internal/db/models/message_dao_test.go b/internal/db/models/message_dao_test.go index ead42881..ceb19a67 100644 --- a/internal/db/models/message_dao_test.go +++ b/internal/db/models/message_dao_test.go @@ -12,7 +12,7 @@ func TestMessageDAO_CreateClusterMessage(t *testing.T) { var tx *dbs.Tx dao := NewMessageDAO() - err := dao.CreateClusterMessage(tx, nodeconfigs.NodeRoleNode, 1, "test", "error", "123", "123", []byte("456")) + err := dao.CreateClusterMessage(tx, nodeconfigs.NodeRoleNode, 1, "test", "error", "123", "123", "123", []byte("456")) if err != nil { t.Fatal(err) } diff --git a/internal/db/models/message_task_dao_test.go b/internal/db/models/message_task_dao_test.go index dd614842..db9c37f6 100644 --- a/internal/db/models/message_task_dao_test.go +++ b/internal/db/models/message_task_dao_test.go @@ -8,20 +8,6 @@ import ( "testing" ) -func TestMessageTaskDAO_FindSendingMessageTasks(t *testing.T) { - dbs.NotifyReady() - - var tx *dbs.Tx - tasks, err := models.NewMessageTaskDAO().FindSendingMessageTasks(tx, 100) - if err != nil { - t.Fatal(err) - } - t.Log(len(tasks), "tasks") - for _, task := range tasks { - t.Log("task:", task.Id, "recipient:", task.RecipientId) - } -} - func TestMessageTaskDAO_CleanExpiredMessageTasks(t *testing.T) { var dao = models.NewMessageTaskDAO() var tx *dbs.Tx diff --git a/internal/tasks/health_check_cluster_task.go b/internal/tasks/health_check_cluster_task.go index f3deefd1..1264699e 100644 --- a/internal/tasks/health_check_cluster_task.go +++ b/internal/tasks/health_check_cluster_task.go @@ -10,6 +10,8 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/maps" + "github.com/iwind/TeaGo/types" + "strings" "time" ) @@ -127,8 +129,32 @@ func (this *HealthCheckClusterTask) Loop() error { if err != nil { return err } - var message = "有" + numberutils.FormatInt(len(failedResults)) + "个节点IP在健康检查中出现问题" - err = models.NewMessageDAO().CreateClusterMessage(nil, nodeconfigs.NodeRoleNode, this.clusterId, models.MessageTypeHealthCheckFailed, models.MessageLevelError, message, message, failedResultsJSON) + var subject = "有" + numberutils.FormatInt(len(failedResults)) + "个节点IP在健康检查中出现问题" + var message = "有" + numberutils.FormatInt(len(failedResults)) + "个节点IP在健康检查中出现问题:" + var failedDescriptions = []string{} + var failedIndex int + for _, result := range results { + if result.IsOk || result.Node == nil { + continue + } + failedIndex++ + failedDescriptions = append(failedDescriptions, "节点"+types.String(failedIndex)+":"+result.Node.Name+",IP:"+result.NodeAddr) + } + + const maxNodeDescriptions = 10 + var isOverMax = false + if len(failedDescriptions) > maxNodeDescriptions { + failedDescriptions = failedDescriptions[:maxNodeDescriptions] + isOverMax = true + } + message += strings.Join(failedDescriptions, ";") + if isOverMax { + message += " ..." + } else { + message += "。" + } + + err = models.NewMessageDAO().CreateClusterMessage(nil, nodeconfigs.NodeRoleNode, this.clusterId, models.MessageTypeHealthCheckFailed, models.MessageLevelError, subject, subject, message, failedResultsJSON) if err != nil { return err }