| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.ambari.server.controller.internal; |
| |
| 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 java.io.IOException; |
| import java.io.InputStream; |
| import java.lang.reflect.Field; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.LinkedHashSet; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.apache.ambari.server.AmbariException; |
| import org.apache.ambari.server.configuration.ComponentSSLConfiguration; |
| import org.apache.ambari.server.configuration.Configuration; |
| import org.apache.ambari.server.controller.AmbariManagementController; |
| import org.apache.ambari.server.controller.AmbariServer; |
| import org.apache.ambari.server.controller.jmx.JMXPropertyProvider; |
| import org.apache.ambari.server.controller.jmx.TestStreamProvider; |
| import org.apache.ambari.server.controller.metrics.JMXPropertyProviderTest; |
| import org.apache.ambari.server.controller.metrics.MetricsServiceProvider; |
| import org.apache.ambari.server.controller.metrics.ganglia.GangliaPropertyProviderTest.TestGangliaHostProvider; |
| import org.apache.ambari.server.controller.metrics.ganglia.GangliaPropertyProviderTest.TestGangliaServiceProvider; |
| import org.apache.ambari.server.controller.metrics.timeline.MetricsRequestHelper; |
| import org.apache.ambari.server.controller.metrics.timeline.cache.TimelineMetricCacheEntryFactory; |
| import org.apache.ambari.server.controller.metrics.timeline.cache.TimelineMetricCacheProvider; |
| import org.apache.ambari.server.controller.spi.Predicate; |
| import org.apache.ambari.server.controller.spi.PropertyProvider; |
| import org.apache.ambari.server.controller.spi.Request; |
| 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.orm.GuiceJpaInitializer; |
| import org.apache.ambari.server.orm.InMemoryDefaultTestModule; |
| import org.apache.ambari.server.orm.OrmTestHelper; |
| import org.apache.ambari.server.security.TestAuthenticationFactory; |
| import org.apache.ambari.server.security.authorization.AuthorizationException; |
| import org.apache.ambari.server.state.Cluster; |
| import org.apache.ambari.server.state.Clusters; |
| import org.apache.ambari.server.state.Host; |
| import org.apache.ambari.server.state.RepositoryVersionState; |
| import org.apache.ambari.server.state.StackId; |
| import org.apache.ambari.server.state.services.MetricsRetrievalService; |
| import org.apache.ambari.server.state.stack.Metric; |
| import org.apache.ambari.server.utils.SynchronousThreadPoolExecutor; |
| import org.junit.After; |
| import org.junit.Assert; |
| import org.junit.Before; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| import org.springframework.security.core.context.SecurityContextHolder; |
| |
| import com.google.inject.Binder; |
| import com.google.inject.Guice; |
| import com.google.inject.Injector; |
| import com.google.inject.Module; |
| import com.google.inject.persist.PersistService; |
| import com.google.inject.util.Modules; |
| |
| /** |
| * Tests the stack defined property provider. |
| */ |
| public class StackDefinedPropertyProviderTest { |
| private static final String HOST_COMPONENT_HOST_NAME_PROPERTY_ID = "HostRoles/host_name"; |
| private static final String HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID = "HostRoles/component_name"; |
| private static final String HOST_COMPONENT_STATE_PROPERTY_ID = "HostRoles/state"; |
| private static final String CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "cluster_name"); |
| |
| private Clusters clusters = null; |
| private Injector injector = null; |
| private OrmTestHelper helper = null; |
| |
| private static TimelineMetricCacheEntryFactory cacheEntryFactory; |
| private static TimelineMetricCacheProvider cacheProvider; |
| |
| @BeforeClass |
| public static void setupCache() { |
| cacheEntryFactory = new TimelineMetricCacheEntryFactory(new Configuration()); |
| cacheProvider = new TimelineMetricCacheProvider(new Configuration(), cacheEntryFactory); |
| Injector injector = Guice.createInjector(new InMemoryDefaultTestModule()); |
| JMXPropertyProvider.init(injector.getInstance(Configuration.class)); |
| } |
| |
| public class TestModuleWithCacheProvider implements Module { |
| @Override |
| public void configure(Binder binder) { |
| binder.bind(TimelineMetricCacheProvider.class).toInstance(cacheProvider); |
| } |
| } |
| |
| @Before |
| public void setup() throws Exception { |
| InMemoryDefaultTestModule module = new InMemoryDefaultTestModule(); |
| // Use the same cache provider to ensure there is only once instance of |
| // Cache available. The @net.sf.ehcache.CacheManager is a singleton and |
| // does not allow multiple instance with same cache name to be registered. |
| injector = Guice.createInjector(Modules.override(module).with(new TestModuleWithCacheProvider())); |
| injector.getInstance(GuiceJpaInitializer.class); |
| StackDefinedPropertyProvider.init(injector); |
| |
| MetricsRetrievalService metricsRetrievalService = injector.getInstance( |
| MetricsRetrievalService.class); |
| |
| metricsRetrievalService.start(); |
| metricsRetrievalService.setThreadPoolExecutor(new SynchronousThreadPoolExecutor()); |
| |
| helper = injector.getInstance(OrmTestHelper.class); |
| |
| clusters = injector.getInstance(Clusters.class); |
| StackId stackId = new StackId("HDP-2.0.5"); |
| |
| clusters.addCluster("c2", stackId); |
| |
| Cluster cluster = clusters.getCluster("c2"); |
| |
| cluster.setDesiredStackVersion(stackId); |
| helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); |
| cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin", |
| RepositoryVersionState.INSTALLING); |
| |
| clusters.addHost("h1"); |
| Host host = clusters.getHost("h1"); |
| Map<String, String> hostAttributes = new HashMap<String, String>(); |
| hostAttributes.put("os_family", "redhat"); |
| hostAttributes.put("os_release_version", "6.3"); |
| host.setHostAttributes(hostAttributes); |
| host.persist(); |
| |
| clusters.mapHostToCluster("h1", "c2"); |
| |
| // Setting up Mocks for Controller, Clusters etc, queried as part of user's Role context |
| // while fetching Metrics. |
| AmbariManagementController amc = createNiceMock(AmbariManagementController.class); |
| Field field = AmbariServer.class.getDeclaredField("clusterController"); |
| field.setAccessible(true); |
| field.set(null, amc); |
| Clusters clustersMock = createNiceMock(Clusters.class); |
| Cluster clusterMock = createNiceMock(Cluster.class); |
| expect(amc.getClusters()).andReturn(clustersMock).anyTimes(); |
| expect(clustersMock.getCluster(CLUSTER_NAME_PROPERTY_ID)).andReturn(clusterMock).anyTimes(); |
| expect(clusterMock.getResourceId()).andReturn(2L).anyTimes(); |
| try { |
| expect(clustersMock.getCluster(anyObject(String.class))).andReturn(clusterMock).anyTimes(); |
| } catch (AmbariException e) { |
| e.printStackTrace(); |
| } |
| replay(amc, clustersMock, clusterMock); |
| } |
| |
| @After |
| public void teardown() throws Exception { |
| injector.getInstance(PersistService.class).stop(); |
| } |
| |
| @Test |
| public void testStackDefinedPropertyProviderAsClusterAdministrator() throws Exception { |
| //Setup user with Role 'ClusterAdministrator'. |
| SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createClusterAdministrator("ClusterAdmin", 2L)); |
| |
| testPopulateHostComponentResources(); |
| testCustomProviders(); |
| testPopulateResources_HDP2(); |
| testPopulateResources_HDP2_params(); |
| testPopulateResources_HDP2_params_singleProperty(); |
| testPopulateResources_HDP2_params_category(); |
| testPopulateResources_HDP2_params_category2(); |
| testPopulateResources_jmx_JournalNode(); |
| testPopulateResources_jmx_Storm(); |
| testPopulateResources_NoRegionServer(); |
| testPopulateResources_HBaseMaster2(); |
| testPopulateResources_params_category5(); |
| testPopulateResources_ganglia_JournalNode(); |
| testPopulateResources_resourcemanager_clustermetrics(); |
| testPopulateResourcesWithAggregateFunctionMetrics(); |
| } |
| |
| @Test |
| public void testStackDefinedPropertyProviderAsAdministrator() throws Exception { |
| //Setup user with Role 'Administrator' |
| SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator("Admin")); |
| |
| testPopulateHostComponentResources(); |
| testCustomProviders(); |
| testPopulateResources_HDP2(); |
| testPopulateResources_HDP2_params(); |
| testPopulateResources_HDP2_params_singleProperty(); |
| testPopulateResources_HDP2_params_category(); |
| testPopulateResources_HDP2_params_category2(); |
| testPopulateResources_jmx_JournalNode(); |
| testPopulateResources_jmx_Storm(); |
| testPopulateResources_NoRegionServer(); |
| testPopulateResources_HBaseMaster2(); |
| testPopulateResources_params_category5(); |
| testPopulateResources_ganglia_JournalNode(); |
| testPopulateResources_resourcemanager_clustermetrics(); |
| testPopulateResourcesWithAggregateFunctionMetrics(); |
| } |
| |
| @Test |
| public void testStackDefinedPropertyProviderAsServiceAdministrator() throws Exception { |
| //Setup user with 'ServiceAdministrator' |
| SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createServiceAdministrator("ServiceAdmin", 2L)); |
| |
| testPopulateHostComponentResources(); |
| testCustomProviders(); |
| testPopulateResources_HDP2(); |
| testPopulateResources_HDP2_params(); |
| testPopulateResources_HDP2_params_singleProperty(); |
| testPopulateResources_HDP2_params_category(); |
| testPopulateResources_HDP2_params_category2(); |
| testPopulateResources_jmx_JournalNode(); |
| testPopulateResources_jmx_Storm(); |
| testPopulateResources_NoRegionServer(); |
| testPopulateResources_HBaseMaster2(); |
| testPopulateResources_params_category5(); |
| testPopulateResources_ganglia_JournalNode(); |
| testPopulateResources_resourcemanager_clustermetrics(); |
| testPopulateResourcesWithAggregateFunctionMetrics(); |
| } |
| |
| @Test(expected = AuthorizationException.class) |
| public void testStackDefinedPropertyProviderAsViewUser() throws Exception { |
| // Setup user with 'ViewUser' |
| // ViewUser doesn't have the 'CLUSTER_VIEW_METRICS', 'HOST_VIEW_METRICS' and 'SERVICE_VIEW_METRICS', thus |
| // can't retrieve the Metrics. |
| SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createViewUser("ViewUser", 2L)); |
| |
| testPopulateHostComponentResources(); |
| testCustomProviders(); |
| testPopulateResources_HDP2(); |
| testPopulateResources_HDP2_params(); |
| testPopulateResources_HDP2_params_singleProperty(); |
| testPopulateResources_HDP2_params_category(); |
| testPopulateResources_HDP2_params_category2(); |
| testPopulateResources_jmx_JournalNode(); |
| testPopulateResources_jmx_Storm(); |
| testPopulateResources_NoRegionServer(); |
| testPopulateResources_HBaseMaster2(); |
| testPopulateResources_params_category5(); |
| testPopulateResources_ganglia_JournalNode(); |
| testPopulateResources_resourcemanager_clustermetrics(); |
| testPopulateResourcesWithAggregateFunctionMetrics(); |
| } |
| |
| public void testPopulateHostComponentResources() throws Exception { |
| TestJMXProvider tj = new TestJMXProvider(true); |
| JMXPropertyProviderTest.TestMetricHostProvider tm = new JMXPropertyProviderTest.TestMetricHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider sdpp = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, tj, tm, serviceProvider, |
| new CombinedStreamProvider(), "HostRoles/cluster_name", |
| "HostRoles/host_name", "HostRoles/component_name", "HostRoles/state", |
| null, null); |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty("HostRoles/host_name", "h1"); |
| resource.setProperty("HostRoles/component_name", "NAMENODE"); |
| resource.setProperty("HostRoles/state", "STARTED"); |
| |
| // request with an empty set should get all supported properties |
| Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet(), new HashMap<String, TemporalInfo>()); |
| |
| Set<Resource> set = sdpp.populateResources(Collections.singleton(resource), request, null); |
| Assert.assertEquals(1, set.size()); |
| |
| Resource res = set.iterator().next(); |
| |
| Map<String, Map<String, Object>> values = res.getPropertiesMap(); |
| |
| Assert.assertTrue("Expected JMX metric 'metrics/dfs/FSNamesystem'", values.containsKey("metrics/dfs/FSNamesystem")); |
| Assert.assertTrue("Expected JMX metric 'metrics/dfs/namenode'", values.containsKey("metrics/dfs/namenode")); |
| Assert.assertTrue("Expected Ganglia metric 'metrics/rpcdetailed/client'", values.containsKey("metrics/rpcdetailed/client")); |
| Assert.assertTrue("Expected Ganglia metric 'metrics/rpc/client'", values.containsKey("metrics/rpc/client")); |
| } |
| |
| |
| public void testCustomProviders() throws Exception { |
| |
| StackDefinedPropertyProvider sdpp = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, null, null, null, new CombinedStreamProvider(), |
| "HostRoles/cluster_name", "HostRoles/host_name", "HostRoles/component_name", "HostRoles/state", |
| new EmptyPropertyProvider(), new EmptyPropertyProvider()); |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty("HostRoles/host_name", "h1"); |
| resource.setProperty("HostRoles/component_name", "DATANODE"); |
| resource.setProperty("HostRoles/state", "STARTED"); |
| |
| // request with an empty set should get all supported properties |
| Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet(), new HashMap<String, TemporalInfo>()); |
| |
| Set<Resource> set = sdpp.populateResources(Collections.singleton(resource), request, null); |
| Assert.assertEquals(1, set.size()); |
| |
| Resource res = set.iterator().next(); |
| |
| Map<String, Map<String, Object>> values = res.getPropertiesMap(); |
| Assert.assertTrue(values.containsKey("foo/type1")); |
| Assert.assertTrue(values.containsKey("foo/type2")); |
| Assert.assertTrue(values.containsKey("foo/type3")); |
| Assert.assertFalse(values.containsKey("foo/type4")); |
| |
| Assert.assertTrue(values.get("foo/type1").containsKey("name")); |
| Assert.assertTrue(values.get("foo/type2").containsKey("name")); |
| Assert.assertTrue(values.get("foo/type3").containsKey("name")); |
| |
| Assert.assertEquals("value1", values.get("foo/type1").get("name")); |
| |
| } |
| |
| |
| private static class CombinedStreamProvider extends URLStreamProvider { |
| |
| public CombinedStreamProvider() { |
| super(1000, 1000, ComponentSSLConfiguration.instance()); |
| } |
| |
| @Override |
| public InputStream readFrom(String spec) throws IOException { |
| if (spec.indexOf("jmx") > -1) { |
| // jmx |
| return ClassLoader.getSystemResourceAsStream("hdfs_namenode_jmx.json"); |
| } else { |
| // ganglia |
| return ClassLoader.getSystemResourceAsStream("temporal_ganglia_data.txt"); |
| } |
| } |
| |
| @Override |
| public InputStream readFrom(String spec, String requestMethod, String params) |
| throws IOException { |
| return readFrom(spec); |
| } |
| } |
| |
| private static class EmptyPropertyProvider implements PropertyProvider { |
| |
| @Override |
| public Set<Resource> populateResources(Set<Resource> resources, |
| Request request, Predicate predicate) throws SystemException { |
| // TODO Auto-generated method stub |
| return null; |
| } |
| |
| @Override |
| public Set<String> checkPropertyIds(Set<String> propertyIds) { |
| // TODO Auto-generated method stub |
| return null; |
| } |
| |
| } |
| |
| /** |
| * Test for empty constructor. Public since instantiated via reflection. |
| */ |
| public static class CustomMetricProvider1 implements PropertyProvider { |
| @Override |
| public Set<Resource> populateResources(Set<Resource> resources, |
| Request request, Predicate predicate) throws SystemException { |
| |
| for (Resource r : resources) { |
| r.setProperty("foo/type1/name", "value1"); |
| } |
| |
| return resources; |
| } |
| |
| @Override |
| public Set<String> checkPropertyIds(Set<String> propertyIds) { |
| return Collections.emptySet(); |
| } |
| } |
| |
| /** |
| * Test map constructors. Public since instantiated via reflection. |
| */ |
| public static class CustomMetricProvider2 implements PropertyProvider { |
| private Map<String, String> providerProperties = null; |
| |
| public CustomMetricProvider2(Map<String, String> properties, Map<String, Metric> metrics) { |
| providerProperties = properties; |
| } |
| |
| @Override |
| public Set<Resource> populateResources(Set<Resource> resources, |
| Request request, Predicate predicate) throws SystemException { |
| for (Resource r : resources) { |
| r.setProperty("foo/type2/name", providerProperties.get("Type2.Metric.Name")); |
| } |
| return resources; |
| } |
| |
| @Override |
| public Set<String> checkPropertyIds(Set<String> propertyIds) { |
| return Collections.emptySet(); |
| } |
| } |
| |
| /** |
| * Test singleton accessor. Public since instantiated via reflection. |
| */ |
| public static class CustomMetricProvider3 implements PropertyProvider { |
| private static CustomMetricProvider3 instance = null; |
| private Map<String, String> providerProperties = new HashMap<String, String>(); |
| |
| public static CustomMetricProvider3 getInstance(Map<String, String> properties, Map<String, Metric> metrics) { |
| if (null == instance) { |
| instance = new CustomMetricProvider3(); |
| instance.providerProperties.putAll(properties); |
| } |
| return instance; |
| } |
| |
| @Override |
| public Set<Resource> populateResources(Set<Resource> resources, |
| Request request, Predicate predicate) throws SystemException { |
| for (Resource r : resources) { |
| r.setProperty("foo/type3/name", providerProperties.get("Type3.Metric.Name")); |
| } |
| return resources; |
| } |
| |
| @Override |
| public Set<String> checkPropertyIds(Set<String> propertyIds) { |
| return Collections.emptySet(); |
| } |
| } |
| |
| public void testPopulateResources_HDP2() throws Exception { |
| |
| URLStreamProvider streamProvider = new TestStreamProvider(); |
| TestJMXProvider hostProvider = new TestJMXProvider(true); |
| JMXPropertyProviderTest.TestMetricHostProvider metricsHostProvider = new JMXPropertyProviderTest.TestMetricHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| hostProvider, |
| metricsHostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| // resourcemanager |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "RESOURCEMANAGER"); |
| resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); |
| |
| // request with an empty set should get all supported properties |
| Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet()); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| // see test/resources/resourcemanager_jmx.json for values |
| Assert.assertEquals(6, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AggregateContainersAllocated"))); |
| Assert.assertEquals(6, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AggregateContainersReleased"))); |
| Assert.assertEquals(8192, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AvailableMB"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AvailableVCores"))); |
| Assert.assertEquals(2, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AppsSubmitted"))); |
| |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumActiveNMs"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumDecommissionedNMs"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumLostNMs"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumUnhealthyNMs"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumRebootedNMs"))); |
| |
| Assert.assertEquals(932118528, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "HeapMemoryMax"))); |
| |
| //namenode |
| resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "NAMENODE"); |
| resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); |
| |
| // request with an empty set should get all supported properties |
| request = PropertyHelper.getReadRequest(Collections.<String>emptySet()); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| } |
| |
| public void testPopulateResources_HDP2_params() throws Exception { |
| TestStreamProvider streamProvider = new TestStreamProvider(); |
| TestJMXProvider hostProvider = new TestJMXProvider(false); |
| JMXPropertyProviderTest.TestMetricHostProvider metricsHostProvider = new JMXPropertyProviderTest.TestMetricHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| hostProvider, |
| metricsHostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "h1"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "RESOURCEMANAGER"); |
| resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); |
| |
| // request with an empty set should get all supported properties |
| Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet()); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| // see test/resources/resourcemanager_jmx.json for values |
| Assert.assertEquals(6, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AggregateContainersAllocated"))); |
| Assert.assertEquals(6, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AggregateContainersReleased"))); |
| Assert.assertEquals(8192, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AvailableMB"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AvailableVCores"))); |
| Assert.assertEquals(2, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AppsSubmitted"))); |
| |
| Assert.assertEquals(15, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AggregateContainersAllocated"))); |
| Assert.assertEquals(12, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AggregateContainersReleased"))); |
| Assert.assertEquals(8192, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AvailableMB"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AvailableVCores"))); |
| Assert.assertEquals(47, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AppsSubmitted"))); |
| |
| Assert.assertEquals(4, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AggregateContainersAllocated"))); |
| Assert.assertEquals(4, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AggregateContainersReleased"))); |
| Assert.assertEquals(6048, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AvailableMB"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AvailableVCores"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AppsSubmitted"))); |
| } |
| |
| |
| public void testPopulateResources_HDP2_params_singleProperty() throws Exception { |
| TestStreamProvider streamProvider = new TestStreamProvider(); |
| TestJMXProvider hostProvider = new TestJMXProvider(false); |
| JMXPropertyProviderTest.TestMetricHostProvider metricsHostProvider = new JMXPropertyProviderTest.TestMetricHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| hostProvider, |
| metricsHostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "h1"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "RESOURCEMANAGER"); |
| resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); |
| |
| // only ask for one property |
| Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>(); |
| Request request = PropertyHelper.getReadRequest(Collections.singleton("metrics/yarn/Queue/root/AvailableMB"), temporalInfoMap); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| // see test/resources/resourcemanager_jmx.json for values |
| Assert.assertEquals(8192, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AvailableMB"))); |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AvailableVCores"))); |
| } |
| |
| public void testPopulateResources_HDP2_params_category() throws Exception { |
| TestStreamProvider streamProvider = new TestStreamProvider(); |
| TestJMXProvider hostProvider = new TestJMXProvider(false); |
| JMXPropertyProviderTest.TestMetricHostProvider metricsHostProvider = new JMXPropertyProviderTest.TestMetricHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| hostProvider, |
| metricsHostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "h1"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "RESOURCEMANAGER"); |
| resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); |
| |
| // only ask for one property |
| Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>(); |
| Request request = PropertyHelper.getReadRequest(Collections.singleton("metrics/yarn/Queue"), temporalInfoMap); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| // see test/resources/resourcemanager_jmx.json for values |
| Assert.assertEquals(6, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AggregateContainersAllocated"))); |
| Assert.assertEquals(6, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AggregateContainersReleased"))); |
| Assert.assertEquals(8192, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AvailableMB"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AvailableVCores"))); |
| Assert.assertEquals(2, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AppsSubmitted"))); |
| |
| Assert.assertEquals(15, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AggregateContainersAllocated"))); |
| Assert.assertEquals(12, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AggregateContainersReleased"))); |
| Assert.assertEquals(8192, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AvailableMB"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AvailableVCores"))); |
| Assert.assertEquals(47, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AppsSubmitted"))); |
| |
| Assert.assertEquals(4, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AggregateContainersAllocated"))); |
| Assert.assertEquals(4, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AggregateContainersReleased"))); |
| Assert.assertEquals(6048, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AvailableMB"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AvailableVCores"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AppsSubmitted"))); |
| } |
| |
| public void testPopulateResources_HDP2_params_category2() throws Exception { |
| TestStreamProvider streamProvider = new TestStreamProvider(); |
| TestJMXProvider hostProvider = new TestJMXProvider(false); |
| JMXPropertyProviderTest.TestMetricHostProvider metricsHostProvider = new JMXPropertyProviderTest.TestMetricHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| hostProvider, |
| metricsHostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "h1"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "RESOURCEMANAGER"); |
| resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); |
| |
| // only ask for one property |
| Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>(); |
| Request request = PropertyHelper.getReadRequest(Collections.singleton("metrics/yarn/Queue/root/default"), temporalInfoMap); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| // see test/resources/resourcemanager_jmx.json for values |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AggregateContainersAllocated"))); |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AggregateContainersReleased"))); |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AvailableMB"))); |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AvailableVCores"))); |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root", "AppsSubmitted"))); |
| |
| Assert.assertEquals(15, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AggregateContainersAllocated"))); |
| Assert.assertEquals(12, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AggregateContainersReleased"))); |
| Assert.assertEquals(8192, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AvailableMB"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AvailableVCores"))); |
| Assert.assertEquals(47, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default", "AppsSubmitted"))); |
| |
| Assert.assertEquals(99, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default/sub_queue", "AggregateContainersAllocated"))); |
| Assert.assertEquals(98, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default/sub_queue", "AggregateContainersReleased"))); |
| Assert.assertEquals(9898, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default/sub_queue", "AvailableMB"))); |
| Assert.assertEquals(2, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default/sub_queue", "AvailableVCores"))); |
| Assert.assertEquals(97, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/default/sub_queue", "AppsSubmitted"))); |
| |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AggregateContainersAllocated"))); |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AggregateContainersReleased"))); |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AvailableMB"))); |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AvailableVCores"))); |
| Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/Queue/root/second_queue", "AppsSubmitted"))); |
| } |
| |
| public void testPopulateResources_jmx_JournalNode() throws Exception { |
| TestStreamProvider streamProvider = new TestStreamProvider(); |
| TestJMXProvider hostProvider = new TestJMXProvider(false); |
| JMXPropertyProviderTest.TestMetricHostProvider metricsHostProvider = new JMXPropertyProviderTest.TestMetricHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| hostProvider, |
| metricsHostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "JOURNALNODE"); |
| resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); |
| |
| // request with an empty set should get all supported properties |
| Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet()); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| // see test/resources/hdfs_journalnode_jmx.json for values |
| Assert.assertEquals(1377795104272L, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "startTime"))); |
| Assert.assertEquals(954466304, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "HeapMemoryMax"))); |
| Assert.assertEquals(14569736, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "HeapMemoryUsed"))); |
| Assert.assertEquals(136314880, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "NonHeapMemoryMax"))); |
| Assert.assertEquals(24993392, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "NonHeapMemoryUsed"))); |
| Assert.assertEquals(9100, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "gcCount"))); |
| Assert.assertEquals(31641, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "gcTimeMillis"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "logError"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "logFatal"))); |
| Assert.assertEquals(4163, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "logInfo"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "logWarn"))); |
| Assert.assertEquals(29.8125, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "memHeapCommittedM"))); |
| Assert.assertEquals(13.894783, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "memHeapUsedM"))); |
| Assert.assertEquals(24.9375, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "memNonHeapCommittedM"))); |
| Assert.assertEquals(23.835556, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "memNonHeapUsedM"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "threadsBlocked"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "threadsNew"))); |
| Assert.assertEquals(6, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "threadsRunnable"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "threadsTerminated"))); |
| Assert.assertEquals(3, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "threadsTimedWaiting"))); |
| Assert.assertEquals(8, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/jvm", "threadsWaiting"))); |
| |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "NumOpenConnections"))); |
| Assert.assertEquals(4928861, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "ReceivedBytes"))); |
| Assert.assertEquals(13.211112159230245, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "RpcProcessingTime_avg_time"))); |
| Assert.assertEquals(25067, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "RpcProcessingTime_num_ops"))); |
| Assert.assertEquals(0.19686821997924706, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "RpcQueueTime_avg_time"))); |
| Assert.assertEquals(25067, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "RpcQueueTime_num_ops"))); |
| Assert.assertEquals(6578899, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "SentBytes"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "callQueueLen"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "rpcAuthenticationFailures"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "rpcAuthenticationSuccesses"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "rpcAuthorizationFailures"))); |
| Assert.assertEquals(12459, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpc", "rpcAuthorizationSuccesses"))); |
| |
| Assert.assertEquals(2, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "getJournalState_num_ops"))); |
| Assert.assertEquals(0.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "getJournalState_avg_time"))); |
| Assert.assertEquals(2, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "newEpoch_num_ops"))); |
| Assert.assertEquals(60.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "newEpoch_avg_time"))); |
| Assert.assertEquals(4129, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "startLogSegment_num_ops"))); |
| Assert.assertEquals(38.25951359084413, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "startLogSegment_avg_time"))); |
| Assert.assertEquals(8265, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "journal_num_ops"))); |
| Assert.assertEquals(2.1832618025751187, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "journal_avg_time"))); |
| Assert.assertEquals(4129, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "finalizeLogSegment_num_ops"))); |
| Assert.assertEquals(11.575679542203101, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "finalizeLogSegment_avg_time"))); |
| Assert.assertEquals(8536, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "getEditLogManifest_num_ops"))); |
| Assert.assertEquals(12.55427859318747, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "getEditLogManifest_avg_time"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "prepareRecovery_num_ops"))); |
| Assert.assertEquals(10.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "prepareRecovery_avg_time"))); |
| Assert.assertEquals(1, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "acceptRecovery_num_ops"))); |
| Assert.assertEquals(30.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/rpcdetailed", "acceptRecovery_avg_time"))); |
| |
| Assert.assertEquals(0.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/ugi", "loginFailure_avg_time"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/ugi", "loginFailure_num_ops"))); |
| Assert.assertEquals(0.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/ugi", "loginSuccess_avg_time"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/ugi", "loginSuccess_num_ops"))); |
| |
| Assert.assertEquals("{\"mycluster\":{\"Formatted\":\"true\"}}", resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode", "journalsStatus"))); |
| |
| Assert.assertEquals(2, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs60s_num_ops"))); |
| Assert.assertEquals(988, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs60s50thPercentileLatencyMicros"))); |
| Assert.assertEquals(988, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs60s75thPercentileLatencyMicros"))); |
| Assert.assertEquals(988, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs60s90thPercentileLatencyMicros"))); |
| Assert.assertEquals(988, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs60s95thPercentileLatencyMicros"))); |
| Assert.assertEquals(988, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs60s99thPercentileLatencyMicros"))); |
| Assert.assertEquals(4, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs300s_num_ops"))); |
| Assert.assertEquals(1027, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs300s50thPercentileLatencyMicros"))); |
| Assert.assertEquals(1037, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs300s75thPercentileLatencyMicros"))); |
| Assert.assertEquals(1037, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs300s90thPercentileLatencyMicros"))); |
| Assert.assertEquals(1037, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs300s95thPercentileLatencyMicros"))); |
| Assert.assertEquals(1037, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs300s99thPercentileLatencyMicros"))); |
| Assert.assertEquals(60, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs3600s_num_ops"))); |
| Assert.assertEquals(1122, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs3600s50thPercentileLatencyMicros"))); |
| Assert.assertEquals(1344, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs3600s75thPercentileLatencyMicros"))); |
| Assert.assertEquals(1554, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs3600s90thPercentileLatencyMicros"))); |
| Assert.assertEquals(1980, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs3600s95thPercentileLatencyMicros"))); |
| Assert.assertEquals(8442, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "syncs3600s99thPercentileLatencyMicros"))); |
| Assert.assertEquals(8265, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "batchesWritten"))); |
| Assert.assertEquals(8265, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "txnsWritten"))); |
| Assert.assertEquals(107837, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "bytesWritten"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "batchesWrittenWhileLagging"))); |
| Assert.assertEquals(2, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "lastPromisedEpoch"))); |
| Assert.assertEquals(2, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "lastWriterEpoch"))); |
| Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "currentLagTxns"))); |
| Assert.assertEquals(8444, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "lastWrittenTxId"))); |
| } |
| |
| public void testPopulateResources_jmx_Storm() throws Exception { |
| // Adjust stack version for cluster |
| Cluster cluster = clusters.getCluster("c2"); |
| cluster.setDesiredStackVersion(new StackId("HDP-2.1.1")); |
| |
| TestStreamProvider streamProvider = new TestStreamProvider(); |
| TestJMXProvider hostProvider = new TestJMXProvider(false); |
| TestGangliaHostProvider gangliaHostProvider = new TestGangliaHostProvider(); |
| JMXPropertyProviderTest.TestMetricHostProvider metricsHostProvider = new JMXPropertyProviderTest.TestMetricHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| hostProvider, |
| gangliaHostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "STORM_REST_API"); |
| resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); |
| |
| // request with an empty set should get all supported properties |
| Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet()); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| // see test/resources/storm_rest_api_jmx.json for values |
| Assert.assertEquals(28.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "tasks.total"))); |
| Assert.assertEquals(8.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "slots.total"))); |
| Assert.assertEquals(5.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "slots.free"))); |
| Assert.assertEquals(2.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "supervisors"))); |
| Assert.assertEquals(28.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "executors.total"))); |
| Assert.assertEquals(3.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "slots.used"))); |
| Assert.assertEquals(1.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "topologies"))); |
| Assert.assertEquals(4637.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "nimbus.uptime"))); |
| } |
| |
| public void testPopulateResources_NoRegionServer() throws Exception { |
| TestStreamProvider streamProvider = new TestStreamProvider(); |
| TestJMXProvider hostProvider = new TestJMXProvider(false); |
| JMXPropertyProviderTest.TestMetricHostProvider metricsHostProvider = new JMXPropertyProviderTest.TestMetricHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| hostProvider, |
| metricsHostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| null, |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "HBASE_REGIONSERVER"); |
| resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); |
| |
| int preSize = resource.getPropertiesMap().size(); |
| |
| // request with an empty set should get all supported properties |
| Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet()); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| Assert.assertEquals(preSize, resource.getPropertiesMap().size()); |
| } |
| |
| public void testPopulateResources_HBaseMaster2() throws Exception { |
| TestStreamProvider streamProvider = new TestStreamProvider(); |
| TestJMXProvider hostProvider = new TestJMXProvider(false); |
| JMXPropertyProviderTest.TestMetricHostProvider metricsHostProvider = new JMXPropertyProviderTest.TestMetricHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| hostProvider, |
| metricsHostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "HBASE_MASTER"); |
| resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); |
| |
| |
| // request with an empty set should get all supported properties |
| Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet()); |
| |
| Set<Resource> res = propertyProvider.populateResources(Collections.singleton(resource), request, null); |
| Assert.assertEquals(1, res.size()); |
| |
| Map<String, Map<String, Object>> map = res.iterator().next().getPropertiesMap(); |
| |
| Assert.assertTrue(map.containsKey("metrics/hbase/master")); |
| // uses 'tag.isActiveMaster' (name with a dot) |
| Assert.assertTrue(map.get("metrics/hbase/master").containsKey("IsActiveMaster")); |
| } |
| |
| public void testPopulateResources_params_category5() throws Exception { |
| org.apache.ambari.server.controller.metrics.ganglia.TestStreamProvider streamProvider = |
| new org.apache.ambari.server.controller.metrics.ganglia.TestStreamProvider("temporal_ganglia_data_yarn_queues.txt"); |
| |
| TestJMXProvider jmxHostProvider = new TestJMXProvider(true); |
| TestGangliaHostProvider hostProvider = new TestGangliaHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| jmxHostProvider, |
| hostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "dev01.ambari.apache.org"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "RESOURCEMANAGER"); |
| |
| String RM_CATEGORY_1 = "metrics/yarn/Queue/root/default"; |
| String RM_AVAILABLE_MEMORY_PROPERTY = PropertyHelper.getPropertyId(RM_CATEGORY_1, "AvailableMB"); |
| |
| // only ask for one property |
| Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>(); |
| temporalInfoMap.put(RM_CATEGORY_1, new TemporalInfoImpl(10L, 20L, 1L)); |
| |
| Request request = PropertyHelper.getReadRequest(Collections.singleton(RM_CATEGORY_1), temporalInfoMap); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| Assert.assertTrue(PropertyHelper.getProperties(resource).size() > 2); |
| Assert.assertNotNull(resource.getPropertyValue(RM_AVAILABLE_MEMORY_PROPERTY)); |
| } |
| |
| public void testPopulateResources_ganglia_JournalNode() throws Exception { |
| org.apache.ambari.server.controller.metrics.ganglia.TestStreamProvider streamProvider = |
| new org.apache.ambari.server.controller.metrics.ganglia.TestStreamProvider("journalnode_ganglia_data.txt"); |
| |
| TestJMXProvider jmxHostProvider = new TestJMXProvider(true); |
| TestGangliaHostProvider hostProvider = new TestGangliaHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| jmxHostProvider, |
| hostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "ip-10-39-113-33.ec2.internal"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "JOURNALNODE"); |
| |
| |
| Object[][] testData = { |
| {"metrics", "boottime", 1378290058.0}, |
| {"metrics/cpu", "cpu_aidle", 0.0}, |
| {"metrics/cpu", "cpu_idle", 88.2}, |
| {"metrics/cpu", "cpu_nice", 0.0}, |
| {"metrics/cpu", "cpu_num", 2.0}, |
| {"metrics/cpu", "cpu_speed", 3583.0}, |
| {"metrics/cpu", "cpu_system", 8.4}, |
| {"metrics/cpu", "cpu_user", 3.3}, |
| {"metrics/cpu", "cpu_wio", 0.1}, |
| {"metrics/disk", "disk_free", 92.428}, |
| {"metrics/disk", "disk_total", 101.515}, |
| {"metrics/disk", "part_max_used", 12.8}, |
| {"metrics/load", "load_fifteen", 0.026}, |
| {"metrics/load", "load_five", 0.114}, |
| {"metrics/load", "load_one", 0.226}, |
| {"metrics/memory", "mem_buffers", 129384.0}, |
| {"metrics/memory", "mem_cached", 589576.0}, |
| {"metrics/memory", "mem_free", 1365496.0}, |
| {"metrics/memory", "mem_shared", 0.0}, |
| {"metrics/memory", "mem_total", 4055144.0}, |
| {"metrics/memory", "swap_free", 4128760.0}, |
| {"metrics/memory", "swap_total", 4128760.0}, |
| {"metrics/network", "bytes_in", 22547.48}, |
| {"metrics/network", "bytes_out", 5772.33}, |
| {"metrics/network", "pkts_in", 24.0}, |
| {"metrics/network", "pkts_out", 35.4}, |
| {"metrics/process", "proc_run", 4.0}, |
| {"metrics/process", "proc_total", 657.0}, |
| {"metrics/dfs/journalNode", "batchesWritten", 0.0}, |
| {"metrics/dfs/journalNode", "batchesWrittenWhileLagging", 0.0}, |
| {"metrics/dfs/journalNode", "bytesWritten", 0.0}, |
| {"metrics/dfs/journalNode", "currentLagTxns", 0.0}, |
| {"metrics/dfs/journalNode", "lastPromisedEpoch", 5.0}, |
| {"metrics/dfs/journalNode", "lastWriterEpoch", 5.0}, |
| {"metrics/dfs/journalNode", "lastWrittenTxId", 613.0}, |
| {"metrics/dfs/journalNode", "syncs60s50thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs60s75thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs60s90thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs60s95thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs60s99thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs60s_num_ops", 0.0}, |
| {"metrics/dfs/journalNode", "syncs300s50thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs300s75thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs300s90thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs300s95thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs300s99thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs300s_num_ops", 0.0}, |
| {"metrics/dfs/journalNode", "syncs3600s50thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs3600s75thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs3600s90thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs3600s95thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs3600s99thPercentileLatencyMicros", 0.0}, |
| {"metrics/dfs/journalNode", "syncs3600s_num_ops", 0.0}, |
| {"metrics/dfs/journalNode", "txnsWritten", 0.0} |
| }; |
| |
| Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>(); |
| Set<String> properties = new LinkedHashSet<String>(); |
| |
| for (Object[] row : testData) { |
| properties.add(PropertyHelper.getPropertyId(row[0].toString(), row[1].toString())); |
| } |
| |
| Request request = PropertyHelper.getReadRequest(properties, temporalInfoMap); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| Map<String, Object> p = PropertyHelper.getProperties(resource); |
| |
| for (String key : p.keySet()) { |
| if (!properties.contains(key)) { |
| System.out.printf(key); |
| } |
| } |
| |
| // size + properties defined before "Object[][] testData ... " above |
| Assert.assertEquals(properties.size() + 3, PropertyHelper.getProperties(resource).size()); |
| |
| int i = 0; |
| for (String property : properties) { |
| Assert.assertEquals(testData[i++][2], resource.getPropertyValue(property)); |
| } |
| } |
| |
| public void testPopulateResources_resourcemanager_clustermetrics() throws Exception { |
| |
| String[] metrics = new String[]{ |
| "metrics/yarn/ClusterMetrics/NumActiveNMs", |
| "metrics/yarn/ClusterMetrics/NumDecommissionedNMs", |
| "metrics/yarn/ClusterMetrics/NumLostNMs", |
| "metrics/yarn/ClusterMetrics/NumUnhealthyNMs", |
| "metrics/yarn/ClusterMetrics/NumRebootedNMs" |
| }; |
| |
| org.apache.ambari.server.controller.metrics.ganglia.TestStreamProvider streamProvider = |
| new org.apache.ambari.server.controller.metrics.ganglia.TestStreamProvider("yarn_ganglia_data.txt"); |
| |
| TestJMXProvider jmxHostProvider = new TestJMXProvider(true); |
| TestGangliaHostProvider hostProvider = new TestGangliaHostProvider(); |
| TestGangliaServiceProvider serviceProvider = new TestGangliaServiceProvider(); |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.HostComponent, |
| jmxHostProvider, |
| hostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| for (String metric : metrics) { |
| Resource resource = new ResourceImpl(Resource.Type.HostComponent); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "ip-10-39-113-33.ec2.internal"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "RESOURCEMANAGER"); |
| |
| // only ask for one property |
| Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>(); |
| temporalInfoMap.put(metric, new TemporalInfoImpl(10L, 20L, 1L)); |
| Request request = PropertyHelper.getReadRequest(Collections.singleton(metric), temporalInfoMap); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| Assert.assertEquals(4, PropertyHelper.getProperties(resource).size()); |
| Assert.assertNotNull(resource.getPropertyValue(metric)); |
| |
| } |
| |
| } |
| |
| public void testPopulateResourcesWithAggregateFunctionMetrics() throws Exception { |
| |
| String metric = "metrics/rpc/NumOpenConnections._sum"; |
| |
| org.apache.ambari.server.controller.metrics.ganglia.TestStreamProvider streamProvider = |
| new org.apache.ambari.server.controller.metrics.ganglia.TestStreamProvider("ams/aggregate_component_metric.json"); |
| injectCacheEntryFactoryWithStreamProvider(streamProvider); |
| TestJMXProvider jmxHostProvider = new TestJMXProvider(true); |
| TestGangliaHostProvider hostProvider = new TestGangliaHostProvider(); |
| MetricsServiceProvider serviceProvider = new MetricsServiceProvider() { |
| @Override |
| public MetricsService getMetricsServiceType() { |
| return MetricsService.TIMELINE_METRICS; |
| } |
| }; |
| |
| StackDefinedPropertyProvider propertyProvider = new StackDefinedPropertyProvider( |
| Resource.Type.Component, |
| jmxHostProvider, |
| hostProvider, |
| serviceProvider, |
| streamProvider, |
| PropertyHelper.getPropertyId("HostRoles", "cluster_name"), |
| PropertyHelper.getPropertyId("HostRoles", "host_name"), |
| PropertyHelper.getPropertyId("HostRoles", "component_name"), |
| PropertyHelper.getPropertyId("HostRoles", "state"), |
| new EmptyPropertyProvider(), |
| new EmptyPropertyProvider()); |
| |
| |
| Resource resource = new ResourceImpl(Resource.Type.Component); |
| |
| resource.setProperty("HostRoles/cluster_name", "c2"); |
| resource.setProperty("HostRoles/service_name", "HBASE"); |
| resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "HBASE_REGIONSERVER"); |
| |
| // only ask for one property |
| Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>(); |
| temporalInfoMap.put(metric, new TemporalInfoImpl(1429824611300L, 1429825241400L, 1L)); |
| Request request = PropertyHelper.getReadRequest(Collections.singleton(metric), temporalInfoMap); |
| |
| Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); |
| |
| Assert.assertEquals(4, PropertyHelper.getProperties(resource).size()); |
| Assert.assertNotNull(resource.getPropertyValue(metric)); |
| Number[][] metricsArray = (Number[][]) resource.getPropertyValue(metric); |
| Assert.assertEquals(32, metricsArray.length); |
| } |
| |
| /* Since streamProviders are not injected this hack becomes necessary */ |
| private void injectCacheEntryFactoryWithStreamProvider(org.apache.ambari.server.controller.metrics.ganglia.TestStreamProvider streamProvider) throws Exception { |
| Field field = TimelineMetricCacheEntryFactory.class.getDeclaredField("requestHelperForGets"); |
| field.setAccessible(true); |
| field.set(cacheEntryFactory, new MetricsRequestHelper(streamProvider)); |
| } |
| |
| public static class TestJMXProvider extends JMXPropertyProviderTest.TestJMXHostProvider { |
| |
| public TestJMXProvider(boolean unknownPort) { |
| super(unknownPort); |
| } |
| |
| @Override |
| public String getJMXRpcMetricTag(String clusterName, String componentName, String port) { |
| return "8020".equals(port) ? "client" : null; |
| } |
| } |
| } |