This is an automated email from the ASF dual-hosted git repository.

avijayan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ambari-metrics.git


The following commit(s) were added to refs/heads/master by this push:
     new 9f800da  [AMBARI-25077] Grafana on a workload cluster should show 
visualization of only it's own cluster. (#12)
9f800da is described below

commit 9f800dac83fb6761e4627a7030e839642148224c
Author: avijayanhwx <[email protected]>
AuthorDate: Wed Jan 2 10:39:46 2019 -0800

    [AMBARI-25077] Grafana on a workload cluster should show visualization of 
only it's own cluster. (#12)
---
 .../ambari-metrics/datasource.js                   | 30 +++++-----
 .../core/timeline/HBaseTimelineMetricsService.java |  5 +-
 .../core/timeline/PhoenixHBaseAccessor.java        | 10 ++--
 .../core/timeline/TimelineMetricConfiguration.java | 10 ++++
 .../core/timeline/query/PhoenixTransactSQL.java    |  2 +-
 .../ambari/metrics/webapp/TimelineWebServices.java | 68 +++++++++++++++++++++-
 6 files changed, 102 insertions(+), 23 deletions(-)

diff --git a/ambari-metrics-grafana/ambari-metrics/datasource.js 
b/ambari-metrics-grafana/ambari-metrics/datasource.js
index dd64566..18e2709 100644
--- a/ambari-metrics-grafana/ambari-metrics/datasource.js
+++ b/ambari-metrics-grafana/ambari-metrics/datasource.js
@@ -59,7 +59,7 @@ define([
 
       //We get a list of components and their associated metrics.
       this.initMetricAppidMapping = function () {
-        return this.doAmbariRequest({url: '/ws/v1/timeline/metrics/metadata'})
+        return this.doAmbariRequest({url: '/metadata'})
           .then(function (items) {
             items = items.data;
             allMetrics = {};
@@ -227,7 +227,7 @@ define([
           var metricTransform = !target.transform || target.transform === 
"none" ? '' : '._' + target.transform;
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + target.metric + 
metricTransform +
+            url: '?metricNames=' + target.metric + metricTransform +
             metricAggregator + "&hostname=" + target.hosts + '&appId=' + 
target.app + instanceId + '&startTime=' + from +
             '&endTime=' + to + precision + seriesAggregator
           }).then(
@@ -268,7 +268,7 @@ define([
           var metricTransform = !target.transform || target.transform === 
"none" ? '' : '._' + target.transform;
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + target.metric + 
metricTransform
+            url: '?metricNames=' + target.metric + metricTransform
             + metricAggregator + '&hostname=' + tHost + '&appId=' + target.app 
+ instanceId + '&startTime=' + from +
             '&endTime=' + to + precision + seriesAggregator
           }).then(
@@ -302,7 +302,7 @@ define([
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           var templatedComponent = (_.isEmpty(tComponent)) ? target.app : 
tComponent;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + target.metric + 
metricTransform
+            url: '?metricNames=' + target.metric + metricTransform
             + metricAggregator + '&hostname=' + target.templatedHost + 
'&appId=' + templatedComponent + instanceId
             + '&startTime=' + from + '&endTime=' + to + precision + topN + 
seriesAggregator
           }).then(
@@ -317,7 +317,7 @@ define([
           var metricTransform = !target.transform || target.transform === 
"none" ? '' : '._' + target.transform;
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + 
encodeURIComponent(target.queue) + metricTransform
+            url: '?metricNames=' + encodeURIComponent(target.queue) + 
metricTransform
             + metricAggregator + '&appId=resourcemanager' + instanceId + 
'&startTime=' + from +
             '&endTime=' + to + precision + seriesAggregator
           }).then(
@@ -330,7 +330,7 @@ define([
             + target.precision;
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + target.hbMetric + 
instanceId + '&appId=hbase&startTime='
+            url: '?metricNames=' + target.hbMetric + instanceId + 
'&appId=hbase&startTime='
             + from + '&endTime=' + to + precision + seriesAggregator
           }).then(
             allHostMetricsData(target)
@@ -345,7 +345,7 @@ define([
           var metricTransform = !target.transform || target.transform === 
"none" ? '' : '._' + target.transform;
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + target.kbMetric + 
metricTransform + instanceId
+            url: '?metricNames=' + target.kbMetric + metricTransform + 
instanceId
             + metricAggregator + '&appId=kafka_broker&startTime=' + from +
             '&endTime=' + to + precision + seriesAggregator
           }).then(
@@ -361,7 +361,7 @@ define([
           var metricTransform = !target.transform || target.transform === 
"none" ? '' : '._' + target.transform;
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + target.nnMetric + 
metricTransform + instanceId
+            url: '?metricNames=' + target.nnMetric + metricTransform + 
instanceId
             + metricAggregator + '&appId=namenode&startTime=' + from + 
'&endTime=' + to + precision + seriesAggregator
           }).then(
             allHostMetricsData(target)
@@ -377,7 +377,7 @@ define([
           var metricTransform = !target.transform || target.transform === 
"none" ? '' : '._' + target.transform;
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + target.sTopoMetric + 
metricTransform + instanceId
+            url: '?metricNames=' + target.sTopoMetric + metricTransform + 
instanceId
             + metricAggregator + '&appId=nimbus&startTime=' + from + 
'&endTime=' + to + precision + seriesAggregator
           }).then(
             allHostMetricsData(target)
@@ -393,7 +393,7 @@ define([
           var metricTransform = !target.transform || target.transform === 
"none" ? '' : '._' + target.transform;
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + target.sCoreMetric + 
metricTransform + instanceId
+            url: '?metricNames=' + target.sCoreMetric + metricTransform + 
instanceId
             + metricAggregator + '&appId=ambari-infra-solr&startTime=' + from 
+ '&endTime=' + to + precision + seriesAggregator
           }).then(
             allHostMetricsData(target)
@@ -408,7 +408,7 @@ define([
           var metricTransform = !target.transform || target.transform === 
"none" ? '' : '._' + target.transform;
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + 
target.sCollectionMetric + metricTransform + instanceId
+            url: '?metricNames=' + target.sCollectionMetric + metricTransform 
+ instanceId
             + metricAggregator + '&appId=ambari-infra-solr&startTime=' + from 
+ '&endTime=' + to + precision + seriesAggregator
           }).then(
             allHostMetricsData(target)
@@ -424,7 +424,7 @@ define([
           var metricTransform = !target.transform || target.transform === 
"none" ? '' : '._' + target.transform;
           var seriesAggregator = !target.seriesAggregator || 
target.seriesAggregator === "none" ? '' : '&seriesAggregateFunction=' + 
target.seriesAggregator;
           return self.doAmbariRequest({
-            url: '/ws/v1/timeline/metrics?metricNames=' + 
target.sDataSourceMetric + metricTransform + instanceId
+            url: '?metricNames=' + target.sDataSourceMetric + metricTransform 
+ instanceId
             + metricAggregator + '&appId=druid&startTime=' + from + 
'&endTime=' + to + precision + seriesAggregator
           }).then(
             allHostMetricsData(target)
@@ -1111,7 +1111,7 @@ define([
        */
       this.testDatasource = function () {
         return this.doAmbariRequest({
-          url: '/ws/v1/timeline/metrics/metadata',
+          url: '/metadata',
           method: 'GET'
         }).then(function (response) {
           console.log(response);
@@ -1161,7 +1161,7 @@ define([
         }
         return this.doAmbariRequest({
           method: 'GET',
-          url: '/ws/v1/timeline/metrics/instances?' + 'appId=' + app
+          url: '/instance?' + 'appId=' + app
         }).then(function (response) {
           var clusters = [];
           var data = response.data;
@@ -1188,7 +1188,7 @@ define([
         }
         return this.doAmbariRequest({
           method: 'GET',
-          url: '/ws/v1/timeline/metrics/instances?' + 'appId=' + app + 
'&instanceId=' + cluster
+          url: '/instance?' + 'appId=' + app + '&instanceId=' + cluster
         }).then(function (response) {
           var hosts = [];
           var data = response.data;
diff --git 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/HBaseTimelineMetricsService.java
 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/HBaseTimelineMetricsService.java
index c90c93b..3619af6 100644
--- 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/HBaseTimelineMetricsService.java
+++ 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/HBaseTimelineMetricsService.java
@@ -17,7 +17,6 @@
  */
 package org.apache.ambari.metrics.core.timeline;
 
-import static 
org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguration.DEFAULT_INSTANCE_ID;
 import static 
org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguration.USE_GROUPBY_AGGREGATOR_QUERIES;
 import static 
org.apache.ambari.metrics.core.timeline.availability.AggregationTaskRunner.ACTUAL_AGGREGATOR_NAMES;
 
@@ -87,6 +86,7 @@ public class HBaseTimelineMetricsService extends 
AbstractService implements Time
   private TimelineMetricMetadataManager metricMetadataManager;
   private MetricCollectorHAController haController;
   private boolean containerMetricsDisabled = false;
+  private String defaultInstanceId = "";
 
   /**
    * Construct the service.
@@ -218,6 +218,7 @@ public class HBaseTimelineMetricsService extends 
AbstractService implements Time
           "delay = " + initDelay + ", delay = " + delay);
       }
       containerMetricsDisabled = configuration.isContainerMetricsDisabled();
+      defaultInstanceId = configuration.getDefaultInstanceId();
       isInitialized = true;
     }
 
@@ -258,7 +259,7 @@ public class HBaseTimelineMetricsService extends 
AbstractService implements Time
     List<String> transientMetricNames = new ArrayList<>();
 
     if (configuration.getTimelineMetricsMultipleClusterSupport() && 
StringUtils.isEmpty(instanceId)) {
-      instanceId = DEFAULT_INSTANCE_ID;
+      instanceId = this.defaultInstanceId;
     }
 
     List<byte[]> uuids = 
metricMetadataManager.getUuidsForGetMetricQuery(metricFunctions.keySet(),
diff --git 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/PhoenixHBaseAccessor.java
 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/PhoenixHBaseAccessor.java
index b6ff202..6f1e1c0 100644
--- 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/PhoenixHBaseAccessor.java
+++ 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/PhoenixHBaseAccessor.java
@@ -29,7 +29,6 @@ import static 
org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguratio
 import static 
org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguration.CLUSTER_SECOND_TABLE_TTL;
 import static 
org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguration.CONTAINER_METRICS_TTL;
 import static 
org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguration.DATE_TIERED_COMPACTION_POLICY;
-import static 
org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguration.DEFAULT_INSTANCE_ID;
 import static 
org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguration.FIFO_COMPACTION_POLICY_CLASS;
 import static 
org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguration.GLOBAL_MAX_RETRIES;
 import static 
org.apache.ambari.metrics.core.timeline.TimelineMetricConfiguration.GLOBAL_RESULT_LIMIT;
@@ -203,6 +202,7 @@ public class PhoenixHBaseAccessor {
   private TimelineMetricMetadataManager metadataManagerInstance;
   private Set<String> eventMetricPatterns = new HashSet<>();
   private boolean supportMultipleClusterMetrics = false;
+  private String defaultInstanceId = "";
 
   private Map<String, Integer> tableTTL = new HashMap<>();
 
@@ -263,6 +263,7 @@ public class PhoenixHBaseAccessor {
     tableTTL.put(METRIC_TRANSIENT_TABLE_NAME, 
metricsConf.getInt(METRICS_TRANSIENT_TABLE_TTL, 7 * 86400)); //7 days
 
     this.supportMultipleClusterMetrics = 
Boolean.valueOf(metricsConf.get(TIMELINE_METRICS_SUPPORT_MULTIPLE_CLUSTERS, 
"false"));
+    this.defaultInstanceId = configuration.getDefaultInstanceId();
 
     if (cacheEnabled) {
       LOG.debug("Initialising and starting metrics cache committer thread...");
@@ -903,6 +904,10 @@ public class PhoenixHBaseAccessor {
 
       boolean acceptMetric = TimelineMetricsFilter.acceptMetric(tm);
 
+      if (supportMultipleClusterMetrics && 
StringUtils.isEmpty(tm.getInstanceId())) {
+        tm.setInstanceId(defaultInstanceId);
+      }
+
       // Write to metadata cache on successful write to store
       if (metadataManager != null) {
         metadataManager.putIfModifiedTimelineMetricMetadata(
@@ -912,9 +917,6 @@ public class PhoenixHBaseAccessor {
                 tm.getHostName(), tm.getAppId());
 
         if (!tm.getAppId().equals("FLUME_HANDLER")) {
-          if (supportMultipleClusterMetrics && 
StringUtils.isEmpty(tm.getInstanceId())) {
-            tm.setInstanceId(DEFAULT_INSTANCE_ID);
-          }
           
metadataManager.putIfModifiedHostedInstanceMetadata(tm.getInstanceId(), 
tm.getHostName());
         }
       }
diff --git 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/TimelineMetricConfiguration.java
 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/TimelineMetricConfiguration.java
index 9766f0c..f8f4bb0 100644
--- 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/TimelineMetricConfiguration.java
+++ 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/TimelineMetricConfiguration.java
@@ -292,6 +292,9 @@ public class TimelineMetricConfiguration {
   public static final String TIMELINE_METRICS_SUPPORT_MULTIPLE_CLUSTERS =
     "timeline.metrics.support.multiple.clusters";
 
+  public static final String TIMELINE_METRICS_DEFAULT_INSTANCE_ID =
+    "timeline.metrics.default.instanceid";
+
   public static final String TIMELINE_METRICS_EVENT_METRIC_PATTERNS =
     "timeline.metrics.downsampler.event.metric.patterns";
 
@@ -512,6 +515,13 @@ public class TimelineMetricConfiguration {
     return false;
   }
 
+  public String getDefaultInstanceId() {
+    if (metricsConf != null) {
+      return metricsConf.get(TIMELINE_METRICS_DEFAULT_INSTANCE_ID, 
DEFAULT_INSTANCE_ID);
+    }
+    return DEFAULT_INSTANCE_ID;
+  }
+
   public String getTimelineServiceRpcAddress() {
     String defaultRpcAddress = "0.0.0.0:60200";
     if (metricsConf != null) {
diff --git 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/query/PhoenixTransactSQL.java
 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/query/PhoenixTransactSQL.java
index ee50051..092da51 100644
--- 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/query/PhoenixTransactSQL.java
+++ 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/core/timeline/query/PhoenixTransactSQL.java
@@ -154,7 +154,7 @@ public class PhoenixTransactSQL {
       "START_TIME UNSIGNED_LONG, " +
       "SUPPORTS_AGGREGATION BOOLEAN, " +
       "IS_WHITELISTED BOOLEAN " +
-      "CONSTRAINT pk PRIMARY KEY (METRIC_NAME, APP_ID)) " +
+      "CONSTRAINT pk PRIMARY KEY (METRIC_NAME, APP_ID, INSTANCE_ID)) " +
       "DATA_BLOCK_ENCODING='%s', COMPRESSION='%s'";
 
   public static final String CREATE_HOSTED_APPS_METADATA_TABLE_SQL =
diff --git 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/webapp/TimelineWebServices.java
 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/webapp/TimelineWebServices.java
index b3378be..71477ec 100644
--- 
a/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/webapp/TimelineWebServices.java
+++ 
b/ambari-metrics-timelineservice/src/main/java/org/apache/ambari/metrics/webapp/TimelineWebServices.java
@@ -36,6 +36,7 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.WebApplicationException;
@@ -288,6 +289,31 @@ public class TimelineWebServices {
   }
 
   @GET
+  @Path("metrics/{instanceId}")
+  @Produces({ MediaType.APPLICATION_JSON })
+  public TimelineMetrics getTimelineMetricsForInstance(
+    @Context HttpServletRequest req,
+    @Context HttpServletResponse res,
+    @PathParam("instanceId") String instanceId,
+    @QueryParam("metricNames") String metricNames,
+    @QueryParam("appId") String appId,
+    @QueryParam("hostname") String hostname,
+    @QueryParam("startTime") String startTime,
+    @QueryParam("endTime") String endTime,
+    @QueryParam("precision") String precision,
+    @QueryParam("limit") String limit,
+    @QueryParam("grouped") String grouped,
+    @QueryParam("topN") String topN,
+    @QueryParam("topNFunction") String topNFunction,
+    @QueryParam("isBottomN") String isBottomN,
+    @QueryParam("seriesAggregateFunction") String seriesAggregateFunction
+  ) {
+
+    return getTimelineMetrics(req, res, metricNames, appId, instanceId, 
hostname, startTime, endTime, precision, limit,
+      grouped, topN, topNFunction, isBottomN, seriesAggregateFunction);
+  }
+
+  @GET
   @Path("/metrics/summary")
   @Produces({ MediaType.APPLICATION_JSON })
   public TimelineMetricServiceSummary getTimelineMetricServiceSummary(
@@ -325,6 +351,28 @@ public class TimelineWebServices {
   }
 
   @GET
+  @Path("/metrics/{instanceId}/metadata")
+  @Produces({ MediaType.APPLICATION_JSON })
+  public Map<String, List<TimelineMetricMetadata>> 
getTimelineMetricMetadataForInstance(
+    @Context HttpServletRequest req,
+    @Context HttpServletResponse res,
+    @QueryParam("appId") String appId,
+    @QueryParam("metricName") String metricPattern,
+    @QueryParam("includeAll") String includeBlacklistedMetrics
+  ) {
+    init(res);
+
+    try {
+      return timelineMetricStore.getTimelineMetricMetadata(
+        parseStr(appId),
+        parseStr(metricPattern),
+        parseBoolean(includeBlacklistedMetrics));
+    } catch (Exception e) {
+      throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
+    }
+  }
+
+  @GET
   @Path("/metrics/hosts")
   @Produces({ MediaType.APPLICATION_JSON })
   public Map<String, Set<String>> getHostedAppsMetadata(
@@ -341,7 +389,7 @@ public class TimelineWebServices {
   }
 
   @GET
-  @Path("/metrics/instances")
+  @Path("/metrics/instance")
   @Produces({ MediaType.APPLICATION_JSON })
   public Map<String, Map<String, Set<String>>> getClusterHostsMetadata(
     @Context HttpServletRequest req,
@@ -359,6 +407,24 @@ public class TimelineWebServices {
   }
 
   @GET
+  @Path("/metrics/{instanceId}/instance")
+  @Produces({ MediaType.APPLICATION_JSON })
+  public Map<String, Map<String, Set<String>>> 
getClusterHostsMetadataForInstance(
+    @Context HttpServletRequest req,
+    @Context HttpServletResponse res,
+    @QueryParam("appId") String appId,
+    @PathParam("instanceId") String instanceId
+  ) {
+    init(res);
+
+    try {
+      return timelineMetricStore.getInstanceHostsMetadata(instanceId, appId);
+    } catch (Exception e) {
+      throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
+    }
+  }
+
+  @GET
   @Path("/metrics/uuid")
   @Produces({ MediaType.APPLICATION_JSON })
   public byte[] getUuid(

Reply via email to