diff --git a/docs/prometheus.md b/docs/prometheus.md
index 62ec000f..d3f94517 100644
--- a/docs/prometheus.md
+++ b/docs/prometheus.md
@@ -30,7 +30,7 @@ Here is a list of the metrics we provide:
- `mgmt_resources_total`: The number of resources that mgmt is managing
- `mgmt_checkapply_total`: The number of CheckApply's that mgmt has run
- `mgmt_failures_total`: The number of resources that have failed
-- `mgmt_failures_current`: The number of resources that have failed
+- `mgmt_failures`: The number of resources that have failed
- `mgmt_graph_start_time_seconds`: Start time of the current graph since unix epoch in seconds
For each metric, you will get some extra labels:
diff --git a/prometheus/prometheus.go b/prometheus/prometheus.go
index 905af280..8e1a2805 100644
--- a/prometheus/prometheus.go
+++ b/prometheus/prometheus.go
@@ -16,7 +16,7 @@
// along with this program. If not, see .
// Package prometheus provides functions that are useful to control and manage
-// the build-in prometheus instance.
+// the built-in prometheus instance.
package prometheus
import (
@@ -170,6 +170,15 @@ func (obj *Prometheus) InitKindMetrics(kinds []string) error {
}
}
}
+
+ obj.managedResources.With(prometheus.Labels{"kind": kind})
+
+ failures := []string{"soft", "hard"}
+ for _, f := range failures {
+ failLabels := prometheus.Labels{"kind": kind, "failure": f}
+ obj.failedResourcesTotal.With(failLabels)
+ obj.failedResources.With(failLabels)
+ }
}
return nil
}
diff --git a/prometheus/prometheus_test.go b/prometheus/prometheus_test.go
new file mode 100644
index 00000000..d4b396a4
--- /dev/null
+++ b/prometheus/prometheus_test.go
@@ -0,0 +1,75 @@
+// Mgmt
+// Copyright (C) 2013-2017+ James Shubin and the project contributors
+// Written by James Shubin and the project contributors
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+package prometheus
+
+import (
+ "testing"
+
+ "github.com/prometheus/client_golang/prometheus"
+)
+
+// TestInitKindMetrics tests that we are initializing the Prometheus
+// metrics correctly for all kind of resources.
+func TestInitKindMetrics(t *testing.T) {
+ var prom Prometheus
+ prom.Init()
+ prom.InitKindMetrics([]string{"file", "exec"})
+
+ // Get a list of metrics collected by Prometheus.
+ // This is the only way to get Prometheus metrics
+ // without implicitly creating them.
+ gatherer := prometheus.DefaultGatherer
+ metrics, err := gatherer.Gather()
+ if err != nil {
+ t.Errorf("Error while gathering metrics: %s", err)
+ return
+ }
+
+ // expectedMetrics is a map: keys are metrics name and
+ // values are expected and actual count of metrics with
+ // that name.
+ expectedMetrics := map[string][2]int{
+ "mgmt_checkapply_total": [2]int{
+ 16, 0,
+ },
+ "mgmt_failures_total": [2]int{
+ 4, 0,
+ },
+ "mgmt_failures": [2]int{
+ 4, 0,
+ },
+ "mgmt_resources": [2]int{
+ 2, 0,
+ },
+ }
+
+ for _, metric := range metrics {
+ for name, count := range expectedMetrics {
+ if *metric.Name == name {
+ value := len(metric.Metric)
+ expectedMetrics[name] = [2]int{count[0], value}
+ }
+ }
+ }
+
+ for name, count := range expectedMetrics {
+ if count[1] != count[0] {
+ t.Errorf("%s: Expected %d metrics, got %d metrics", name, count[0], count[1])
+ }
+ }
+}