move to collector interface to avoid ugly switch
This commit is contained in:
parent
2235817fc4
commit
52ad633440
|
@ -141,7 +141,7 @@ func TestClusterUsage(t *testing.T) {
|
|||
)
|
||||
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"clusterUsage": NewClusterUsageCollector(e),
|
||||
}
|
||||
err := prometheus.Register(e)
|
||||
|
|
|
@ -195,7 +195,7 @@ func TestCrashesCollector(t *testing.T) {
|
|||
)
|
||||
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"crashes": NewCrashesCollector(e),
|
||||
}
|
||||
err := prometheus.Register(e)
|
||||
|
|
|
@ -24,6 +24,11 @@ import (
|
|||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
type versionedCollector interface {
|
||||
Collect(chan<- prometheus.Metric, *Version)
|
||||
Describe(chan<- *prometheus.Desc)
|
||||
}
|
||||
|
||||
// Exporter wraps all the ceph collectors and provides a single global
|
||||
// exporter to extracts metrics out of. It also ensures that the collection
|
||||
// is done in a thread-safe manner, the necessary requirement stated by
|
||||
|
@ -39,7 +44,7 @@ type Exporter struct {
|
|||
RbdMirror bool
|
||||
Logger *logrus.Logger
|
||||
Version *Version
|
||||
cc map[string]interface{}
|
||||
cc map[string]versionedCollector
|
||||
}
|
||||
|
||||
// NewExporter returns an initialized *Exporter
|
||||
|
@ -63,8 +68,8 @@ func NewExporter(conn Conn, cluster string, config string, user string, rgwMode
|
|||
return e
|
||||
}
|
||||
|
||||
func (exporter *Exporter) initCollectors() map[string]interface{} {
|
||||
standardCollectors := map[string]interface{}{
|
||||
func (exporter *Exporter) initCollectors() map[string]versionedCollector {
|
||||
standardCollectors := map[string]versionedCollector{
|
||||
"clusterUage": NewClusterUsageCollector(exporter),
|
||||
"poolUsage": NewPoolUsageCollector(exporter),
|
||||
"poolInfo": NewPoolInfoCollector(exporter),
|
||||
|
@ -226,26 +231,7 @@ func (exporter *Exporter) Describe(ch chan<- *prometheus.Desc) {
|
|||
}
|
||||
|
||||
for _, cc := range exporter.cc {
|
||||
switch cc.(type) {
|
||||
case *ClusterUsageCollector:
|
||||
cc.(*ClusterUsageCollector).Describe(ch)
|
||||
case *PoolUsageCollector:
|
||||
cc.(*PoolUsageCollector).Describe(ch)
|
||||
case *PoolInfoCollector:
|
||||
cc.(*PoolInfoCollector).Describe(ch)
|
||||
case *ClusterHealthCollector:
|
||||
cc.(*ClusterHealthCollector).Describe(ch)
|
||||
case *MonitorCollector:
|
||||
cc.(*MonitorCollector).Describe(ch)
|
||||
case *OSDCollector:
|
||||
cc.(*OSDCollector).Describe(ch)
|
||||
case *CrashesCollector:
|
||||
cc.(*CrashesCollector).Describe(ch)
|
||||
case *RbdMirrorStatusCollector:
|
||||
cc.(*RbdMirrorStatusCollector).Describe(ch)
|
||||
case *RGWCollector:
|
||||
cc.(*RGWCollector).Describe(ch)
|
||||
}
|
||||
cc.Describe(ch)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -269,25 +255,6 @@ func (exporter *Exporter) Collect(ch chan<- prometheus.Metric) {
|
|||
}
|
||||
|
||||
for _, cc := range exporter.cc {
|
||||
switch cc.(type) {
|
||||
case *ClusterUsageCollector:
|
||||
cc.(*ClusterUsageCollector).Collect(ch, exporter.Version)
|
||||
case *PoolUsageCollector:
|
||||
cc.(*PoolUsageCollector).Collect(ch, exporter.Version)
|
||||
case *PoolInfoCollector:
|
||||
cc.(*PoolInfoCollector).Collect(ch, exporter.Version)
|
||||
case *ClusterHealthCollector:
|
||||
cc.(*ClusterHealthCollector).Collect(ch, exporter.Version)
|
||||
case *MonitorCollector:
|
||||
cc.(*MonitorCollector).Collect(ch, exporter.Version)
|
||||
case *OSDCollector:
|
||||
cc.(*OSDCollector).Collect(ch, exporter.Version)
|
||||
case *CrashesCollector:
|
||||
cc.(*CrashesCollector).Collect(ch, exporter.Version)
|
||||
case *RbdMirrorStatusCollector:
|
||||
cc.(*RbdMirrorStatusCollector).Collect(ch, exporter.Version)
|
||||
case *RGWCollector:
|
||||
cc.(*RGWCollector).Collect(ch, exporter.Version)
|
||||
}
|
||||
cc.Collect(ch, exporter.Version)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -820,7 +820,7 @@ $ sudo ceph -s
|
|||
[]byte(tt.input), "", nil,
|
||||
)
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"clusterHealth": NewClusterHealthCollector(e),
|
||||
}
|
||||
|
||||
|
|
|
@ -274,7 +274,7 @@ func TestMonitorCollector(t *testing.T) {
|
|||
)
|
||||
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"mon": NewMonitorCollector(e),
|
||||
}
|
||||
err := prometheus.Register(e)
|
||||
|
@ -405,7 +405,7 @@ func TestMonitorTimeSyncStats(t *testing.T) {
|
|||
)
|
||||
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"mon": NewMonitorCollector(e),
|
||||
}
|
||||
err := prometheus.Register(e)
|
||||
|
@ -472,7 +472,7 @@ func TestMonitorCephVersions(t *testing.T) {
|
|||
)
|
||||
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"mon": NewMonitorCollector(e),
|
||||
}
|
||||
err := prometheus.Register(e)
|
||||
|
@ -558,7 +558,7 @@ func TestMonitorCephFeatures(t *testing.T) {
|
|||
)
|
||||
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"mon": NewMonitorCollector(e),
|
||||
}
|
||||
err := prometheus.Register(e)
|
||||
|
|
|
@ -973,7 +973,7 @@ func TestOSDCollector(t *testing.T) {
|
|||
}`), "", nil)
|
||||
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"osd": NewOSDCollector(e),
|
||||
}
|
||||
err := prometheus.Register(e)
|
||||
|
|
|
@ -184,7 +184,7 @@ func TestPoolInfoCollector(t *testing.T) {
|
|||
})).Return([]byte(""), "", fmt.Errorf("unknown erasure code profile"))
|
||||
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"poolInfo": NewPoolInfoCollector(e),
|
||||
}
|
||||
err := prometheus.Register(e)
|
||||
|
|
|
@ -199,7 +199,7 @@ func TestPoolUsageCollector(t *testing.T) {
|
|||
)
|
||||
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"poolUsage": NewPoolUsageCollector(e),
|
||||
}
|
||||
err := prometheus.Register(e)
|
||||
|
|
|
@ -138,7 +138,7 @@ func TestRbdMirrorStatusCollector(t *testing.T) {
|
|||
// We do not create the rbdCollector since it will
|
||||
// be automatically initiated from the output of `ceph versions`
|
||||
// if the rbd-mirror key is present
|
||||
e.cc = map[string]interface{}{}
|
||||
e.cc = map[string]versionedCollector{}
|
||||
|
||||
err := prometheus.Register(e)
|
||||
require.NoError(t, err)
|
||||
|
|
|
@ -139,7 +139,7 @@ func TestRGWCollector(t *testing.T) {
|
|||
conn := setupVersionMocks(tt.version, "{}")
|
||||
|
||||
e := &Exporter{Conn: conn, Cluster: "ceph", Logger: logrus.New()}
|
||||
e.cc = map[string]interface{}{
|
||||
e.cc = map[string]versionedCollector{
|
||||
"rgw": NewRGWCollector(e, false),
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue