-
Notifications
You must be signed in to change notification settings - Fork 35
/
metrics.go
37 lines (32 loc) · 1.88 KB
/
metrics.go
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
package prom
import (
"github.com/fastly/fastly-exporter/pkg/domain"
"github.com/fastly/fastly-exporter/pkg/filter"
"github.com/fastly/fastly-exporter/pkg/origin"
"github.com/fastly/fastly-exporter/pkg/realtime"
"github.com/prometheus/client_golang/prometheus"
)
// Metrics is the top-level collection of Prometheus metrics provided by the
// exporter. Not all metrics may be updated, based on e.g. filter rules.
type Metrics struct {
ServiceInfo *prometheus.GaugeVec
LastSuccessfulResponse *prometheus.GaugeVec
Realtime *realtime.Metrics
Origin *origin.Metrics
Domain *domain.Metrics
}
// NewMetrics returns a fresh Metrics with the provided parameters.
func NewMetrics(namespace, rtSubsystemWillBeDeprecated string, nameFilter filter.Filter, r prometheus.Registerer) *Metrics {
var (
serviceInfo = prometheus.NewGaugeVec(prometheus.GaugeOpts{Namespace: namespace, Subsystem: rtSubsystemWillBeDeprecated, Name: "service_info", Help: "Static gauge with service ID, name, and version information."}, []string{"service_id", "service_name", "service_version"})
lastSuccessfulResponse = prometheus.NewGaugeVec(prometheus.GaugeOpts{Namespace: namespace, Subsystem: rtSubsystemWillBeDeprecated, Name: "last_successful_response", Help: "Unix timestamp of the last successful response received from the real-time stats API."}, []string{"service_id", "service_name"})
)
r.MustRegister(serviceInfo, lastSuccessfulResponse)
return &Metrics{
ServiceInfo: serviceInfo,
LastSuccessfulResponse: lastSuccessfulResponse,
Realtime: realtime.NewMetrics(namespace, rtSubsystemWillBeDeprecated, nameFilter, r), // TODO(pb): change this to "rt" or "realtime"
Origin: origin.NewMetrics(namespace, "origin", nameFilter, r),
Domain: domain.NewMetrics(namespace, "domain", nameFilter, r),
}
}