CLUSTER_NAME_PROPERTY_ID,
HOST_NAME_PROPERTY_ID,
COMPONENT_NAME_PROPERTY_ID);
// namenode
Resource resource = new ResourceImpl(Resource.Type.HostComponent);
resource.setProperty(HOST_NAME_PROPERTY_ID, "domU-12-31-39-0E-34-E1.compute-1.internal");
resource.setProperty(COMPONENT_NAME_PROPERTY_ID, "DATANODE");
// only ask for one property
Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>();
temporalInfoMap.put(PROPERTY_ID, new TemporalInfoImpl(10L, 20L, 1L));
Request request = PropertyHelper.getReadRequest(Collections.singleton(PROPERTY_ID), temporalInfoMap);
Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size());
String expected = (configuration.isGangliaSSL() ? "https" : "http") +
"://domU-12-31-39-0E-34-E1.compute-1.internal/cgi-bin/rrd.py?c=HDPDataNode%2CHDPSlaves&h=domU-12-31-39-0E-34-E1.compute-1.internal&m=jvm.metrics.gcCount&s=10&e=20&r=1";
Assert.assertEquals(expected, streamProvider.getLastSpec());
Assert.assertEquals(3, PropertyHelper.getProperties(resource).size());
Assert.assertNotNull(resource.getPropertyValue(PROPERTY_ID));
// tasktracker
resource = new ResourceImpl(Resource.Type.HostComponent);
resource.setProperty(HOST_NAME_PROPERTY_ID, "domU-12-31-39-0E-34-E1.compute-1.internal");
resource.setProperty(COMPONENT_NAME_PROPERTY_ID, "TASKTRACKER");
// only ask for one property
temporalInfoMap = new HashMap<String, TemporalInfo>();
Set<String> properties = new HashSet<String>();
String shuffle_exceptions_caught = PropertyHelper.getPropertyId("metrics/mapred/shuffleOutput", "shuffle_exceptions_caught");
String shuffle_failed_outputs = PropertyHelper.getPropertyId("metrics/mapred/shuffleOutput", "shuffle_failed_outputs");
String shuffle_output_bytes = PropertyHelper.getPropertyId("metrics/mapred/shuffleOutput", "shuffle_output_bytes");
String shuffle_success_outputs = PropertyHelper.getPropertyId("metrics/mapred/shuffleOutput", "shuffle_success_outputs");
properties.add(shuffle_exceptions_caught);
properties.add(shuffle_failed_outputs);
properties.add(shuffle_output_bytes);
properties.add(shuffle_success_outputs);
request = PropertyHelper.getReadRequest(properties, temporalInfoMap);
temporalInfoMap.put(shuffle_exceptions_caught, new TemporalInfoImpl(10L, 20L, 1L));
temporalInfoMap.put(shuffle_failed_outputs, new TemporalInfoImpl(10L, 20L, 1L));
temporalInfoMap.put(shuffle_output_bytes, new TemporalInfoImpl(10L, 20L, 1L));
temporalInfoMap.put(shuffle_success_outputs, new TemporalInfoImpl(10L, 20L, 1L));
Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size());
List<String> metricsRegexes = new ArrayList<String>();
metricsRegexes.add("metrics/mapred/shuffleOutput/shuffle_exceptions_caught");
metricsRegexes.add("metrics/mapred/shuffleOutput/shuffle_failed_outputs");
metricsRegexes.add("metrics/mapred/shuffleOutput/shuffle_output_bytes");
metricsRegexes.add("metrics/mapred/shuffleOutput/shuffle_success_outputs");
String metricsList = getMetricsRegexes(metricsRegexes, gangliaPropertyIds, "TASKTRACKER");
URIBuilder expectedUri = new URIBuilder();
expectedUri.setScheme((configuration.isGangliaSSL() ? "https" : "http"));
expectedUri.setHost("domU-12-31-39-0E-34-E1.compute-1.internal");
expectedUri.setPath("/cgi-bin/rrd.py");
expectedUri.setParameter("c", "HDPTaskTracker,HDPSlaves");
expectedUri.setParameter("h", "domU-12-31-39-0E-34-E1.compute-1.internal");
expectedUri.setParameter("m", metricsList);
expectedUri.setParameter("s", "10");
expectedUri.setParameter("e", "20");
expectedUri.setParameter("r", "1");
URIBuilder actualUri = new URIBuilder(streamProvider.getLastSpec());
Assert.assertEquals(expectedUri.getScheme(), actualUri.getScheme());
Assert.assertEquals(expectedUri.getHost(), actualUri.getHost());
Assert.assertEquals(expectedUri.getPath(), actualUri.getPath());
Assert.assertTrue(isUrlParamsEquals(actualUri, expectedUri));
Assert.assertEquals(6, PropertyHelper.getProperties(resource).size());
Assert.assertNotNull(resource.getPropertyValue(shuffle_exceptions_caught));
Number[][] dataPoints = (Number[][]) resource.getPropertyValue(shuffle_exceptions_caught);
Assert.assertEquals(106, dataPoints.length);
for (int i = 0; i < dataPoints.length; ++i) {
Assert.assertEquals(i >=10 && i < 20 ? 7 : 0.0, dataPoints[i][0]);
Assert.assertEquals(360 * i + 1358434800, dataPoints[i][1]);
}
Assert.assertNotNull(resource.getPropertyValue(shuffle_failed_outputs));
Assert.assertNotNull(resource.getPropertyValue(shuffle_output_bytes));
Assert.assertNotNull(resource.getPropertyValue(shuffle_success_outputs));
}