Skip to content

Commit d67f16b

Browse files
committed
fortiswitch_health probe
1 parent 79a859a commit d67f16b

File tree

4 files changed

+698
-0
lines changed

4 files changed

+698
-0
lines changed

pkg/probe/fortiswitch_health.go

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
package probe
2+
3+
import (
4+
"log"
5+
6+
"github.com/bluecmd/fortigate_exporter/pkg/http"
7+
"github.com/prometheus/client_golang/prometheus"
8+
9+
)
10+
11+
func probeSwitchHealth(c http.FortiHTTP, meta *TargetMetadata) ([]prometheus.Metric, bool) {
12+
var (
13+
mSumCPU = prometheus.NewDesc(
14+
"fortiswitch_health_summary_cpu",
15+
"Summary CPU health",
16+
[]string{"rating", "fortiswitch", "VDOM"}, nil,
17+
)
18+
mSumMem = prometheus.NewDesc(
19+
"fortiswitch_health_summary_mem",
20+
"Summary MEM health",
21+
[]string{"rating", "fortiswitch", "VDOM"}, nil,
22+
)
23+
mSumUpTime = prometheus.NewDesc(
24+
"fortiswitch_health_summary_uptime",
25+
"Summary Uptime",
26+
[]string{"rating", "fortiswitch", "VDOM"}, nil,
27+
)
28+
mSumTemp = prometheus.NewDesc(
29+
"fortiswitch_health_summary_temp",
30+
"Summary Temperature health",
31+
[]string{"rating", "fortiswitch", "VDOM"}, nil,
32+
)
33+
mTemp = prometheus.NewDesc(
34+
"fortiswitch_health_temperature",
35+
"Temperature per switch sensor",
36+
[]string{"unit", "module", "fortiswitch", "VDOM"}, nil,
37+
)
38+
mCpuUser = prometheus.NewDesc(
39+
"fortiswitch_health_performance_stats_cpu_user",
40+
"Fortiswitch CPU user usage",
41+
[]string{"unit", "fortiswitch", "VDOM"}, nil,
42+
)
43+
mCpuSystem = prometheus.NewDesc(
44+
"fortiswitch_health_performance_stats_cpu_system",
45+
"Fortiswitch CPU system usage",
46+
[]string{"unit", "fortiswitch", "VDOM"}, nil,
47+
)
48+
mCpuIdle = prometheus.NewDesc(
49+
"fortiswitch_health_performance_stats_cpu_idle",
50+
"Fortiswitch CPU idle",
51+
[]string{"unit", "fortiswitch", "VDOM"}, nil,
52+
)
53+
mCpuNice = prometheus.NewDesc(
54+
"fortiswitch_health_performance_stats_cpu_nice",
55+
"Fortiswitch CPU nice usage",
56+
[]string{"unit", "fortiswitch", "VDOM"}, nil,
57+
)
58+
)
59+
type Sum struct {
60+
Value float64 `json:"value"`
61+
Rating string `json:"rating"`
62+
}
63+
type Status struct {
64+
Value float64 `json:"value"`
65+
Unit string `json:"unit"`
66+
}
67+
type Uptime struct {
68+
Days Status `json:"days"`
69+
Hours Status `json:"hours"`
70+
Minutes Status `json:"minutes"`
71+
}
72+
type Network struct {
73+
In1Min Status `json:"in-1min"`
74+
In10Min Status `json:"in-10min"`
75+
In30Min Status `json:"in-30min"`
76+
}
77+
type Memory struct {
78+
Used Status `json:"used"`
79+
}
80+
type CPU struct {
81+
User Status `json:"user"`
82+
System Status `json:"system"`
83+
Nice Status `json:"nice"`
84+
Idle Status `json:"idle"`
85+
}
86+
type PerformanceStatus struct {
87+
CPU CPU `json:"cpu"`
88+
Memory Memory `json:"memory"`
89+
Network Network `json:"network"`
90+
Uptime Uptime `json:"uptime"`
91+
}
92+
type Temperature struct {
93+
Module string
94+
Status Status
95+
}
96+
type Summary struct {
97+
Overall string `json:"overall"`
98+
CPU Sum
99+
Memory Sum
100+
Uptime Sum
101+
Temperature Sum
102+
}
103+
type Poe struct {
104+
Value int `json:"value"`
105+
MaxValue int `json:"max_value"`
106+
Unit string `json:"unit"`
107+
}
108+
type Results struct {
109+
PerformanceStatus PerformanceStatus `json:"performance-status"`
110+
Temperature []Temperature `json:"temperature"`
111+
Summary Summary `json:"summary"`
112+
Poe Poe `json:"poe"`
113+
}
114+
115+
type swResponse struct {
116+
Results map[string]Results `json:"results"`
117+
VDOM string
118+
}
119+
var r swResponse
120+
//var r map[string]swResponse
121+
//var r []swResponse
122+
123+
if err := c.Get("api/v2/monitor/switch-controller/managed-switch/health", "vdom=root", &r); err != nil {
124+
log.Printf("Error: %v", err)
125+
return nil, false
126+
}
127+
m := []prometheus.Metric{}
128+
//for _, sw := range r {
129+
for fswitch, hr := range r.Results {
130+
131+
m = append(m, prometheus.MustNewConstMetric(mSumCPU, prometheus.GaugeValue, hr.Summary.CPU.Value, hr.Summary.CPU.Rating, fswitch, r.VDOM))
132+
m = append(m, prometheus.MustNewConstMetric(mSumMem, prometheus.GaugeValue, hr.Summary.Memory.Value, hr.Summary.Memory.Rating, fswitch, r.VDOM))
133+
m = append(m, prometheus.MustNewConstMetric(mSumUpTime, prometheus.GaugeValue, hr.Summary.Uptime.Value, hr.Summary.Uptime.Rating, fswitch, r.VDOM))
134+
m = append(m, prometheus.MustNewConstMetric(mSumTemp, prometheus.GaugeValue, hr.Summary.Temperature.Value, hr.Summary.Temperature.Rating, fswitch, r.VDOM))
135+
136+
for _, ts := range hr.Temperature {
137+
m = append(m, prometheus.MustNewConstMetric(mTemp, prometheus.GaugeValue, ts.Status.Value, ts.Status.Unit, ts.Module, fswitch, r.VDOM))
138+
}
139+
140+
CpuUnit := hr.PerformanceStatus.CPU.System.Unit
141+
/*if CpuUnit == "%" {
142+
CpuUnit = "%%"
143+
}*/
144+
145+
m = append(m, prometheus.MustNewConstMetric(mCpuUser, prometheus.GaugeValue, hr.PerformanceStatus.CPU.User.Value, CpuUnit, fswitch, r.VDOM))
146+
m = append(m, prometheus.MustNewConstMetric(mCpuNice, prometheus.GaugeValue, hr.PerformanceStatus.CPU.Nice.Value, CpuUnit, fswitch, r.VDOM))
147+
m = append(m, prometheus.MustNewConstMetric(mCpuSystem, prometheus.GaugeValue, hr.PerformanceStatus.CPU.System.Value, CpuUnit, fswitch, r.VDOM))
148+
m = append(m, prometheus.MustNewConstMetric(mCpuIdle, prometheus.GaugeValue, hr.PerformanceStatus.CPU.Idle.Value, CpuUnit, fswitch, r.VDOM))
149+
}
150+
//}
151+
return m, true
152+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package probe
2+
3+
import (
4+
"strings"
5+
"testing"
6+
7+
"github.com/prometheus/client_golang/prometheus"
8+
"github.com/prometheus/client_golang/prometheus/testutil"
9+
)
10+
11+
func TestSwitchHealth(t *testing.T) {
12+
c := newFakeClient()
13+
c.prepare("api/v2/monitor/switch-controller/managed-switch/health", "testdata/fsw-health.jsonnet")
14+
r := prometheus.NewPedanticRegistry()
15+
if !testProbe(probeSwitchHealth, c, r) {
16+
t.Errorf("probeSwitchHealth() returned non-success")
17+
}
18+
19+
em := `
20+
# HELP fortiswitch_health_performance_stats_cpu_idle Fortiswitch CPU idle
21+
# TYPE fortiswitch_health_performance_stats_cpu_idle gauge
22+
fortiswitch_health_performance_stats_cpu_idle{VDOM="root",fortiswitch="FS00000000000024",unit="%%"} 100
23+
fortiswitch_health_performance_stats_cpu_idle{VDOM="root",fortiswitch="FS00000000000027",unit="%%"} 100
24+
fortiswitch_health_performance_stats_cpu_idle{VDOM="root",fortiswitch="FS00000000000030",unit="%%"} 100
25+
fortiswitch_health_performance_stats_cpu_idle{VDOM="root",fortiswitch="FS00000000000038",unit="%%"} 100
26+
# HELP fortiswitch_health_performance_stats_cpu_nice Fortiswitch CPU nice usage
27+
# TYPE fortiswitch_health_performance_stats_cpu_nice gauge
28+
fortiswitch_health_performance_stats_cpu_nice{VDOM="root",fortiswitch="FS00000000000024",unit="%%"} 0
29+
fortiswitch_health_performance_stats_cpu_nice{VDOM="root",fortiswitch="FS00000000000027",unit="%%"} 0
30+
fortiswitch_health_performance_stats_cpu_nice{VDOM="root",fortiswitch="FS00000000000030",unit="%%"} 0
31+
fortiswitch_health_performance_stats_cpu_nice{VDOM="root",fortiswitch="FS00000000000038",unit="%%"} 0
32+
# HELP fortiswitch_health_performance_stats_cpu_system Fortiswitch CPU system usage
33+
# TYPE fortiswitch_health_performance_stats_cpu_system gauge
34+
fortiswitch_health_performance_stats_cpu_system{VDOM="root",fortiswitch="FS00000000000024",unit="%%"} 0
35+
fortiswitch_health_performance_stats_cpu_system{VDOM="root",fortiswitch="FS00000000000027",unit="%%"} 0
36+
fortiswitch_health_performance_stats_cpu_system{VDOM="root",fortiswitch="FS00000000000030",unit="%%"} 0
37+
fortiswitch_health_performance_stats_cpu_system{VDOM="root",fortiswitch="FS00000000000038",unit="%%"} 0
38+
# HELP fortiswitch_health_performance_stats_cpu_user Fortiswitch CPU user usage
39+
# TYPE fortiswitch_health_performance_stats_cpu_user gauge
40+
fortiswitch_health_performance_stats_cpu_user{VDOM="root",fortiswitch="FS00000000000024",unit="%%"} 0
41+
fortiswitch_health_performance_stats_cpu_user{VDOM="root",fortiswitch="FS00000000000027",unit="%%"} 0
42+
fortiswitch_health_performance_stats_cpu_user{VDOM="root",fortiswitch="FS00000000000030",unit="%%"} 0
43+
fortiswitch_health_performance_stats_cpu_user{VDOM="root",fortiswitch="FS00000000000038",unit="%%"} 0
44+
# HELP fortiswitch_health_summary_cpu Summary CPU health
45+
# TYPE fortiswitch_health_summary_cpu gauge
46+
fortiswitch_health_summary_cpu{VDOM="root",fortiswitch="FS00000000000024",rating="good"} 0
47+
fortiswitch_health_summary_cpu{VDOM="root",fortiswitch="FS00000000000027",rating="good"} 0
48+
fortiswitch_health_summary_cpu{VDOM="root",fortiswitch="FS00000000000030",rating="good"} 0
49+
fortiswitch_health_summary_cpu{VDOM="root",fortiswitch="FS00000000000038",rating="good"} 0
50+
# HELP fortiswitch_health_summary_mem Summary MEM health
51+
# TYPE fortiswitch_health_summary_mem gauge
52+
fortiswitch_health_summary_mem{VDOM="root",fortiswitch="FS00000000000024",rating="good"} 10
53+
fortiswitch_health_summary_mem{VDOM="root",fortiswitch="FS00000000000027",rating="good"} 15
54+
fortiswitch_health_summary_mem{VDOM="root",fortiswitch="FS00000000000030",rating="good"} 50
55+
fortiswitch_health_summary_mem{VDOM="root",fortiswitch="FS00000000000038",rating="good"} 32
56+
# HELP fortiswitch_health_summary_temp Summary Temperature health
57+
# TYPE fortiswitch_health_summary_temp gauge
58+
fortiswitch_health_summary_temp{VDOM="root",fortiswitch="FS00000000000024",rating="good"} 48.952749999999995
59+
fortiswitch_health_summary_temp{VDOM="root",fortiswitch="FS00000000000027",rating="good"} 46.156000000000006
60+
fortiswitch_health_summary_temp{VDOM="root",fortiswitch="FS00000000000030",rating="good"} 39.71875
61+
fortiswitch_health_summary_temp{VDOM="root",fortiswitch="FS00000000000038",rating="good"} 41.624750000000006
62+
# HELP fortiswitch_health_summary_uptime Summary Uptime
63+
# TYPE fortiswitch_health_summary_uptime gauge
64+
fortiswitch_health_summary_uptime{VDOM="root",fortiswitch="FS00000000000024",rating="good"} 3.928968e+07
65+
fortiswitch_health_summary_uptime{VDOM="root",fortiswitch="FS00000000000027",rating="good"} 3.928974e+07
66+
fortiswitch_health_summary_uptime{VDOM="root",fortiswitch="FS00000000000030",rating="good"} 2.661288e+07
67+
fortiswitch_health_summary_uptime{VDOM="root",fortiswitch="FS00000000000038",rating="good"} 2.661258e+07
68+
# HELP fortiswitch_health_temperature Temperature per switch sensor
69+
# TYPE fortiswitch_health_temperature gauge
70+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000024",module="sensor1(CPU Board Temp)",unit="celsius"} 41.937
71+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000024",module="sensor2(MAIN Board Temp1)",unit="celsius"} 63.875
72+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000024",module="sensor3(MAIN Board Temp2)",unit="celsius"} 51.312
73+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000024",module="sensor4(MAIN Board Temp3)",unit="celsius"} 38.687
74+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000027",module="sensor1(CPU Board Temp)",unit="celsius"} 39
75+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000027",module="sensor2(MAIN Board Temp1)",unit="celsius"} 60.625
76+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000027",module="sensor3(MAIN Board Temp2)",unit="celsius"} 48.937
77+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000027",module="sensor4(MAIN Board Temp3)",unit="celsius"} 36.062
78+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000030",module="sensor1(CPU Board Temp)",unit="celsius"} 33.875
79+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000030",module="sensor2(MAIN Board Temp1)",unit="celsius"} 53.75
80+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000030",module="sensor3(MAIN Board Temp2)",unit="celsius"} 41
81+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000030",module="sensor4(MAIN Board Temp3)",unit="celsius"} 30.25
82+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000038",module="sensor1(CPU Board Temp)",unit="celsius"} 35.437
83+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000038",module="sensor2(MAIN Board Temp1)",unit="celsius"} 55.625
84+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000038",module="sensor3(MAIN Board Temp2)",unit="celsius"} 43.125
85+
fortiswitch_health_temperature{VDOM="root",fortiswitch="FS00000000000038",module="sensor4(MAIN Board Temp3)",unit="celsius"} 32.312
86+
`
87+
if err := testutil.GatherAndCompare(r, strings.NewReader(em)); err != nil {
88+
t.Fatalf("metric compare: err %v", err)
89+
}
90+
}

pkg/probe/probe.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ func (p *ProbeCollector) Probe(ctx context.Context, target string, hc *http.Clie
129129
{"System/VDOMResources", probeSystemVDOMResources},
130130
{"System/HAChecksum", probeSystemHAChecksum},
131131
{"SwitchController/ManageSwitch/PortStats", probeSwitchPortStats},
132+
{"SwitchController/ManageSwitch/Health", probeSwitchHealth},
132133
{"User/Fsso", probeUserFsso},
133134
{"VPN/IPSec", probeVPNIPSec},
134135
{"VPN/Ssl/Connections", probeVPNSsl},

0 commit comments

Comments
 (0)