sync: 同步 v1.0.4 开源代码并脱敏
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
package lifecycle
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"git.5iot.com/iotlcm-public/iotlcm-worker-svr/internal/model/entity"
|
||||
lifecycle "git.5iot.com/iotlcm-public/iotlcm-worker-svr/internal/service/lifecycle"
|
||||
)
|
||||
|
||||
// batchFailureSummary 生成中文失败汇总,替代原先的英文「N SIM cards failed」。
|
||||
// 形如:共50张,成功28张,失败22张;主要失败原因:当前卡状态不支持该操作
|
||||
func batchFailureSummary(total, success, fail int, reasons []string) string {
|
||||
var builder strings.Builder
|
||||
fmt.Fprintf(&builder, "共%d张,成功%d张,失败%d张", total, success, fail)
|
||||
if reason := dominantReason(reasons); reason != "" {
|
||||
builder.WriteString(";主要失败原因:")
|
||||
builder.WriteString(reason)
|
||||
}
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
// dominantReason 取出现次数最多的失败原因;次数相同时按字典序,保证结果稳定可测。
|
||||
func dominantReason(reasons []string) string {
|
||||
counts := make(map[string]int, len(reasons))
|
||||
for _, reason := range reasons {
|
||||
trimmed := strings.TrimSpace(reason)
|
||||
if trimmed == "" {
|
||||
continue
|
||||
}
|
||||
counts[trimmed]++
|
||||
}
|
||||
if len(counts) == 0 {
|
||||
return ""
|
||||
}
|
||||
keys := make([]string, 0, len(counts))
|
||||
for key := range counts {
|
||||
keys = append(keys, key)
|
||||
}
|
||||
sort.Slice(keys, func(i, j int) bool {
|
||||
if counts[keys[i]] != counts[keys[j]] {
|
||||
return counts[keys[i]] > counts[keys[j]]
|
||||
}
|
||||
return keys[i] < keys[j]
|
||||
})
|
||||
return keys[0]
|
||||
}
|
||||
|
||||
// lifecycleFailureSummary 依据内存中的任务明细生成汇总。
|
||||
func lifecycleFailureSummary(details []*lifecycle.Detail, success, fail int) string {
|
||||
reasons := make([]string, 0, fail)
|
||||
for _, detail := range details {
|
||||
if detail != nil && strings.TrimSpace(detail.Reason) != "" {
|
||||
reasons = append(reasons, detail.Reason)
|
||||
}
|
||||
}
|
||||
return batchFailureSummary(len(details), success, fail, reasons)
|
||||
}
|
||||
|
||||
// storedFailureSummary 依据已落库的批次明细生成汇总(重启批次的复机阶段使用)。
|
||||
func storedFailureSummary(details []*entity.BatchDetail, success, fail int) string {
|
||||
reasons := make([]string, 0, fail)
|
||||
for _, detail := range details {
|
||||
if detail != nil && strings.TrimSpace(detail.ErrorReason) != "" {
|
||||
reasons = append(reasons, detail.ErrorReason)
|
||||
}
|
||||
}
|
||||
return batchFailureSummary(len(details), success, fail, reasons)
|
||||
}
|
||||
Reference in New Issue
Block a user