...
1
16
17 package slis
18
19 import (
20 "context"
21 k8smetrics "k8s.io/component-base/metrics"
22 )
23
24 type HealthcheckStatus string
25
26 const (
27 Success HealthcheckStatus = "success"
28 Error HealthcheckStatus = "error"
29 )
30
31 var (
32
33 healthcheck = k8smetrics.NewGaugeVec(
34 &k8smetrics.GaugeOpts{
35 Namespace: "kubernetes",
36 Name: "healthcheck",
37 Help: "This metric records the result of a single healthcheck.",
38 StabilityLevel: k8smetrics.STABLE,
39 },
40 []string{"name", "type"},
41 )
42
43
44 healthchecksTotal = k8smetrics.NewCounterVec(
45 &k8smetrics.CounterOpts{
46 Namespace: "kubernetes",
47 Name: "healthchecks_total",
48 Help: "This metric records the results of all healthcheck.",
49 StabilityLevel: k8smetrics.STABLE,
50 },
51 []string{"name", "type", "status"},
52 )
53 )
54
55 func Register(registry k8smetrics.KubeRegistry) {
56 registry.Register(healthcheck)
57 registry.Register(healthchecksTotal)
58 _ = k8smetrics.RegisterProcessStartTime(registry.Register)
59 }
60
61 func ResetHealthMetrics() {
62 healthcheck.Reset()
63 healthchecksTotal.Reset()
64 }
65
66 func ObserveHealthcheck(ctx context.Context, name string, healthcheckType string, status HealthcheckStatus) error {
67 if status == Success {
68 healthcheck.WithContext(ctx).WithLabelValues(name, healthcheckType).Set(1)
69 } else {
70 healthcheck.WithContext(ctx).WithLabelValues(name, healthcheckType).Set(0)
71 }
72
73 healthchecksTotal.WithContext(ctx).WithLabelValues(name, healthcheckType, string(status)).Inc()
74 return nil
75 }
76
View as plain text