Repository: ambari Updated Branches: refs/heads/trunk 8a7c54c63 -> 824bc8b6a
AMBARI-11250. Publishing graphs/widgets for a new service requires ambari server code change. Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/824bc8b6 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/824bc8b6 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/824bc8b6 Branch: refs/heads/trunk Commit: 824bc8b6a45682638147d24197cdf106c4fe96c5 Parents: 8a7c54c Author: Siddharth Wagle <swa...@hortonworks.com> Authored: Tue May 19 12:55:58 2015 -0700 Committer: Siddharth Wagle <swa...@hortonworks.com> Committed: Tue May 19 12:56:06 2015 -0700 ---------------------------------------------------------------------- .../metrics/timeline/AMSPropertyProvider.java | 23 ++++- .../ambari/server/state/ComponentInfo.java | 11 +++ .../AMBARI_METRICS/0.1.0/metainfo.xml | 1 + .../HBASE/0.96.0.2.0/metainfo.xml | 2 + .../timeline/AMSPropertyProviderTest.java | 96 ++++++++++++++++++++ 5 files changed, 131 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/824bc8b6/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java index 8bd1b2d..d5af2b7 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java @@ -17,7 +17,10 @@ */ package org.apache.ambari.server.controller.metrics.timeline; +import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.ComponentSSLConfiguration; +import org.apache.ambari.server.controller.AmbariManagementController; +import org.apache.ambari.server.controller.AmbariServer; import org.apache.ambari.server.controller.internal.PropertyInfo; import org.apache.ambari.server.controller.metrics.MetricHostProvider; import org.apache.ambari.server.controller.metrics.MetricsPropertyProvider; @@ -27,6 +30,7 @@ import org.apache.ambari.server.controller.spi.SystemException; import org.apache.ambari.server.controller.spi.TemporalInfo; import org.apache.ambari.server.controller.utilities.PropertyHelper; import org.apache.ambari.server.controller.utilities.StreamProvider; +import org.apache.ambari.server.state.StackId; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric; import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics; @@ -339,8 +343,23 @@ public abstract class AMSPropertyProvider extends MetricsPropertyProvider { } else { String componentName = getComponentName(resource); if (componentName != null && !componentName.isEmpty()) { - if (TIMELINE_APPID_MAP.containsKey(componentName)) { - componentName = TIMELINE_APPID_MAP.get(componentName); + String clusterName = (String) resource.getPropertyValue(clusterNamePropertyId); + StackId stackId; + try { + AmbariManagementController managementController = AmbariServer.getController(); + stackId = managementController.getClusters().getCluster(clusterName).getCurrentStackVersion(); + if (stackId != null) { + String stackName = stackId.getStackName(); + String version = stackId.getStackVersion(); + AmbariMetaInfo ambariMetaInfo = managementController.getAmbariMetaInfo(); + String serviceName = ambariMetaInfo.getComponentToService(stackName, version, componentName); + String timeLineAppId = ambariMetaInfo.getComponent(stackName, version, serviceName, componentName).getTimelineAppid(); + if (timeLineAppId != null){ + componentName = timeLineAppId; + } + } + } catch (Exception e) { + e.printStackTrace(); } uriBuilder.setParameter("appId", componentName); } http://git-wip-us.apache.org/repos/asf/ambari/blob/824bc8b6/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java index 05c0df7..fd68060 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java @@ -90,6 +90,8 @@ public class ComponentInfo { @XmlElement(name="auto-deploy") private AutoDeployInfo autoDeploy; + private String timelineAppid; + public ComponentInfo() { } @@ -109,6 +111,7 @@ public class ComponentInfo { autoDeploy = prototype.autoDeploy; configDependencies = prototype.configDependencies; clientConfigFiles = prototype.clientConfigFiles; + timelineAppid = prototype.timelineAppid; } public String getName() { @@ -252,6 +255,14 @@ public class ComponentInfo { this.clientsToUpdateConfigs = clientsToUpdateConfigs; } + public String getTimelineAppid() { + return timelineAppid; + } + + public void setTimelineAppid(String timelineAppid) { + this.timelineAppid = timelineAppid; + } + @Override public boolean equals(Object o) { if (this == o) return true; http://git-wip-us.apache.org/repos/asf/ambari/blob/824bc8b6/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml index 6c5dd32..039cf4d 100644 --- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml +++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml @@ -31,6 +31,7 @@ <category>MASTER</category> <cardinality>1</cardinality> <versionAdvertised>false</versionAdvertised> + <timelineAppid>AMS-HBASE</timelineAppid> <dependencies> <dependency> <name>ZOOKEEPER/ZOOKEEPER_SERVER</name> http://git-wip-us.apache.org/repos/asf/ambari/blob/824bc8b6/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/metainfo.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/metainfo.xml b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/metainfo.xml index 1032024..e0d8ba2 100644 --- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/metainfo.xml +++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/metainfo.xml @@ -32,6 +32,7 @@ <category>MASTER</category> <cardinality>1+</cardinality> <versionAdvertised>true</versionAdvertised> + <timelineAppid>HBASE</timelineAppid> <dependencies> <dependency> <name>HDFS/HDFS_CLIENT</name> @@ -72,6 +73,7 @@ <category>SLAVE</category> <cardinality>1+</cardinality> <versionAdvertised>true</versionAdvertised> + <timelineAppid>HBASE</timelineAppid> <commandScript> <script>scripts/hbase_regionserver.py</script> <scriptType>PYTHON</scriptType> http://git-wip-us.apache.org/repos/asf/ambari/blob/824bc8b6/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java index 6e389ed..81c53cc 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProviderTest.java @@ -17,7 +17,11 @@ */ package org.apache.ambari.server.controller.metrics.timeline; +import org.apache.ambari.server.AmbariException; +import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.ComponentSSLConfiguration; +import org.apache.ambari.server.controller.AmbariManagementController; +import org.apache.ambari.server.controller.AmbariServer; import org.apache.ambari.server.controller.internal.PropertyInfo; import org.apache.ambari.server.controller.internal.ResourceImpl; import org.apache.ambari.server.controller.internal.TemporalInfoImpl; @@ -28,9 +32,17 @@ import org.apache.ambari.server.controller.spi.Resource; import org.apache.ambari.server.controller.spi.SystemException; import org.apache.ambari.server.controller.spi.TemporalInfo; import org.apache.ambari.server.controller.utilities.PropertyHelper; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.ComponentInfo; +import org.apache.ambari.server.state.StackId; import org.apache.http.client.utils.URIBuilder; import org.junit.Assert; import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import java.io.File; import java.io.IOException; @@ -42,9 +54,14 @@ import java.util.Map; import java.util.Set; import static org.apache.ambari.server.controller.metrics.MetricsServiceProvider.MetricsService; +import static org.easymock.EasyMock.anyObject; import static org.easymock.EasyMock.createNiceMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; import static org.mockito.Mockito.mock; +@RunWith(PowerMockRunner.class) +@PrepareForTest({AMSPropertyProvider.class, AmbariServer.class}) public class AMSPropertyProviderTest { private static final String PROPERTY_ID1 = PropertyHelper.getPropertyId("metrics/cpu", "cpu_user"); private static final String PROPERTY_ID2 = PropertyHelper.getPropertyId("metrics/memory", "mem_free"); @@ -63,6 +80,7 @@ public class AMSPropertyProviderTest { @Test public void testPopulateResourcesForSingleHostMetric() throws Exception { + setUpCommonMocks(); TestStreamProvider streamProvider = new TestStreamProvider(SINGLE_HOST_METRICS_FILE_PATH); TestMetricHostProvider metricHostProvider = new TestMetricHostProvider(); ComponentSSLConfiguration sslConfiguration = mock(ComponentSSLConfiguration.class); @@ -101,6 +119,7 @@ public class AMSPropertyProviderTest { @Test public void testPopulateResourcesForSingleHostMetricPointInTime() throws Exception { + setUpCommonMocks(); // given TestStreamProvider streamProvider = new TestStreamProvider(SINGLE_HOST_METRICS_FILE_PATH); @@ -143,6 +162,7 @@ public class AMSPropertyProviderTest { @Test public void testPopulateResourcesForMultipleHostMetricscPointInTime() throws Exception { + setUpCommonMocks(); TestStreamProvider streamProvider = new TestStreamProvider(MULTIPLE_HOST_METRICS_FILE_PATH); TestMetricHostProvider metricHostProvider = new TestMetricHostProvider(); ComponentSSLConfiguration sslConfiguration = mock(ComponentSSLConfiguration.class); @@ -187,6 +207,7 @@ public class AMSPropertyProviderTest { @Test public void testPopulateResourcesForMultipleHostMetrics() throws Exception { + setUpCommonMocks(); TestStreamProvider streamProvider = new TestStreamProvider(MULTIPLE_HOST_METRICS_FILE_PATH); TestMetricHostProvider metricHostProvider = new TestMetricHostProvider(); ComponentSSLConfiguration sslConfiguration = mock(ComponentSSLConfiguration.class); @@ -237,6 +258,7 @@ public class AMSPropertyProviderTest { @Test public void testPopulateResourcesForRegexpMetrics() throws Exception { + setUpCommonMocks(); TestStreamProvider streamProvider = new TestStreamProvider(MULTIPLE_COMPONENT_REGEXP_METRICS_FILE_PATH); TestMetricHostProvider metricHostProvider = new TestMetricHostProvider(); ComponentSSLConfiguration sslConfiguration = mock(ComponentSSLConfiguration.class); @@ -285,6 +307,7 @@ public class AMSPropertyProviderTest { @Test public void testPopulateResourcesForSingleComponentMetric() throws Exception { + setUpCommonMocks(); TestStreamProvider streamProvider = new TestStreamProvider(SINGLE_COMPONENT_METRICS_FILE_PATH); TestMetricHostProvider metricHostProvider = new TestMetricHostProvider(); ComponentSSLConfiguration sslConfiguration = mock(ComponentSSLConfiguration.class); @@ -327,6 +350,29 @@ public class AMSPropertyProviderTest { @Test public void testPopulateMetricsForEmbeddedHBase() throws Exception { + AmbariManagementController ams = createNiceMock(AmbariManagementController.class); + PowerMock.mockStatic(AmbariServer.class); + expect(AmbariServer.getController()).andReturn(ams); + AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class); + Clusters clusters = createNiceMock(Clusters.class); + Cluster cluster = createNiceMock(Cluster.class); + ComponentInfo componentInfo = createNiceMock(ComponentInfo.class); + StackId stackId= new StackId("HDP","2.2"); + expect(ams.getClusters()).andReturn(clusters).anyTimes(); + try { + expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster).anyTimes(); + } catch (AmbariException e) { + e.printStackTrace(); + } + expect(cluster.getCurrentStackVersion()).andReturn(stackId).anyTimes(); + expect(ams.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes(); + expect(ambariMetaInfo.getComponentToService("HDP", "2.2", "METRICS_COLLECTOR")).andReturn("AMS").anyTimes(); + expect(ambariMetaInfo.getComponent("HDP", "2.2", "AMS", "METRICS_COLLECTOR")) + .andReturn(componentInfo).anyTimes(); + expect(componentInfo.getTimelineAppid()).andReturn("AMS-HBASE"); + replay(ams, clusters, cluster, ambariMetaInfo, componentInfo); + PowerMock.replayAll(); + TestStreamProvider streamProvider = new TestStreamProvider(EMBEDDED_METRICS_FILE_PATH); TestMetricHostProvider metricHostProvider = new TestMetricHostProvider(); ComponentSSLConfiguration sslConfiguration = mock(ComponentSSLConfiguration.class); @@ -369,6 +415,29 @@ public class AMSPropertyProviderTest { @Test public void testAggregateFunctionForComponentMetrics() throws Exception { + AmbariManagementController ams = createNiceMock(AmbariManagementController.class); + PowerMock.mockStatic(AmbariServer.class); + expect(AmbariServer.getController()).andReturn(ams); + AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class); + Clusters clusters = createNiceMock(Clusters.class); + Cluster cluster = createNiceMock(Cluster.class); + ComponentInfo componentInfo = createNiceMock(ComponentInfo.class); + StackId stackId= new StackId("HDP","2.2"); + expect(ams.getClusters()).andReturn(clusters).anyTimes(); + try { + expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster).anyTimes(); + } catch (AmbariException e) { + e.printStackTrace(); + } + expect(cluster.getCurrentStackVersion()).andReturn(stackId).anyTimes(); + expect(ams.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes(); + expect(ambariMetaInfo.getComponentToService("HDP", "2.2", "HBASE_REGIONSERVER")).andReturn("HBASE").anyTimes(); + expect(ambariMetaInfo.getComponent("HDP", "2.2", "HBASE", "HBASE_REGIONSERVER")) + .andReturn(componentInfo).anyTimes(); + expect(componentInfo.getTimelineAppid()).andReturn("HBASE"); + replay(ams, clusters, cluster, ambariMetaInfo, componentInfo); + PowerMock.replayAll(); + TestStreamProvider streamProvider = new TestStreamProvider(AGGREGATE_METRICS_FILE_PATH); TestMetricHostProvider metricHostProvider = new TestMetricHostProvider(); ComponentSSLConfiguration sslConfiguration = mock(ComponentSSLConfiguration.class); @@ -437,6 +506,7 @@ public class AMSPropertyProviderTest { @Test public void testPopulateResourcesForHostComponentHostMetrics() throws Exception { + setUpCommonMocks(); TestStreamProviderForHostComponentHostMetricsTest streamProvider = new TestStreamProviderForHostComponentHostMetricsTest(null); TestMetricHostProvider metricHostProvider = new TestMetricHostProvider(); @@ -533,4 +603,30 @@ public class AMSPropertyProviderTest { return true; } } + + private void setUpCommonMocks() throws AmbariException { + AmbariManagementController ams = createNiceMock(AmbariManagementController.class); + PowerMock.mockStatic(AmbariServer.class); + expect(AmbariServer.getController()).andReturn(ams); + AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class); + Clusters clusters = createNiceMock(Clusters.class); + Cluster cluster = createNiceMock(Cluster.class); + ComponentInfo componentInfo = createNiceMock(ComponentInfo.class); + StackId stackId= new StackId("HDP","2.2"); + expect(ams.getClusters()).andReturn(clusters).anyTimes(); + try { + expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster).anyTimes(); + } catch (AmbariException e) { + e.printStackTrace(); + } + expect(cluster.getCurrentStackVersion()).andReturn(stackId).anyTimes(); + expect(ams.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes(); + expect(ambariMetaInfo.getComponentToService(anyObject(String.class), + anyObject(String.class), anyObject(String.class))).andReturn("HDFS").anyTimes(); + expect(ambariMetaInfo.getComponent(anyObject(String.class),anyObject(String.class), + anyObject(String.class), anyObject(String.class))) + .andReturn(componentInfo).anyTimes(); + replay(ams, clusters, cluster, ambariMetaInfo); + PowerMock.replayAll(); + } }