use of io.cdap.cdap.client.MetricsClient in project cdap by caskdata.
the class MetricsServiceMainTest method testMetricsService.
@Test
public void testMetricsService() throws Exception {
Injector injector = getServiceMainInstance(MetricsServiceMain.class).getInjector();
// make sure the metrics clean up service is running
MetricsCleanUpService service = injector.getInstance(MetricsCleanUpService.class);
Assert.assertTrue(service.isRunning());
// Publish some metrics via the MetricsCollectionService
MetricsCollectionService metricsCollectionService = injector.getInstance(MetricsCollectionService.class);
MetricsContext context = metricsCollectionService.getContext(ImmutableMap.of(Constants.Metrics.Tag.NAMESPACE, NamespaceId.SYSTEM.getNamespace(), Constants.Metrics.Tag.APP, "test"));
context.increment("name", 10);
// Discovery the location of metrics query service
DiscoveryServiceClient discoveryServiceClient = injector.getInstance(DiscoveryServiceClient.class);
Discoverable metricsEndpoint = new RandomEndpointStrategy(() -> discoveryServiceClient.discover(Constants.Service.METRICS)).pick(5, TimeUnit.SECONDS);
Assert.assertNotNull(metricsEndpoint);
// Try to query the metrics
InetSocketAddress metricsAddr = metricsEndpoint.getSocketAddress();
ConnectionConfig connConfig = ConnectionConfig.builder().setSSLEnabled(URIScheme.HTTPS.isMatch(metricsEndpoint)).setHostname(metricsAddr.getHostName()).setPort(metricsAddr.getPort()).build();
MetricsClient metricsClient = new MetricsClient(ClientConfig.builder().setVerifySSLCert(false).setConnectionConfig(connConfig).build());
// Need to poll because metrics processing is async.
Tasks.waitFor(10L, () -> {
MetricQueryResult result = metricsClient.query(context.getTags(), "system.name");
MetricQueryResult.TimeSeries[] series = result.getSeries();
if (series.length == 0) {
return 0L;
}
return series[0].getData()[0].getValue();
}, 10, TimeUnit.SECONDS, 1, TimeUnit.SECONDS);
MetricsSystemClient metricsSystemClient = injector.getInstance(RemoteMetricsSystemClient.class);
metricsSystemClient.delete(new MetricDeleteQuery(0, Integer.MAX_VALUE, Collections.emptySet(), context.getTags(), new ArrayList<>(context.getTags().keySet())));
Tasks.waitFor(0L, () -> {
MetricQueryResult result = metricsClient.query(context.getTags(), "system.name");
MetricQueryResult.TimeSeries[] series = result.getSeries();
if (series.length == 0) {
return 0L;
}
return series[0].getData()[0].getValue();
}, 10, TimeUnit.SECONDS, 1, TimeUnit.SECONDS);
}
Aggregations