1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
package client
import (
"sync"
"github.com/prometheus/client_golang/prometheus"
)
const libovsdbName = "libovsdb"
type metrics struct {
numUpdates *prometheus.CounterVec
numTableUpdates *prometheus.CounterVec
numDisconnects prometheus.Counter
numMonitors prometheus.Gauge
registerOnce sync.Once
}
func (m *metrics) init(modelName string, namespace, subsystem string) {
// labels that are the same across all metrics
constLabels := prometheus.Labels{"primary_model": modelName}
if namespace == "" {
namespace = libovsdbName
subsystem = ""
}
m.numUpdates = prometheus.NewCounterVec(
prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "update_messages_total",
Help: "Count of libovsdb monitor update messages processed, partitioned by database",
ConstLabels: constLabels,
},
[]string{"database"},
)
m.numTableUpdates = prometheus.NewCounterVec(
prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "table_updates_total",
Help: "Count of libovsdb monitor update messages per table",
ConstLabels: constLabels,
},
[]string{"database", "table"},
)
m.numDisconnects = prometheus.NewCounter(
prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "disconnects_total",
Help: "Count of libovsdb disconnects encountered",
ConstLabels: constLabels,
},
)
m.numMonitors = prometheus.NewGauge(
prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "monitors",
Help: "Number of running libovsdb ovsdb monitors",
ConstLabels: constLabels,
},
)
}
func (m *metrics) register(r prometheus.Registerer) {
m.registerOnce.Do(func() {
r.MustRegister(
m.numUpdates,
m.numTableUpdates,
m.numDisconnects,
m.numMonitors,
)
})
}
func (o *ovsdbClient) registerMetrics() {
if !o.options.shouldRegisterMetrics || o.options.registry == nil {
return
}
o.metrics.register(o.options.registry)
o.options.shouldRegisterMetrics = false
}
|