github.com/nginxinc/kubernetes-ingress@v1.12.5/internal/metrics/collectors/controller.go (about) 1 package collectors 2 3 import "github.com/prometheus/client_golang/prometheus" 4 5 var labelNamesController = []string{"type"} 6 7 // ControllerCollector is an interface for the metrics of the Controller 8 type ControllerCollector interface { 9 SetIngresses(ingressType string, count int) 10 SetVirtualServers(count int) 11 SetVirtualServerRoutes(count int) 12 Register(registry *prometheus.Registry) error 13 } 14 15 // ControllerMetricsCollector implements the ControllerCollector interface and prometheus.Collector interface 16 type ControllerMetricsCollector struct { 17 crdsEnabled bool 18 ingressesTotal *prometheus.GaugeVec 19 virtualServersTotal prometheus.Gauge 20 virtualServerRoutesTotal prometheus.Gauge 21 } 22 23 // NewControllerMetricsCollector creates a new ControllerMetricsCollector 24 func NewControllerMetricsCollector(crdsEnabled bool, constLabels map[string]string) *ControllerMetricsCollector { 25 ingResTotal := prometheus.NewGaugeVec( 26 prometheus.GaugeOpts{ 27 Name: "ingress_resources_total", 28 Namespace: metricsNamespace, 29 Help: "Number of handled ingress resources", 30 ConstLabels: constLabels, 31 }, 32 labelNamesController, 33 ) 34 35 if !crdsEnabled { 36 return &ControllerMetricsCollector{ingressesTotal: ingResTotal} 37 } 38 39 vsResTotal := prometheus.NewGauge( 40 prometheus.GaugeOpts{ 41 Name: "virtualserver_resources_total", 42 Namespace: metricsNamespace, 43 Help: "Number of handled VirtualServer resources", 44 ConstLabels: constLabels, 45 }, 46 ) 47 48 vsrResTotal := prometheus.NewGauge( 49 prometheus.GaugeOpts{ 50 Name: "virtualserverroute_resources_total", 51 Namespace: metricsNamespace, 52 Help: "Number of handled VirtualServerRoute resources", 53 ConstLabels: constLabels, 54 }, 55 ) 56 57 return &ControllerMetricsCollector{ 58 crdsEnabled: true, 59 ingressesTotal: ingResTotal, 60 virtualServersTotal: vsResTotal, 61 virtualServerRoutesTotal: vsrResTotal, 62 } 63 } 64 65 // SetIngresses sets the value of the ingress resources gauge for a given type 66 func (cc *ControllerMetricsCollector) SetIngresses(ingressType string, count int) { 67 cc.ingressesTotal.WithLabelValues(ingressType).Set(float64(count)) 68 } 69 70 // SetVirtualServers sets the value of the VirtualServer resources gauge 71 func (cc *ControllerMetricsCollector) SetVirtualServers(count int) { 72 cc.virtualServersTotal.Set(float64(count)) 73 } 74 75 // SetVirtualServerRoutes sets the value of the VirtualServerRoute resources gauge 76 func (cc *ControllerMetricsCollector) SetVirtualServerRoutes(count int) { 77 cc.virtualServerRoutesTotal.Set(float64(count)) 78 } 79 80 // Describe implements prometheus.Collector interface Describe method 81 func (cc *ControllerMetricsCollector) Describe(ch chan<- *prometheus.Desc) { 82 cc.ingressesTotal.Describe(ch) 83 if cc.crdsEnabled { 84 cc.virtualServersTotal.Describe(ch) 85 cc.virtualServerRoutesTotal.Describe(ch) 86 } 87 } 88 89 // Collect implements the prometheus.Collector interface Collect method 90 func (cc *ControllerMetricsCollector) Collect(ch chan<- prometheus.Metric) { 91 cc.ingressesTotal.Collect(ch) 92 if cc.crdsEnabled { 93 cc.virtualServersTotal.Collect(ch) 94 cc.virtualServerRoutesTotal.Collect(ch) 95 } 96 } 97 98 // Register registers all the metrics of the collector 99 func (cc *ControllerMetricsCollector) Register(registry *prometheus.Registry) error { 100 return registry.Register(cc) 101 } 102 103 // ControllerFakeCollector is a fake collector that implements the ControllerCollector interface 104 type ControllerFakeCollector struct{} 105 106 // NewControllerFakeCollector creates a fake collector that implements the ControllerCollector interface 107 func NewControllerFakeCollector() *ControllerFakeCollector { 108 return &ControllerFakeCollector{} 109 } 110 111 // Register implements a fake Register 112 func (cc *ControllerFakeCollector) Register(registry *prometheus.Registry) error { return nil } 113 114 // SetIngresses implements a fake SetIngresses 115 func (cc *ControllerFakeCollector) SetIngresses(ingressType string, count int) {} 116 117 // SetVirtualServers implements a fake SetVirtualServers 118 func (cc *ControllerFakeCollector) SetVirtualServers(count int) {} 119 120 // SetVirtualServerRoutes implements a fake SetVirtualServerRoutes 121 func (cc *ControllerFakeCollector) SetVirtualServerRoutes(count int) {}