Fix more ineffassign warnings.
[arvados.git] / services / keep-balance / metrics.go
index 96ee66ce56bd010299c9ef209a7ecc221bc606cd..ce1b1811cc69f28f3fad955a5525b35a666baf3a 100644 (file)
@@ -24,9 +24,9 @@ type metrics struct {
        mtx         sync.Mutex
 }
 
-func newMetrics() *metrics {
+func newMetrics(registry *prometheus.Registry) *metrics {
        return &metrics{
-               reg:         prometheus.NewRegistry(),
+               reg:         registry,
                statsGauges: map[string]setter{},
                observers:   map[string]observer{},
        }
@@ -39,6 +39,7 @@ func (m *metrics) DurationObserver(name, help string) observer {
                return obs
        }
        summary := prometheus.NewSummary(prometheus.SummaryOpts{
+               Namespace: "arvados",
                Name:      name,
                Subsystem: "keepbalance",
                Help:      help,
@@ -57,17 +58,20 @@ func (m *metrics) UpdateStats(s balancerStats) {
                Help  string
        }
        s2g := map[string]gauge{
-               "total":           {s.current, "current backend storage usage"},
-               "garbage":         {s.garbage, "garbage (unreferenced, old)"},
-               "transient":       {s.unref, "transient (unreferenced, new)"},
-               "overreplicated":  {s.overrep, "overreplicated"},
-               "underreplicated": {s.underrep, "underreplicated"},
-               "lost":            {s.lost, "lost"},
+               "total":             {s.current, "current backend storage usage"},
+               "garbage":           {s.garbage, "garbage (unreferenced, old)"},
+               "transient":         {s.unref, "transient (unreferenced, new)"},
+               "overreplicated":    {s.overrep, "overreplicated"},
+               "underreplicated":   {s.underrep, "underreplicated"},
+               "lost":              {s.lost, "lost"},
+               "dedup_byte_ratio":  {s.dedupByteRatio(), "deduplication ratio, bytes referenced / bytes stored"},
+               "dedup_block_ratio": {s.dedupBlockRatio(), "deduplication ratio, blocks referenced / blocks stored"},
        }
        m.setupOnce.Do(func() {
                // Register gauge(s) for each balancerStats field.
                addGauge := func(name, help string) {
                        g := prometheus.NewGauge(prometheus.GaugeOpts{
+                               Namespace: "arvados",
                                Name:      name,
                                Subsystem: "keep",
                                Help:      help,
@@ -81,7 +85,7 @@ func (m *metrics) UpdateStats(s balancerStats) {
                                for _, sub := range []string{"blocks", "bytes", "replicas"} {
                                        addGauge(name+"_"+sub, sub+" of "+gauge.Help)
                                }
-                       case int, int64:
+                       case int, int64, float64:
                                addGauge(name, gauge.Help)
                        default:
                                panic(fmt.Sprintf("bad gauge type %T", gauge.Value))
@@ -99,6 +103,8 @@ func (m *metrics) UpdateStats(s balancerStats) {
                        m.statsGauges[name].Set(float64(val))
                case int64:
                        m.statsGauges[name].Set(float64(val))
+               case float64:
+                       m.statsGauges[name].Set(float64(val))
                default:
                        panic(fmt.Sprintf("bad gauge type %T", gauge.Value))
                }