[AMBARI-24738] Update grafana datasource to get values from new object.
diff --git a/ambari-metrics-grafana/ambari-metrics/datasource.js b/ambari-metrics-grafana/ambari-metrics/datasource.js
index 9050667..6e14f33 100644
--- a/ambari-metrics-grafana/ambari-metrics/datasource.js
+++ b/ambari-metrics-grafana/ambari-metrics/datasource.js
@@ -484,10 +484,10 @@
             }).map(function (uName) {
               return uName.value;
             });
-            selectedUsers = templateSrv._values.Users.lastIndexOf('}') > 0 ? templateSrv._values.Users.slice(1, -1) :
-              templateSrv._values.Users;
-            var selectedUser = selectedUsers.split(',');
-            _.forEach(selectedUser, function (processUser) {
+            if (selectedUsers[0] === "") {
+              selectedUsers = "";
+            }
+            _.forEach(selectedUsers, function (processUser) {
               metricsPromises.push(_.map(options.targets, function (target) {
                 target.hbUser = processUser;
                 var metricTransform = !target.transform || target.transform === "none" ? '' : '._' + target.transform;
@@ -499,10 +499,18 @@
           // Templatized Dashboard for per-table metrics in HBase.
           if (templateSrv.variables[0].query === "hbase-tables") {
             var splitTables = [];
-            var allTables = templateSrv._values.Tables.lastIndexOf('}') > 0 ? templateSrv._values.Tables.slice(1, -1) :
-              templateSrv._values.Tables;
-            var allTable = allTables.split(',');
-            while (allTable.length > 0) {
+            let allTables = [];
+            const tables = templateSrv.index.Tables.options;
+            for (let table of tables) {
+              if (table.text.toLowerCase() === "all" && table.selected) {
+                allTables = "";
+                break;
+              } else if (table.selected) {
+                allTables.push(table.value);
+              }
+            }
+
+            while (allTables.length > 0) {
               splitTables.push(allTable.splice(0, 20));
             }
             _.forEach(splitTables, function (table) {
@@ -530,10 +538,10 @@
             }).map(function (topicName) {
               return topicName.value;
             });
-            selectedTopics = templateSrv._values.Topics.lastIndexOf('}') > 0 ? templateSrv._values.Topics.slice(1, -1) :
-              templateSrv._values.Topics;
-            var selectedTopic = selectedTopics.split(',');
-            _.forEach(selectedTopic, function (processTopic) {
+            if (selectedTopics[0] === "") {
+              selectedTopics = "";
+            }
+            _.forEach(selectedTopics, function (processTopic) {
               metricsPromises.push(_.map(options.targets, function (target) {
                 target.kbTopic = processTopic;
                 target.kbMetric = target.metric.replace('*', target.kbTopic);
@@ -546,15 +554,17 @@
             var allCallers = templateSrv.variables.filter(function (variable) {
               return variable.query === "callers";
             });
-            var selectedCallers = (_.isEmpty(allCallers)) ? "" : allCallers[0].options.filter(function (user) {
-              return user.selected;
-            }).map(function (callerName) {
-              return callerName.value;
-            });
-            selectedCallers = templateSrv._values.Callers.lastIndexOf('}') > 0 ? templateSrv._values.Callers.slice(1, -1) :
-              templateSrv._values.Callers;
-            var selectedCaller = selectedCallers.split(',');
-            _.forEach(selectedCaller, function (processCaller) {
+            let selectedCallers = [];
+            const callers = templateSrv.index.Callers.options;
+            for (let caller of callers) {
+              if (caller.text.toLowerCase() === "all" && caller.selected) {
+                selectedCallers = "";
+                break;
+              } else if (caller.selected) {
+                selectedCallers.push(caller.text);
+              }
+            }
+            _.forEach(selectedCallers, function (processCaller) {
               metricsPromises.push(_.map(options.targets, function (target) {
                 target.nnCaller = processCaller;
                 target.nnMetric = target.metric.replace('*', target.nnCaller);
@@ -573,10 +583,10 @@
             }).map(function (coreName) {
               return coreName.value;
             });
-            selectedCores = templateSrv._values.Cores.lastIndexOf('}') > 0 ? templateSrv._values.Cores.slice(1, -1) :
-              templateSrv._values.Cores;
-            var selectedCore = selectedCores.split(',');
-            _.forEach(selectedCore, function (processCore) {
+            if (selectedCores[0] === "") {
+              selectedCores = "";
+            }
+            _.forEach(selectedCores, function (processCore) {
               metricsPromises.push(_.map(options.targets, function (target) {
                 target.sCore = processCore;
                 target.sCoreMetric = target.metric.replace('*', target.sCore);
@@ -595,10 +605,10 @@
             }).map(function (collectionsName) {
               return collectionsName.value;
             });
-            selectedCollections = templateSrv._values.Collections.lastIndexOf('}') > 0 ? templateSrv._values.Collections.slice(1, -1) :
-              templateSrv._values.Collections;
-            var selectedCollection = selectedCollections.split(',');
-            _.forEach(selectedCollection, function (processCollection) {
+            if (selectedCollections [0] === "") {
+              selectedCollections = "";
+            }
+            _.forEach(selectedCollections, function (processCollection) {
               metricsPromises.push(_.map(options.targets, function (target) {
                 target.sCollection = processCollection;
                 target.sCollectionMetric = target.metric.replace('*', target.sCollection);
@@ -617,10 +627,10 @@
             }).map(function (topoName) {
               return topoName.value;
             });
-            selectedTopologies = templateSrv._values.topologies.lastIndexOf('}') > 0 ? templateSrv._values.topologies.slice(1, -1) :
-              templateSrv._values.topologies;
-            var selectedTopology = selectedTopologies.split(',');
-            _.forEach(selectedTopology, function (processTopology) {
+            if (selectedTopologies === "") {
+              selectedTopologies = "";
+            }
+            _.forEach(selectedTopologies, function (processTopology) {
               metricsPromises.push(_.map(options.targets, function (target) {
                 target.sTopology = processTopology;
                 target.sTopoMetric = target.metric.replace('*', target.sTopology);
@@ -667,10 +677,10 @@
             }).map(function (dataSourceName) {
               return dataSourceName.value;
             });
-            selectedDataSources = templateSrv._values.druidDataSources.lastIndexOf('}') > 0 ? templateSrv._values.druidDataSources.slice(1, -1) :
-              templateSrv._values.druidDataSources;
-            var selectedDataSource = selectedDataSources.split(',');
-            _.forEach(selectedDataSource, function (processDataSource) {
+            if (selectedDataSources[0] === "") {
+              selectedDataSources = "";
+            }
+            _.forEach(selectedDataSources, function (processDataSource) {
               metricsPromises.push(_.map(options.targets, function (target) {
                 target.sDataSource = processDataSource;
                 target.sDataSourceMetric = target.metric.replace('*', target.sDataSource);
@@ -681,14 +691,21 @@
           // To speed up querying on templatized dashboards.
           var indexOfHosts = -1;
           for (var i = 0; i < templateSrv.variables.length; i++) {
-            if (templateSrv.variables[i].name == 'hosts') {
+            if (templateSrv.variables[i].name == 'hosts' && templateSrv.index.hosts) {
               indexOfHosts = i;
             }
           }
           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;
+            let allHosts = [];
+            const hosts = templateSrv.index.hosts.options
+            for (let host of hosts) {
+              if (host.text.toLowerCase() === "all" && host.selected) {
+                allHosts = '%';
+                break;
+              } else if (host.selected) {
+                allHosts.push(host.text);
+              }
+            };
             metricsPromises.push(_.map(options.targets, function (target) {
               target.templatedHost = allHosts ? allHosts : '';
               target.templatedCluster = templatedCluster;