Scert/backend/internal/notification/recovery_warning.go

39 lines
1.3 KiB
Go

package notification
import (
"strings"
"git.pcux.cn/xuans/Scert/backend/internal/deployment"
)
// 恢复警告不受明细开关或摘要条数限制,不包含服务器名称及远端输出。
func recoveryWarning(event Event) string {
const warning = "需要人工核查:部署恢复尚未确认或部署锁需要处理,勿直接重试或删除锁。请管理员核查服务器文件、服务和站点状态。"
switch strings.ToLower(strings.TrimSpace(event.Deployment.RecoveryStatus)) {
case "unconfirmed", "failed", "recovery_required":
return warning
}
for _, result := range event.Deployment.Results {
switch result.FailureCode {
case deployment.FailureRollback, deployment.FailureRuntimeUnknown,
deployment.FailureRecoveryPending, deployment.FailureRecoveryUnknown,
deployment.FailureLock, deployment.FailureLockRelease:
return warning
}
if hasRecoveryWarning(result.Message) {
return warning
}
}
if hasRecoveryWarning(event.Error) {
return warning
}
return ""
}
// 兼容未携带结构化诊断的历史任务。
func hasRecoveryWarning(message string) bool {
return strings.Contains(message, "部署锁") ||
(strings.Contains(message, "恢复") &&
(strings.Contains(message, "未确认") || strings.Contains(message, "待核查")))
}