@@ -2,61 +2,47 @@ package collector
2
2
3
3
import (
4
4
"fmt"
5
+ "sync"
5
6
6
7
"github.com/apex/log"
7
8
"github.com/prometheus/client_golang/prometheus"
8
9
"github.com/stmcginnis/gofish"
9
10
)
10
11
11
- // A ManagerCollector implements the prometheus.Collector.
12
-
13
- type managerMetric struct {
14
- desc * prometheus.Desc
15
- }
16
-
17
12
// ManagerSubmanager is the manager subsystem
18
13
var (
19
14
ManagerSubmanager = "manager"
20
15
ManagerLabelNames = []string {"manager_id" , "name" , "model" , "type" }
21
- managerMetrics = map [string ]managerMetric {
22
- "manager_state" : {
23
- desc : prometheus .NewDesc (
24
- prometheus .BuildFQName (namespace , ManagerSubmanager , "state" ),
25
- "manager state,1(Enabled),2(Disabled),3(StandbyOffinline),4(StandbySpare),5(InTest),6(Starting),7(Absent),8(UnavailableOffline),9(Deferring),10(Quiesced),11(Updating)" ,
26
- ManagerLabelNames ,
27
- nil ,
28
- ),
29
- },
30
- "manager_health_state" : {
31
- desc : prometheus .NewDesc (
32
- prometheus .BuildFQName (namespace , ManagerSubmanager , "health_state" ),
33
- "manager health,1(OK),2(Warning),3(Critical)" ,
34
- ManagerLabelNames ,
35
- nil ,
36
- ),
37
- },
38
- "manager_power_state" : {
39
- desc : prometheus .NewDesc (
40
- prometheus .BuildFQName (namespace , ManagerSubmanager , "power_state" ),
41
- "manager power state" ,
42
- ManagerLabelNames ,
43
- nil ,
44
- ),
45
- },
46
- }
16
+
17
+ ManagerLogServiceLabelNames = []string {"manager_id" , "log_service" , "log_service_id" , "log_service_enabled" , "log_service_overwrite_policy" }
18
+ ManagerLogEntryLabelNames = []string {"manager_id" , "log_service" , "log_service_id" , "log_entry" , "log_entry_id" , "log_entry_code" , "log_entry_type" , "log_entry_message_id" , "log_entry_sensor_number" , "log_entry_sensor_type" }
19
+
20
+ managerMetrics = createManagerMetricMap ()
47
21
)
48
22
49
- // ManagerCollector implemented prometheus.Collector
23
+ // ManagerCollector implements the prometheus.Collector.
50
24
type ManagerCollector struct {
51
- redfishClient * gofish.APIClient
52
- metrics map [string ]managerMetric
53
- collectorScrapeStatus * prometheus.GaugeVec
54
- collectorScrapeDuration * prometheus.SummaryVec
55
- Log * log.Entry
25
+ redfishClient * gofish.APIClient
26
+ metrics map [string ]Metric
27
+ collectorScrapeStatus * prometheus.GaugeVec
28
+ Log * log.Entry
29
+ }
30
+
31
+ func createManagerMetricMap () map [string ]Metric {
32
+ managerMetrics := make (map [string ]Metric )
33
+ addToMetricMap (managerMetrics , ManagerSubmanager , "state" , fmt .Sprintf ("manager state,%s" , CommonStateHelp ), ManagerLabelNames )
34
+ addToMetricMap (managerMetrics , ManagerSubmanager , "health_state" , fmt .Sprintf ("manager health,%s" , CommonHealthHelp ), ManagerLabelNames )
35
+ addToMetricMap (managerMetrics , ManagerSubmanager , "power_state" , "manager power state" , ManagerLabelNames )
36
+
37
+ addToMetricMap (managerMetrics , ManagerSubmanager , "log_service_state" , fmt .Sprintf ("manager log service state,%s" , CommonStateHelp ), ManagerLogServiceLabelNames )
38
+ addToMetricMap (managerMetrics , ManagerSubmanager , "log_service_health_state" , fmt .Sprintf ("manager log service health state,%s" , CommonHealthHelp ), ManagerLogServiceLabelNames )
39
+ addToMetricMap (managerMetrics , ManagerSubmanager , "log_entry_severity_state" , fmt .Sprintf ("manager log entry severity state,%s" , CommonSeverityHelp ), ManagerLogEntryLabelNames )
40
+
41
+ return managerMetrics
56
42
}
57
43
58
44
// NewManagerCollector returns a collector that collecting memory statistics
59
- func NewManagerCollector (namespace string , redfishClient * gofish.APIClient , logger * log.Entry ) * ManagerCollector {
45
+ func NewManagerCollector (redfishClient * gofish.APIClient , logger * log.Entry ) * ManagerCollector {
60
46
return & ManagerCollector {
61
47
redfishClient : redfishClient ,
62
48
metrics : managerMetrics ,
@@ -100,7 +86,7 @@ func (m *ManagerCollector) Collect(ch chan<- prometheus.Metric) {
100
86
ManagerID := manager .ID
101
87
managerName := manager .Name
102
88
managerModel := manager .Model
103
- managerType := fmt .Sprintf ( "%v" , manager .ManagerType )
89
+ managerType := fmt .Sprint ( manager .ManagerType )
104
90
managerPowerState := manager .PowerState
105
91
managerState := manager .Status .State
106
92
managerHealthState := manager .Status .Health
@@ -115,8 +101,25 @@ func (m *ManagerCollector) Collect(ch chan<- prometheus.Metric) {
115
101
}
116
102
if managerPowerStateValue , ok := parseCommonPowerState (managerPowerState ); ok {
117
103
ch <- prometheus .MustNewConstMetric (m .metrics ["manager_power_state" ].desc , prometheus .GaugeValue , managerPowerStateValue , ManagerLabelValues ... )
104
+ }
118
105
106
+ // process log services
107
+ logServices , err := manager .LogServices ()
108
+ if err != nil {
109
+ managerLogContext .WithField ("operation" , "manager.LogServices()" ).WithError (err ).Error ("error getting log services from manager" )
110
+ } else if logServices == nil {
111
+ managerLogContext .WithField ("operation" , "manager.LogServices()" ).Info ("no log services found" )
112
+ } else {
113
+ wg := & sync.WaitGroup {}
114
+ wg .Add (len (logServices ))
115
+
116
+ for _ , logService := range logServices {
117
+ if err = parseLogService (ch , managerMetrics , ManagerSubmanager , ManagerID , logService , wg ); err != nil {
118
+ managerLogContext .WithField ("operation" , "manager.LogServices()" ).WithError (err ).Error ("error getting log entries from log service" )
119
+ }
120
+ }
119
121
}
122
+
120
123
managerLogContext .Info ("collector scrape completed" )
121
124
}
122
125
m .collectorScrapeStatus .WithLabelValues ("manager" ).Set (float64 (1 ))
0 commit comments