mirror of
https://github.com/digitalocean/ceph_exporter
synced 2025-02-08 23:47:05 +00:00
exporter: do not reinitialize collectors on every collect
We store all the collectors in a map of string in order to dynamically load/unload the rbd mirror collector
This commit is contained in:
parent
49e6345cb6
commit
69edc55596
@ -39,12 +39,13 @@ type Exporter struct {
|
||||
RbdMirror bool
|
||||
Logger *logrus.Logger
|
||||
Version *Version
|
||||
cc map[string]interface{}
|
||||
}
|
||||
|
||||
// NewExporter returns an initialized *Exporter
|
||||
// We can choose to enable a collector to extract stats out of by adding it to the list of collectors.
|
||||
func NewExporter(conn Conn, cluster string, config string, user string, rgwMode int, logger *logrus.Logger) *Exporter {
|
||||
return &Exporter{
|
||||
e := &Exporter{
|
||||
Conn: conn,
|
||||
Cluster: cluster,
|
||||
Config: config,
|
||||
@ -52,28 +53,32 @@ func NewExporter(conn Conn, cluster string, config string, user string, rgwMode
|
||||
RgwMode: rgwMode,
|
||||
Logger: logger,
|
||||
}
|
||||
err := e.setCephVersion()
|
||||
if err != nil {
|
||||
e.Logger.WithError(err).Error("failed to set ceph version")
|
||||
return nil
|
||||
}
|
||||
e.cc = e.initCollectors()
|
||||
|
||||
return e
|
||||
}
|
||||
|
||||
func (exporter *Exporter) getCollectors() []prometheus.Collector {
|
||||
standardCollectors := []prometheus.Collector{
|
||||
NewClusterUsageCollector(exporter),
|
||||
NewPoolUsageCollector(exporter),
|
||||
NewPoolInfoCollector(exporter),
|
||||
NewClusterHealthCollector(exporter),
|
||||
NewMonitorCollector(exporter),
|
||||
NewOSDCollector(exporter),
|
||||
NewCrashesCollector(exporter),
|
||||
}
|
||||
|
||||
if exporter.RbdMirror {
|
||||
standardCollectors = append(standardCollectors, NewRbdMirrorStatusCollector(exporter))
|
||||
func (exporter *Exporter) initCollectors() map[string]interface{} {
|
||||
standardCollectors := map[string]interface{}{
|
||||
"clusterUage": NewClusterUsageCollector(exporter),
|
||||
"poolUsage": NewPoolUsageCollector(exporter),
|
||||
"poolInfo": NewPoolInfoCollector(exporter),
|
||||
"clusterHealth": NewClusterHealthCollector(exporter),
|
||||
"mon": NewMonitorCollector(exporter),
|
||||
"osd": NewOSDCollector(exporter),
|
||||
"crashes": NewCrashesCollector(exporter),
|
||||
}
|
||||
|
||||
switch exporter.RgwMode {
|
||||
case RGWModeForeground:
|
||||
standardCollectors = append(standardCollectors, NewRGWCollector(exporter, false))
|
||||
standardCollectors["rgw"] = NewRGWCollector(exporter, false)
|
||||
case RGWModeBackground:
|
||||
standardCollectors = append(standardCollectors, NewRGWCollector(exporter, true))
|
||||
standardCollectors["rgw"] = NewRGWCollector(exporter, true)
|
||||
case RGWModeDisabled:
|
||||
// nothing to do
|
||||
default:
|
||||
@ -165,7 +170,14 @@ func (exporter *Exporter) setRbdMirror() error {
|
||||
// check to see if rbd-mirror is in ceph version output and not empty
|
||||
if _, exists := versions["rbd-mirror"]; exists {
|
||||
if len(versions["rbd-mirror"]) > 0 {
|
||||
exporter.RbdMirror = true
|
||||
if _, ok := exporter.cc["rbdMirror"]; !ok {
|
||||
exporter.cc["rbdMirror"] = NewRbdMirrorStatusCollector(exporter)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// remove the rbdMirror collector if present
|
||||
if _, ok := exporter.cc["rbdMirror"]; ok {
|
||||
delete(exporter.cc, "rbdMirror")
|
||||
}
|
||||
}
|
||||
|
||||
@ -213,7 +225,7 @@ func (exporter *Exporter) Describe(ch chan<- *prometheus.Desc) {
|
||||
return
|
||||
}
|
||||
|
||||
for _, cc := range exporter.getCollectors() {
|
||||
for _, cc := range exporter.cc {
|
||||
cc.Describe(ch)
|
||||
}
|
||||
}
|
||||
@ -237,7 +249,7 @@ func (exporter *Exporter) Collect(ch chan<- prometheus.Metric) {
|
||||
return
|
||||
}
|
||||
|
||||
for _, cc := range exporter.getCollectors() {
|
||||
for _, cc := range exporter.cc {
|
||||
cc.Collect(ch)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user