diff --git a/frontend/public/base.gohtml b/frontend/public/base.gohtml index 20907a55..07bf22ba 100644 --- a/frontend/public/base.gohtml +++ b/frontend/public/base.gohtml @@ -1,5 +1,4 @@ -{{ define "base" }} - +{{ define "base" }}
diff --git a/types/metrics/metrics.go b/types/metrics/metrics.go index 065feb0b..9f69a241 100644 --- a/types/metrics/metrics.go +++ b/types/metrics/metrics.go @@ -6,38 +6,6 @@ import ( ) var ( - serviceOnline = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Name: "service_online", - Help: "How many failures occur for a service", - }, - []string{"service"}, - ) - - serviceFailures = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Name: "service_failures", - Help: "How many failures occur for a service", - }, - []string{"service"}, - ) - - serviceSuccess = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Name: "service_success", - Help: "How many successful requests for a service", - }, - []string{"service"}, - ) - - serviceLatencyDuration = prometheus.NewHistogramVec( - prometheus.HistogramOpts{ - Name: "service_request_duration", - Help: "How many successful requests for a service", - }, - []string{"service"}, - ) - utilsHttpRequestDur = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: "http_requests_duration", @@ -60,6 +28,7 @@ func init() { serviceOnline, serviceFailures, serviceSuccess, + serviceStatusCode, serviceLatencyDuration, utilsHttpRequestDur, utilsHttpRequestBytes, @@ -77,6 +46,15 @@ func Histo(method string, value float64, labels ...interface{}) { } } +func Gauge(method string, value float64, labels ...interface{}) { + switch method { + case "service": + serviceStatusCode.WithLabelValues(convert(labels)...).Set(value) + case "online": + serviceOnline.WithLabelValues(convert(labels)...).Set(value) + } +} + func Inc(method string, labels ...interface{}) { switch method { case "failure": diff --git a/types/metrics/services.go b/types/metrics/services.go new file mode 100644 index 00000000..92aff5b8 --- /dev/null +++ b/types/metrics/services.go @@ -0,0 +1,50 @@ +package metrics + +import "github.com/prometheus/client_golang/prometheus" + +var ( + // service is online if set to 1, offline if 0 + serviceOnline = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "service_online", + Help: "If service is online", + }, + []string{"service"}, + ) + + // service failures + serviceFailures = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "service_failures", + Help: "How many failures occur for a service", + }, + []string{"service"}, + ) + + // successful hits for a service + serviceSuccess = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "service_success", + Help: "How many successful requests for a service", + }, + []string{"service"}, + ) + + // service check latency + serviceLatencyDuration = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Name: "service_latency", + Help: "How many successful requests for a service", + }, + []string{"service"}, + ) + + // http status code for a service + serviceStatusCode = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "service_status_code", + Help: "HTTP Status code for a service", + }, + []string{"service"}, + ) +) diff --git a/types/services/routine.go b/types/services/routine.go index 46b58e02..d4eb7c8e 100644 --- a/types/services/routine.go +++ b/types/services/routine.go @@ -276,6 +276,7 @@ func CheckHttp(s *Service, record bool) (*Service, error) { metrics.Histo("latency", utils.Now().Sub(t1).Seconds(), s.Id) s.LastResponse = string(content) s.LastStatusCode = res.StatusCode + metrics.Gauge("service", float64(res.StatusCode), s.Id) if s.Expected.String != "" { match, err := regexp.MatchString(s.Expected.String, string(content)) @@ -321,6 +322,7 @@ func recordSuccess(s *Service) { s.LastLatency = hit.Latency sendSuccess(s) s.SuccessNotified = true + metrics.Gauge("online", 1., s.Id) } func AddNotifier(n ServiceNotifier) { @@ -373,6 +375,7 @@ func recordFailure(s *Service, issue string) { s.SuccessNotified = false s.DownText = s.DowntimeText() sendFailure(s, fail) + metrics.Gauge("online", 0., s.Id) } func sendFailure(s *Service, f *failures.Failure) {