gc panel: use for loop to add prometheus targets

Grafonnet doesn't yet provide addSeriesOverrides() accepting an array.
Also use a different color for each gc so that switching to another
gc shows up in the graph.

Change-Id: I4e424280d44a63f57ad7196dfdb7e77ba2f13f24
diff --git a/dashboards/gerrit/process/panels/gc-time.libsonnet b/dashboards/gerrit/process/panels/gc-time.libsonnet
index e518e3c..aa37e29 100644
--- a/dashboards/gerrit/process/panels/gc-time.libsonnet
+++ b/dashboards/gerrit/process/panels/gc-time.libsonnet
@@ -4,6 +4,39 @@
 local barGraph = import '../../../globals/bar-graph.libsonnet';
 local yAxis = import '../../../globals/yaxis.libsonnet';
 
+local METRICS = [
+  {
+    name: 'G1_Young_Generation',
+    label: 'gc time G1 young gen',
+    color: '#3274D9',
+  },
+  {
+    name: 'G1_Old_Generation',
+    label: 'gc time G1 old gen',
+    color: '#F2CC0C',
+  },
+  {
+    name: 'PS_Scavenge',
+    label: 'gc time PS Scavange',
+    color: '#8AB8FF',
+  },
+  {
+    name: 'PS_MarkSweep',
+    label: 'gc time PS MarkSweep',
+    color: '#E02F44',
+  },
+  {
+    name: 'ZGC',
+    label: 'gc time ZGC',
+    color: '#95F0CF',
+  },
+  {
+    name: 'ShenandoahGC',
+    label: 'gc time ShenandoahGC',
+    color: '#B4D61A',
+  },
+];
+
 barGraph.new(
   title='Java - % of time spent in GC',
   yAxis1=yAxis.new(
@@ -11,81 +44,47 @@
     format='percentunit',
   ),
 )
-.addTarget(
+.addTargets([
   prometheus.target(
-    'increase(proc_jvm_gc_time_G1_Young_Generation{instance="$instance",replica="$replica"}[2m])/increase(proc_uptime{instance="$instance",replica="$replica"}[2m])',
-    legendFormat='gc time G1 young gen',
+    std.format('increase(proc_jvm_gc_time_%s{instance="$instance",replica="$replica"}[2m])/increase(proc_uptime{instance="$instance",replica="$replica"}[2m])', METRICS[i]['name']),
+    legendFormat=METRICS[i]['label'],
     interval='1m',
   )
-)
-.addTarget(
-  prometheus.target(
-    'increase(proc_jvm_gc_time_G1_Old_Generation{instance="$instance",replica="$replica"}[2m])/increase(proc_uptime{instance="$instance",replica="$replica"}[2m])',
-    legendFormat='gc time G1 old gen',
-    interval='1m',
-  )
-)
-.addTarget(
-  prometheus.target(
-    'increase(proc_jvm_gc_time_PS_MarkSweep{instance="$instance",replica="$replica"}[2m])/increase(proc_uptime{instance="$instance",replica="$replica"}[2m])',
-    legendFormat='gc time PS MarkSweep',
-    interval='1m',
-  )
-)
-.addTarget(
-  prometheus.target(
-    'increase(proc_jvm_gc_time_PS_Scavenge{instance="$instance",replica="$replica"}[2m])/increase(proc_uptime{instance="$instance",replica="$replica"}[2m])',
-    legendFormat='gc time PS Scavange',
-    interval='1m',
-  )
-)
-.addTarget(
-  prometheus.target(
-    'increase(proc_jvm_gc_time_ZGC{instance="$instance",replica="$replica"}[2m])/increase(proc_uptime{instance="$instance",replica="$replica"}[2m])',
-    legendFormat='gc time ZGC',
-    interval='1m',
-  )
-)
-.addTarget(
-  prometheus.target(
-    'increase(proc_jvm_gc_time_ShenandoahGC{instance="$instance",replica="$replica"}[2m])/increase(proc_uptime{instance="$instance",replica="$replica"}[2m])',
-    legendFormat='gc time ShenandoahGC',
-    interval='1m',
-  )
-)
+  for i in std.range(0, std.length(METRICS) - 1)
+])
 .addSeriesOverride(
   {
-    alias: 'gc time G1 old gen',
-    color: '#F2CC0C',
+    alias: METRICS[0]['label'],
+    color: METRICS[0]['color'],
   }
 )
 .addSeriesOverride(
   {
-    alias: 'gc time G1 young gen',
-    color: '#3274D9',
+    alias: METRICS[1]['label'],
+    color: METRICS[1]['color'],
   }
 )
 .addSeriesOverride(
   {
-    alias: 'gc time PS Scavange',
-    color: '#8AB8FF',
+    alias: METRICS[2]['label'],
+    color: METRICS[2]['color'],
   }
 )
 .addSeriesOverride(
   {
-    alias: 'gc time PS MarkSweep',
-    color: '#E02F44',
+    alias: METRICS[3]['label'],
+    color: METRICS[3]['color'],
   }
 )
 .addSeriesOverride(
   {
-    alias: 'gc time ZGC',
-    color: '#3274D9',
+    alias: METRICS[4]['label'],
+    color: METRICS[4]['color'],
   }
 )
 .addSeriesOverride(
   {
-    alias: 'gc time ShenandoahGC',
-    color: '#3274D9',
+    alias: METRICS[5]['label'],
+    color: METRICS[5]['color'],
   }
 )
\ No newline at end of file