From ed49a27fd4963cba2d32b2e77422d322cbbe0488 Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Sat, 12 Apr 2025 16:12:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=E6=AD=A3=E5=88=99?= =?UTF-8?q?=E8=A1=A8=E8=BE=BE=E5=BC=8F=E6=8F=90=E5=8F=96=E7=A3=81=E7=9B=98?= =?UTF-8?q?=E6=B8=A9=E5=BA=A6=E5=80=BC=EF=BC=8C=E5=B9=B6=E5=9C=A8=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E4=B8=AD=E6=B7=BB=E5=8A=A0=E6=91=84=E6=B0=8F=E5=BA=A6?= =?UTF-8?q?=E7=AC=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/raid/raid.go | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/handler/raid/raid.go b/handler/raid/raid.go index 4d5d08b..e855f1b 100644 --- a/handler/raid/raid.go +++ b/handler/raid/raid.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "os/exec" + "regexp" "strconv" "strings" "time" @@ -63,12 +64,14 @@ func checkRaidStatus() { // 检查温度 tempStr := disk.DriveTemperature if strings.Contains(tempStr, "C") { - // 提取温度数值 - tempParts := strings.Split(tempStr, "C") - tempValue, err := strconv.Atoi(strings.TrimSpace(tempParts[0])) - if err == nil && tempValue > temperatureThreshold { - alertMessages = append(alertMessages, - fmt.Sprintf("槽位 %d 的磁盘温度过高: %s", disk.SlotNumber, tempStr)) + // 使用更精确的正则表达式 + tempRegex := regexp.MustCompile(`(\d+)C`) + if matches := tempRegex.FindStringSubmatch(tempStr); len(matches) > 1 { + tempValue, err := strconv.Atoi(matches[1]) + if err == nil && tempValue > temperatureThreshold { + alertMessages = append(alertMessages, + fmt.Sprintf("槽位 %d 的磁盘温度过高: %s", disk.SlotNumber, tempStr)) + } } } @@ -150,7 +153,7 @@ func RaidHandler(msg model.Message) (reply *model.Reply) { } userId := strconv.FormatInt(int64(selfInfo.Data.UserID), 10) nickname := selfInfo.Data.Nickname - nodes = append(nodes, *message.NewNodeMessage().ParseMessage(userId, nickname, []any{message.NewTextMessage().ParseMessage("阵列信息:\n")})) + nodes = append(nodes, *message.NewNodeMessage().ParseMessage(userId, nickname, []any{message.NewTextMessage().ParseMessage("阵列信息:")})) for _, diskInfo := range diskInfoList { textMsg := message.NewTextMessage().ParseMessage(diskInfo.String()) nodes = append(nodes, *message.NewNodeMessage().ParseMessage(userId, nickname, []any{textMsg})) @@ -176,7 +179,7 @@ type DiskInfo struct { func (d *DiskInfo) String() string { sb := strings.Builder{} sb.WriteString(fmt.Sprintf("槽位: %d\n", d.SlotNumber+1)) - sb.WriteString(fmt.Sprintf("温度: %s\n", d.DriveTemperature)) + sb.WriteString(fmt.Sprintf("温度: %s℃\n", d.DriveTemperature)) sb.WriteString(fmt.Sprintf("型号: %s\n", d.Type)) sb.WriteString(fmt.Sprintf("SN: %s\n", d.Sn)) sb.WriteString(fmt.Sprintf("状态: %s\n", d.FirmwareState)) @@ -220,8 +223,14 @@ func ParseDiskInfoList(lines []string) []*DiskInfo { } } else if strings.HasPrefix(line, "Drive Temperature") { tempParts := strings.Split(line, ":") + mode := regexp.MustCompile(`(\d+) C`) if len(tempParts) >= 2 { - currentDisk.DriveTemperature = strings.TrimSpace(tempParts[1]) + matches := mode.FindStringSubmatch(tempParts[1]) + if len(matches) >= 1 { + currentDisk.DriveTemperature = matches[0] + } else { + currentDisk.DriveTemperature = strings.TrimSpace(tempParts[1]) + } } } else if strings.HasPrefix(line, "Drive has flagged a S.M.A.R.T alert") { smartParts := strings.Split(line, ":")