master
go 79 lines 1.92 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package powerstore
4
5 // collectHardwareHealth classifies hardware components by lifecycle state.
6 // Uses cached hardware data from discovery to avoid redundant API calls.
7 func (c *Collector) collectHardwareHealth() {
8 var fanOK, fanDeg, fanFail, fanUnk float64
9 var psuOK, psuDeg, psuFail, psuUnk float64
10 var drvOK, drvDeg, drvFail, drvUnk float64
11 var batOK, batDeg, batFail, batUnk float64
12 var nodOK, nodDeg, nodFail, nodUnk float64
13
14 for _, h := range c.discovered.hardware {
15 ok, deg, fail, unk := classifyState(h.LifecycleState)
16 switch h.Type {
17 case "Fan":
18 fanOK += ok
19 fanDeg += deg
20 fanFail += fail
21 fanUnk += unk
22 case "Power_Supply":
23 psuOK += ok
24 psuDeg += deg
25 psuFail += fail
26 psuUnk += unk
27 case "Drive":
28 drvOK += ok
29 drvDeg += deg
30 drvFail += fail
31 drvUnk += unk
32 case "Battery":
33 batOK += ok
34 batDeg += deg
35 batFail += fail
36 batUnk += unk
37 case "Node":
38 nodOK += ok
39 nodDeg += deg
40 nodFail += fail
41 nodUnk += unk
42 }
43 }
44
45 hw := c.mx.hardware
46 hw.fanOK.Observe(fanOK)
47 hw.fanDegraded.Observe(fanDeg)
48 hw.fanFailed.Observe(fanFail)
49 hw.fanUnknown.Observe(fanUnk)
50 hw.psuOK.Observe(psuOK)
51 hw.psuDegraded.Observe(psuDeg)
52 hw.psuFailed.Observe(psuFail)
53 hw.psuUnknown.Observe(psuUnk)
54 hw.driveOK.Observe(drvOK)
55 hw.driveDegraded.Observe(drvDeg)
56 hw.driveFailed.Observe(drvFail)
57 hw.driveUnknown.Observe(drvUnk)
58 hw.batteryOK.Observe(batOK)
59 hw.batteryDegraded.Observe(batDeg)
60 hw.batteryFailed.Observe(batFail)
61 hw.batteryUnknown.Observe(batUnk)
62 hw.nodeOK.Observe(nodOK)
63 hw.nodeDegraded.Observe(nodDeg)
64 hw.nodeFailed.Observe(nodFail)
65 hw.nodeUnknown.Observe(nodUnk)
66 }
67
68 func classifyState(state string) (ok, degraded, failed, unknown float64) {
69 switch state {
70 case "Healthy", "healthy":
71 return 1, 0, 0, 0
72 case "Degraded", "degraded":
73 return 0, 1, 0, 0
74 case "Failed", "failed", "Error", "error":
75 return 0, 0, 1, 0
76 default:
77 return 0, 0, 0, 1
78 }
79 }