@@ -4,14 +4,18 @@ import (
44 "bufio"
55 "fmt"
66 "os"
7+ "strconv"
78 "strings"
89
910 "raidman/src/internal/domain"
1011)
1112
1213func GetArrayStatus () (* domain.ArrayStatus , error ) {
14+ return getArrayStatusWithPaths ("/var/local/emhttp/var.ini" , "/var/local/emhttp/disks.ini" , "/var/local/emhttp/devs.ini" )
15+ }
16+
17+ func getArrayStatusWithPaths (varIniPath , disksIniPath , devsIniPath string ) (* domain.ArrayStatus , error ) {
1318 // 1. Read /var/local/emhttp/var.ini for Global Status
14- varIniPath := "/var/local/emhttp/var.ini"
1519 if _ , err := os .Stat (varIniPath ); os .IsNotExist (err ) {
1620 // Fallback for dev/testing
1721 return & domain.ArrayStatus {
@@ -62,13 +66,27 @@ func GetArrayStatus() (*domain.ArrayStatus, error) {
6266 var total , pos , errs , dur int64
6367 var dTime , dBlocks int64
6468
65- fmt .Sscanf (varMap ["mdResyncSize" ], "%d" , & total ) // Use mdResyncSize for total
66- fmt .Sscanf (varMap ["mdResyncPos" ], "%d" , & pos )
67- fmt .Sscanf (varMap ["mdResyncCorr" ], "%d" , & errs )
68- fmt .Sscanf (varMap ["mdResyncDt" ], "%d" , & dur )
69+ // Helper for robust parsing
70+ parseInt := func (key string ) int64 {
71+ val , ok := varMap [key ]
72+ if ! ok || val == "" {
73+ return 0
74+ }
75+ // Plain integer parsing
76+ i , err := strconv .ParseInt (val , 10 , 64 )
77+ if err != nil {
78+ return 0
79+ }
80+ return i
81+ }
82+
83+ total = parseInt ("mdResyncSize" )
84+ pos = parseInt ("mdResyncPos" )
85+ errs = parseInt ("mdResyncCorr" )
86+ dur = parseInt ("mdResyncDt" )
6987 // For speed calc
70- fmt . Sscanf ( varMap [ "mdResyncDt" ], "%d" , & dTime )
71- fmt . Sscanf ( varMap [ "mdResyncDb" ], "%d" , & dBlocks )
88+ dTime = parseInt ( "mdResyncDt" )
89+ dBlocks = parseInt ( "mdResyncDb" )
7290
7391 status .ParityCheckStatus .Total = total
7492 status .ParityCheckStatus .Pos = pos
@@ -201,7 +219,6 @@ func GetArrayStatus() (*domain.ArrayStatus, error) {
201219 }
202220
203221 // 2. Read /var/local/emhttp/disks.ini for Disk Details
204- disksIniPath := "/var/local/emhttp/disks.ini"
205222 disksMap , err := parseIniSections (disksIniPath )
206223 if err == nil {
207224 for section , data := range disksMap {
@@ -247,7 +264,6 @@ func GetArrayStatus() (*domain.ArrayStatus, error) {
247264 }
248265
249266 // 3. Read /var/local/emhttp/devs.ini for Unassigned Devices
250- devsIniPath := "/var/local/emhttp/devs.ini"
251267 devsMap , err := parseIniSections (devsIniPath )
252268 if err == nil {
253269 for section , data := range devsMap {
0 commit comments