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) {}