AMBARI-25370 Producer and Customer Request /s graphs are failing on Kafa Grafana dashboards (#3080)

From kafka 2.0.0 there has been addition of version tag in kafka.network.RequestMetrics.RequestsPerSec.request.* metrics.
This is breaking the the default Grafana dashboard provided by Ambari. On the Kafka - Home and Kafka - Hosts dashboards
the Producer requests /s and Consumer requests /s graphs are failing to show any data.

Change-Id: I08656a6f43923b08b3bbc1f1e0346bd93211bbe8
diff --git a/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js b/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
index ec5ee10..b838ad5 100644
--- a/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
+++ b/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
@@ -99,7 +99,7 @@
             if(!_.isEmpty(templateSrv.variables) && templateSrv.variables[0].query === "yarnqueues") {
               alias = alias + ' on ' + target.qmetric; }
             if(!_.isEmpty(templateSrv.variables) && templateSrv.variables[0].query === "kafka-topics") {
-            alias = alias + ' on ' + target.kbTopic; }
+              alias = alias + ' on ' + target.kbTopic; }
             return function (res) {
               res = res.data;
               console.log('processing metric ' + target.metric);
@@ -595,12 +595,29 @@
               if (indexOfHosts >= 0) {
               var allHosts = templateSrv._values.hosts.lastIndexOf('}') > 0 ? templateSrv._values.hosts.slice(1,-1) :
               templateSrv._values.hosts;
-              allHosts = templateSrv._texts.hosts === "All" ? '%' : allHosts;
-              metricsPromises.push(_.map(options.targets, function(target) {
-                  target.templatedHost = allHosts? allHosts : '';
-                  target.templatedCluster = templatedCluster;
-                  return getAllHostData(target);
-              }));
+
+              /* The Producer & Comsumer Requests graphs on the Kafka Hosts dashboard should display metrics that are
+               * versioned, thus the value of different versions should be aggregated and grouped by hosts.
+               * In order to have a 'grouped by hosts' like view the metric results are queried for each hosts separately.
+               */
+              if (!_.isEmpty(options.targets.filter(function(target) {
+                    return target.metric.endsWith(".%.count"); }))) {
+                allHosts = allHosts.split(',');
+                _.forEach(allHosts, function(host) {
+                    metricsPromises.push(_.map(options.targets, function(target) {
+                        target.templatedHost = host;
+                        target.templatedCluster = templatedCluster;
+                        return getAllHostData(target);
+                    }));
+                });
+              } else {
+                  allHosts = templateSrv._texts.hosts === "All" ? '%' : allHosts;
+                  metricsPromises.push(_.map(options.targets, function(target) {
+                      target.templatedHost = allHosts? allHosts : '';
+                      target.templatedCluster = templatedCluster;
+                      return getAllHostData(target);
+                }));
+              }
             }
             metricsPromises = _.flatten(metricsPromises);
           } else {
diff --git a/ambari-metrics/ambari-metrics-timelineservice/conf/unix/metrics_whitelist b/ambari-metrics/ambari-metrics-timelineservice/conf/unix/metrics_whitelist
index fd03d6e..689fd0d 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/conf/unix/metrics_whitelist
+++ b/ambari-metrics/ambari-metrics-timelineservice/conf/unix/metrics_whitelist
@@ -273,6 +273,8 @@
 kafka.log.LogFlushStats.LogFlushRateAndTimeMs.1MinuteRate
 kafka.network.RequestMetrics.RequestsPerSec.request.FetchConsumer.count
 kafka.network.RequestMetrics.RequestsPerSec.request.Produce.count
+kafka.network.RequestMetrics.RequestsPerSec.request.FetchConsumer.version.*.count
+kafka.network.RequestMetrics.RequestsPerSec.request.Produce.version.*.count
 kafka.network.RequestMetrics.TotalTimeMs.request.FetchConsumer.99percentile
 kafka.network.RequestMetrics.TotalTimeMs.request.FetchConsumer.max
 kafka.network.RequestMetrics.TotalTimeMs.request.FetchConsumer.mean
diff --git a/ambari-metrics/ambari-metrics-timelineservice/conf/windows/metrics_whitelist b/ambari-metrics/ambari-metrics-timelineservice/conf/windows/metrics_whitelist
index fd03d6e..689fd0d 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/conf/windows/metrics_whitelist
+++ b/ambari-metrics/ambari-metrics-timelineservice/conf/windows/metrics_whitelist
@@ -273,6 +273,8 @@
 kafka.log.LogFlushStats.LogFlushRateAndTimeMs.1MinuteRate
 kafka.network.RequestMetrics.RequestsPerSec.request.FetchConsumer.count
 kafka.network.RequestMetrics.RequestsPerSec.request.Produce.count
+kafka.network.RequestMetrics.RequestsPerSec.request.FetchConsumer.version.*.count
+kafka.network.RequestMetrics.RequestsPerSec.request.Produce.version.*.count
 kafka.network.RequestMetrics.TotalTimeMs.request.FetchConsumer.99percentile
 kafka.network.RequestMetrics.TotalTimeMs.request.FetchConsumer.max
 kafka.network.RequestMetrics.TotalTimeMs.request.FetchConsumer.mean
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/files/grafana-dashboards/HDP/grafana-kafka-home.json b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/files/grafana-dashboards/HDP/grafana-kafka-home.json
index 983142a..e9b6fa2 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/files/grafana-dashboards/HDP/grafana-kafka-home.json
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/files/grafana-dashboards/HDP/grafana-kafka-home.json
@@ -555,11 +555,12 @@
               "app": "kafka_broker",
               "downsampleAggregator": "avg",
               "errors": {},
-              "metric": "kafka.network.RequestMetrics.RequestsPerSec.request.Produce.count",
+              "metric": "kafka.network.RequestMetrics.RequestsPerSec.request.Produce.%.count",
               "precision": "default",
               "refId": "A",
               "transform": "rate",
-              "transformData": "none"
+              "transformData": "none",
+              "seriesAggregator": "sum"
             }
           ],
           "timeFrom": null,
