From 9bcc0f9edbc0c001fd2f9fd8f67abea5b70b151c Mon Sep 17 00:00:00 2001
From: Dean Coakley <dean.s.coakley@gmail.com>
Date: Fri, 18 Oct 2019 16:55:19 +0100
Subject: [PATCH 1/2] Hide VS/VSR metrics when CRDs disabled

---
 cmd/nginx-ingress/main.go                 |  2 +-
 internal/metrics/collectors/controller.go | 20 +++++++++++++++-----
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/cmd/nginx-ingress/main.go b/cmd/nginx-ingress/main.go
index e7e4661a6b..a2b31467e1 100644
--- a/cmd/nginx-ingress/main.go
+++ b/cmd/nginx-ingress/main.go
@@ -239,7 +239,7 @@ func main() {
 	if *enablePrometheusMetrics {
 		registry = prometheus.NewRegistry()
 		managerCollector = collectors.NewLocalManagerMetricsCollector()
-		controllerCollector = collectors.NewControllerMetricsCollector()
+		controllerCollector = collectors.NewControllerMetricsCollector(*enableCustomResources)
 
 		err = managerCollector.Register(registry)
 		if err != nil {
diff --git a/internal/metrics/collectors/controller.go b/internal/metrics/collectors/controller.go
index d94688be97..3ea14f2fbd 100644
--- a/internal/metrics/collectors/controller.go
+++ b/internal/metrics/collectors/controller.go
@@ -14,13 +14,14 @@ type ControllerCollector interface {
 
 // ControllerMetricsCollector implements the ControllerCollector interface and prometheus.Collector interface
 type ControllerMetricsCollector struct {
+	crdsEnabled              bool
 	ingressesTotal           *prometheus.GaugeVec
 	virtualServersTotal      prometheus.Gauge
 	virtualServerRoutesTotal prometheus.Gauge
 }
 
 // NewControllerMetricsCollector creates a new ControllerMetricsCollector
-func NewControllerMetricsCollector() *ControllerMetricsCollector {
+func NewControllerMetricsCollector(areCrdsEnabled bool) *ControllerMetricsCollector {
 	ingResTotal := prometheus.NewGaugeVec(
 		prometheus.GaugeOpts{
 			Name:      "ingress_resources_total",
@@ -30,6 +31,10 @@ func NewControllerMetricsCollector() *ControllerMetricsCollector {
 		labelNamesController,
 	)
 
+	if !areCrdsEnabled {
+		return &ControllerMetricsCollector{ingressesTotal: ingResTotal}
+	}
+
 	vsResTotal := prometheus.NewGauge(
 		prometheus.GaugeOpts{
 			Name:      "virtualserver_resources_total",
@@ -47,6 +52,7 @@ func NewControllerMetricsCollector() *ControllerMetricsCollector {
 	)
 
 	return &ControllerMetricsCollector{
+		crdsEnabled:              true,
 		ingressesTotal:           ingResTotal,
 		virtualServersTotal:      vsResTotal,
 		virtualServerRoutesTotal: vsrResTotal,
@@ -71,15 +77,19 @@ func (cc *ControllerMetricsCollector) SetVirtualServerRoutes(count int) {
 // Describe implements prometheus.Collector interface Describe method
 func (cc *ControllerMetricsCollector) Describe(ch chan<- *prometheus.Desc) {
 	cc.ingressesTotal.Describe(ch)
-	cc.virtualServersTotal.Describe(ch)
-	cc.virtualServerRoutesTotal.Describe(ch)
+	if cc.crdsEnabled {
+		cc.virtualServersTotal.Describe(ch)
+		cc.virtualServerRoutesTotal.Describe(ch)
+	}
 }
 
 // Collect implements the prometheus.Collector interface Collect method
 func (cc *ControllerMetricsCollector) Collect(ch chan<- prometheus.Metric) {
 	cc.ingressesTotal.Collect(ch)
-	cc.virtualServersTotal.Collect(ch)
-	cc.virtualServerRoutesTotal.Collect(ch)
+	if cc.crdsEnabled {
+		cc.virtualServersTotal.Collect(ch)
+		cc.virtualServerRoutesTotal.Collect(ch)
+	}
 }
 
 // Register registers all the metrics of the collector

From a26ad1dd598a5a64ae001567f1aa868feeaff7df Mon Sep 17 00:00:00 2001
From: Dean Coakley <dean.s.coakley@gmail.com>
Date: Mon, 21 Oct 2019 11:18:20 +0100
Subject: [PATCH 2/2] Rename crdEnable func argument

---
 internal/metrics/collectors/controller.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/internal/metrics/collectors/controller.go b/internal/metrics/collectors/controller.go
index 3ea14f2fbd..06b854eccd 100644
--- a/internal/metrics/collectors/controller.go
+++ b/internal/metrics/collectors/controller.go
@@ -21,7 +21,7 @@ type ControllerMetricsCollector struct {
 }
 
 // NewControllerMetricsCollector creates a new ControllerMetricsCollector
-func NewControllerMetricsCollector(areCrdsEnabled bool) *ControllerMetricsCollector {
+func NewControllerMetricsCollector(crdsEnabled bool) *ControllerMetricsCollector {
 	ingResTotal := prometheus.NewGaugeVec(
 		prometheus.GaugeOpts{
 			Name:      "ingress_resources_total",
@@ -31,7 +31,7 @@ func NewControllerMetricsCollector(areCrdsEnabled bool) *ControllerMetricsCollec
 		labelNamesController,
 	)
 
-	if !areCrdsEnabled {
+	if !crdsEnabled {
 		return &ControllerMetricsCollector{ingressesTotal: ingResTotal}
 	}