39 lines
1.3 KiB
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, "待核查")))
|
|
}
|