@@ -626,11 +627,12 @@
               "app": "kafka_broker",
               "downsampleAggregator": "avg",
               "errors": {},
-              "metric": "kafka.network.RequestMetrics.RequestsPerSec.request.FetchConsumer.count",
+              "metric": "kafka.network.RequestMetrics.RequestsPerSec.request.FetchConsumer.%.count",
               "precision": "default",
               "refId": "A",
               "transform": "rate",
-              "transformData": "none"
+              "transformData": "none",
+              "seriesAggregator": "sum"
             }
           ],
           "timeFrom": null,
@@ -1073,7 +1075,7 @@
     "list": []
   },
   "schemaVersion": 8,
-  "version": 16,
+  "version": 17,
   "links": [
     {
       "asDropdown": true,
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/files/grafana-dashboards/HDP/grafana-kafka-hosts.json b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/files/grafana-dashboards/HDP/grafana-kafka-hosts.json
index 85deb92..61b2e77 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/files/grafana-dashboards/HDP/grafana-kafka-hosts.json
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/files/grafana-dashboards/HDP/grafana-kafka-hosts.json
@@ -323,12 +323,13 @@
               "app": "kafka_broker",
               "downsampleAggregator": "avg",
               "errors": {},
-              "metric": "kafka.network.RequestMetrics.RequestsPerSec.request.Produce.count",
+              "metric": "kafka.network.RequestMetrics.RequestsPerSec.request.Produce.%.count",
               "precision": "default",
               "refId": "A",
               "templatedHost": "",
               "transform": "rate",
-              "transformData": "none"
+              "transformData": "none",
+              "seriesAggregator": "sum"
             }
           ],
           "timeFrom": null,
@@ -395,12 +396,13 @@
               "app": "kafka_broker",
               "downsampleAggregator": "avg",
               "errors": {},
-              "metric": "kafka.network.RequestMetrics.RequestsPerSec.request.FetchConsumer.count",
+              "metric": "kafka.network.RequestMetrics.RequestsPerSec.request.FetchConsumer.%.count",
               "precision": "default",
               "refId": "A",
               "templatedHost": "",
               "transform": "rate",
-              "transformData": "none"
+              "transformData": "none",
+              "seriesAggregator": "sum"
             }
           ],
           "timeFrom": null,
@@ -1991,7 +1993,7 @@
     "list": []
   },
   "schemaVersion": 8,
-  "version": 16,
+  "version": 17,
   "links": [
     {
       "asDropdown": true,