package inspur import ( "regexp" "strconv" "strings" "git.mchus.pro/mchus/logpile/internal/models" ) var reFaultGPU = regexp.MustCompile(`\bF_GPU(\d+)\b`) func applyGPUStatusFromEvents(hw *models.HardwareConfig, events []models.Event) { if hw == nil || len(hw.GPUs) == 0 { return } faulty := make(map[int]bool) for _, e := range events { if !isGPUFaultEvent(e) { continue } matches := reFaultGPU.FindAllStringSubmatch(e.Description, -1) for _, m := range matches { if len(m) < 2 { continue } idx, err := strconv.Atoi(m[1]) if err == nil && idx >= 0 { faulty[idx] = true } } } for i := range hw.GPUs { gpu := &hw.GPUs[i] idx, ok := extractLogicalGPUIndex(gpu.Slot) if ok && faulty[idx] { gpu.Status = "Critical" continue } if strings.TrimSpace(gpu.Status) == "" { gpu.Status = "OK" } } } func isGPUFaultEvent(e models.Event) bool { desc := strings.ToLower(e.Description) if strings.Contains(desc, "bios miss f_gpu") { return true } return strings.EqualFold(strings.TrimSpace(e.ID), "17FFB002") }