Java源码示例:org.apache.flink.runtime.rest.messages.job.metrics.AggregatedMetric
示例1
@Test
public void testListMetrics() throws Exception {
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
Collections.emptyMap()
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
List<String> availableMetrics = response.getMetrics().stream()
.map(AggregatedMetric::getId)
.sorted()
.collect(Collectors.toList());
assertEquals(2, availableMetrics.size());
assertEquals("abc.metric1", availableMetrics.get(0));
assertEquals("abc.metric2", availableMetrics.get(1));
}
示例2
@Test
public void testDefaultAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(1.0, aggregatedMetric.getMin(), 0.1);
assertEquals(3.0, aggregatedMetric.getMax(), 0.1);
assertEquals(2.0, aggregatedMetric.getAvg(), 0.1);
assertEquals(4.0, aggregatedMetric.getSum(), 0.1);
}
示例3
@Test
public void testListMetrics() throws Exception {
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
Collections.emptyMap()
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
List<String> availableMetrics = response.getMetrics().stream()
.map(AggregatedMetric::getId)
.sorted()
.collect(Collectors.toList());
assertEquals(2, availableMetrics.size());
assertEquals("abc.metric1", availableMetrics.get(0));
assertEquals("abc.metric2", availableMetrics.get(1));
}
示例4
@Test
public void testDefaultAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(1.0, aggregatedMetric.getMin(), 0.1);
assertEquals(3.0, aggregatedMetric.getMax(), 0.1);
assertEquals(2.0, aggregatedMetric.getAvg(), 0.1);
assertEquals(4.0, aggregatedMetric.getSum(), 0.1);
}
示例5
@Test
public void testListMetrics() throws Exception {
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
Collections.emptyMap()
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
List<String> availableMetrics = response.getMetrics().stream()
.map(AggregatedMetric::getId)
.sorted()
.collect(Collectors.toList());
assertEquals(2, availableMetrics.size());
assertEquals("abc.metric1", availableMetrics.get(0));
assertEquals("abc.metric2", availableMetrics.get(1));
}
示例6
@Test
public void testDefaultAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(1.0, aggregatedMetric.getMin(), 0.1);
assertEquals(3.0, aggregatedMetric.getMax(), 0.1);
assertEquals(2.0, aggregatedMetric.getAvg(), 0.1);
assertEquals(4.0, aggregatedMetric.getSum(), 0.1);
}
示例7
/**
* Extracts and aggregates all requested metrics from the given metric stores, and maps the result to a JSON string.
*
* @param stores available metrics
* @param requestedMetrics ids of requested metrics
* @param requestedAggregationsFactories requested aggregations
* @return JSON string containing the requested metrics
*/
private AggregatedMetricsResponseBody getAggregatedMetricValues(
Collection<? extends MetricStore.ComponentMetricStore> stores,
List<String> requestedMetrics,
MetricAccumulatorFactory requestedAggregationsFactories) {
Collection<AggregatedMetric> aggregatedMetrics = new ArrayList<>(requestedMetrics.size());
for (String requestedMetric : requestedMetrics) {
final Collection<Double> values = new ArrayList<>(stores.size());
try {
for (MetricStore.ComponentMetricStore store : stores) {
String stringValue = store.metrics.get(requestedMetric);
if (stringValue != null) {
values.add(Double.valueOf(stringValue));
}
}
} catch (NumberFormatException nfe) {
log.warn("The metric {} is not numeric and can't be aggregated.", requestedMetric, nfe);
// metric is not numeric so we can't perform aggregations => ignore it
continue;
}
if (!values.isEmpty()) {
Iterator<Double> valuesIterator = values.iterator();
MetricAccumulator acc = requestedAggregationsFactories.get(requestedMetric, valuesIterator.next());
valuesIterator.forEachRemaining(acc::add);
aggregatedMetrics.add(acc.get());
} else {
return new AggregatedMetricsResponseBody(Collections.emptyList());
}
}
return new AggregatedMetricsResponseBody(aggregatedMetrics);
}
示例8
AggregatedMetric get() {
return new AggregatedMetric(
metricName,
min == null ? null : min.getValue(),
max == null ? null : max.getValue(),
avg == null ? null : avg.getValue(),
sum == null ? null : sum.getValue()
);
}
示例9
@Test
public void testMinAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("min"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(1.0, aggregatedMetric.getMin(), 0.1);
assertNull(aggregatedMetric.getMax());
assertNull(aggregatedMetric.getSum());
assertNull(aggregatedMetric.getAvg());
}
示例10
@Test
public void testMaxAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("max"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(3.0, aggregatedMetric.getMax(), 0.1);
assertNull(aggregatedMetric.getMin());
assertNull(aggregatedMetric.getSum());
assertNull(aggregatedMetric.getAvg());
}
示例11
@Test
public void testSumAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("sum"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(4.0, aggregatedMetric.getSum(), 0.1);
assertNull(aggregatedMetric.getMin());
assertNull(aggregatedMetric.getMax());
assertNull(aggregatedMetric.getAvg());
}
示例12
@Test
public void testAvgAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("avg"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(2.0, aggregatedMetric.getAvg(), 0.1);
assertNull(aggregatedMetric.getMin());
assertNull(aggregatedMetric.getMax());
assertNull(aggregatedMetric.getSum());
}
示例13
@Test
public void testMultipleAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Arrays.asList("min", "max", "avg"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(1.0, aggregatedMetric.getMin(), 0.1);
assertEquals(3.0, aggregatedMetric.getMax(), 0.1);
assertEquals(2.0, aggregatedMetric.getAvg(), 0.1);
assertNull(aggregatedMetric.getSum());
}
示例14
/**
* Extracts and aggregates all requested metrics from the given metric stores, and maps the result to a JSON string.
*
* @param stores available metrics
* @param requestedMetrics ids of requested metrics
* @param requestedAggregationsFactories requested aggregations
* @return JSON string containing the requested metrics
*/
private AggregatedMetricsResponseBody getAggregatedMetricValues(
Collection<? extends MetricStore.ComponentMetricStore> stores,
List<String> requestedMetrics,
MetricAccumulatorFactory requestedAggregationsFactories) {
Collection<AggregatedMetric> aggregatedMetrics = new ArrayList<>(requestedMetrics.size());
for (String requestedMetric : requestedMetrics) {
final Collection<Double> values = new ArrayList<>(stores.size());
try {
for (MetricStore.ComponentMetricStore store : stores) {
String stringValue = store.metrics.get(requestedMetric);
if (stringValue != null) {
values.add(Double.valueOf(stringValue));
}
}
} catch (NumberFormatException nfe) {
log.warn("The metric {} is not numeric and can't be aggregated.", requestedMetric, nfe);
// metric is not numeric so we can't perform aggregations => ignore it
continue;
}
if (!values.isEmpty()) {
Iterator<Double> valuesIterator = values.iterator();
MetricAccumulator acc = requestedAggregationsFactories.get(requestedMetric, valuesIterator.next());
valuesIterator.forEachRemaining(acc::add);
aggregatedMetrics.add(acc.get());
} else {
return new AggregatedMetricsResponseBody(Collections.emptyList());
}
}
return new AggregatedMetricsResponseBody(aggregatedMetrics);
}
示例15
AggregatedMetric get() {
return new AggregatedMetric(
metricName,
min == null ? null : min.getValue(),
max == null ? null : max.getValue(),
avg == null ? null : avg.getValue(),
sum == null ? null : sum.getValue()
);
}
示例16
@Test
public void testMinAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("min"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(1.0, aggregatedMetric.getMin(), 0.1);
assertNull(aggregatedMetric.getMax());
assertNull(aggregatedMetric.getSum());
assertNull(aggregatedMetric.getAvg());
}
示例17
@Test
public void testMaxAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("max"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(3.0, aggregatedMetric.getMax(), 0.1);
assertNull(aggregatedMetric.getMin());
assertNull(aggregatedMetric.getSum());
assertNull(aggregatedMetric.getAvg());
}
示例18
@Test
public void testSumAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("sum"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(4.0, aggregatedMetric.getSum(), 0.1);
assertNull(aggregatedMetric.getMin());
assertNull(aggregatedMetric.getMax());
assertNull(aggregatedMetric.getAvg());
}
示例19
@Test
public void testAvgAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("avg"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(2.0, aggregatedMetric.getAvg(), 0.1);
assertNull(aggregatedMetric.getMin());
assertNull(aggregatedMetric.getMax());
assertNull(aggregatedMetric.getSum());
}
示例20
@Test
public void testMultipleAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Arrays.asList("min", "max", "avg"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(1.0, aggregatedMetric.getMin(), 0.1);
assertEquals(3.0, aggregatedMetric.getMax(), 0.1);
assertEquals(2.0, aggregatedMetric.getAvg(), 0.1);
assertNull(aggregatedMetric.getSum());
}
示例21
/**
* Extracts and aggregates all requested metrics from the given metric stores, and maps the result to a JSON string.
*
* @param stores available metrics
* @param requestedMetrics ids of requested metrics
* @param requestedAggregationsFactories requested aggregations
* @return JSON string containing the requested metrics
*/
private AggregatedMetricsResponseBody getAggregatedMetricValues(
Collection<? extends MetricStore.ComponentMetricStore> stores,
List<String> requestedMetrics,
MetricAccumulatorFactory requestedAggregationsFactories) {
Collection<AggregatedMetric> aggregatedMetrics = new ArrayList<>(requestedMetrics.size());
for (String requestedMetric : requestedMetrics) {
final Collection<Double> values = new ArrayList<>(stores.size());
try {
for (MetricStore.ComponentMetricStore store : stores) {
String stringValue = store.metrics.get(requestedMetric);
if (stringValue != null) {
values.add(Double.valueOf(stringValue));
}
}
} catch (NumberFormatException nfe) {
log.warn("The metric {} is not numeric and can't be aggregated.", requestedMetric, nfe);
// metric is not numeric so we can't perform aggregations => ignore it
continue;
}
if (!values.isEmpty()) {
Iterator<Double> valuesIterator = values.iterator();
MetricAccumulator acc = requestedAggregationsFactories.get(requestedMetric, valuesIterator.next());
valuesIterator.forEachRemaining(acc::add);
aggregatedMetrics.add(acc.get());
} else {
return new AggregatedMetricsResponseBody(Collections.emptyList());
}
}
return new AggregatedMetricsResponseBody(aggregatedMetrics);
}
示例22
AggregatedMetric get() {
return new AggregatedMetric(
metricName,
min == null ? null : min.getValue(),
max == null ? null : max.getValue(),
avg == null ? null : avg.getValue(),
sum == null ? null : sum.getValue()
);
}
示例23
@Test
public void testMinAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("min"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(1.0, aggregatedMetric.getMin(), 0.1);
assertNull(aggregatedMetric.getMax());
assertNull(aggregatedMetric.getSum());
assertNull(aggregatedMetric.getAvg());
}
示例24
@Test
public void testMaxAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("max"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(3.0, aggregatedMetric.getMax(), 0.1);
assertNull(aggregatedMetric.getMin());
assertNull(aggregatedMetric.getSum());
assertNull(aggregatedMetric.getAvg());
}
示例25
@Test
public void testSumAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("sum"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(4.0, aggregatedMetric.getSum(), 0.1);
assertNull(aggregatedMetric.getMin());
assertNull(aggregatedMetric.getMax());
assertNull(aggregatedMetric.getAvg());
}
示例26
@Test
public void testAvgAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Collections.singletonList("avg"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(2.0, aggregatedMetric.getAvg(), 0.1);
assertNull(aggregatedMetric.getMin());
assertNull(aggregatedMetric.getMax());
assertNull(aggregatedMetric.getSum());
}
示例27
@Test
public void testMultipleAggregation() throws Exception {
Map<String, List<String>> queryParams = new HashMap<>(4);
queryParams.put("get", Collections.singletonList("abc.metric1"));
queryParams.put("agg", Arrays.asList("min", "max", "avg"));
HandlerRequest<EmptyRequestBody, P> request = new HandlerRequest<>(
EmptyRequestBody.getInstance(),
handler.getMessageHeaders().getUnresolvedMessageParameters(),
pathParameters,
queryParams
);
AggregatedMetricsResponseBody response = handler.handleRequest(request, MOCK_DISPATCHER_GATEWAY)
.get();
Collection<AggregatedMetric> aggregatedMetrics = response.getMetrics();
assertEquals(1, aggregatedMetrics.size());
AggregatedMetric aggregatedMetric = aggregatedMetrics.iterator().next();
assertEquals("abc.metric1", aggregatedMetric.getId());
assertEquals(1.0, aggregatedMetric.getMin(), 0.1);
assertEquals(3.0, aggregatedMetric.getMax(), 0.1);
assertEquals(2.0, aggregatedMetric.getAvg(), 0.1);
assertNull(aggregatedMetric.getSum());
}
示例28
@Override
protected CompletableFuture<AggregatedMetricsResponseBody> handleRequest(@Nonnull HandlerRequest<EmptyRequestBody, P> request, @Nonnull RestfulGateway gateway) throws RestHandlerException {
return CompletableFuture.supplyAsync(
() -> {
try {
fetcher.update();
List<String> requestedMetrics = request.getQueryParameter(MetricsFilterParameter.class);
List<MetricsAggregationParameter.AggregationMode> requestedAggregations = request.getQueryParameter(MetricsAggregationParameter.class);
MetricStore store = fetcher.getMetricStore();
Collection<? extends MetricStore.ComponentMetricStore> stores = getStores(store, request);
if (requestedMetrics.isEmpty()) {
Collection<String> list = getAvailableMetrics(stores);
return new AggregatedMetricsResponseBody(
list.stream()
.map(AggregatedMetric::new)
.collect(Collectors.toList())
);
}
DoubleAccumulator.DoubleMinimumFactory minimumFactory = null;
DoubleAccumulator.DoubleMaximumFactory maximumFactory = null;
DoubleAccumulator.DoubleAverageFactory averageFactory = null;
DoubleAccumulator.DoubleSumFactory sumFactory = null;
// by default we return all aggregations
if (requestedAggregations.isEmpty()) {
minimumFactory = DoubleAccumulator.DoubleMinimumFactory.get();
maximumFactory = DoubleAccumulator.DoubleMaximumFactory.get();
averageFactory = DoubleAccumulator.DoubleAverageFactory.get();
sumFactory = DoubleAccumulator.DoubleSumFactory.get();
} else {
for (MetricsAggregationParameter.AggregationMode aggregation : requestedAggregations) {
switch (aggregation) {
case MIN:
minimumFactory = DoubleAccumulator.DoubleMinimumFactory.get();
break;
case MAX:
maximumFactory = DoubleAccumulator.DoubleMaximumFactory.get();
break;
case AVG:
averageFactory = DoubleAccumulator.DoubleAverageFactory.get();
break;
case SUM:
sumFactory = DoubleAccumulator.DoubleSumFactory.get();
break;
default:
log.warn("Unsupported aggregation specified: {}", aggregation);
}
}
}
MetricAccumulatorFactory metricAccumulatorFactory = new MetricAccumulatorFactory(minimumFactory, maximumFactory, averageFactory, sumFactory);
return getAggregatedMetricValues(stores, requestedMetrics, metricAccumulatorFactory);
} catch (Exception e) {
log.warn("Could not retrieve metrics.", e);
throw new CompletionException(new RestHandlerException("Could not retrieve metrics.", HttpResponseStatus.INTERNAL_SERVER_ERROR));
}
},
executor);
}
示例29
@Override
protected CompletableFuture<AggregatedMetricsResponseBody> handleRequest(@Nonnull HandlerRequest<EmptyRequestBody, P> request, @Nonnull RestfulGateway gateway) throws RestHandlerException {
return CompletableFuture.supplyAsync(
() -> {
try {
fetcher.update();
List<String> requestedMetrics = request.getQueryParameter(MetricsFilterParameter.class);
List<MetricsAggregationParameter.AggregationMode> requestedAggregations = request.getQueryParameter(MetricsAggregationParameter.class);
MetricStore store = fetcher.getMetricStore();
Collection<? extends MetricStore.ComponentMetricStore> stores = getStores(store, request);
if (requestedMetrics.isEmpty()) {
Collection<String> list = getAvailableMetrics(stores);
return new AggregatedMetricsResponseBody(
list.stream()
.map(AggregatedMetric::new)
.collect(Collectors.toList())
);
}
DoubleAccumulator.DoubleMinimumFactory minimumFactory = null;
DoubleAccumulator.DoubleMaximumFactory maximumFactory = null;
DoubleAccumulator.DoubleAverageFactory averageFactory = null;
DoubleAccumulator.DoubleSumFactory sumFactory = null;
// by default we return all aggregations
if (requestedAggregations.isEmpty()) {
minimumFactory = DoubleAccumulator.DoubleMinimumFactory.get();
maximumFactory = DoubleAccumulator.DoubleMaximumFactory.get();
averageFactory = DoubleAccumulator.DoubleAverageFactory.get();
sumFactory = DoubleAccumulator.DoubleSumFactory.get();
} else {
for (MetricsAggregationParameter.AggregationMode aggregation : requestedAggregations) {
switch (aggregation) {
case MIN:
minimumFactory = DoubleAccumulator.DoubleMinimumFactory.get();
break;
case MAX:
maximumFactory = DoubleAccumulator.DoubleMaximumFactory.get();
break;
case AVG:
averageFactory = DoubleAccumulator.DoubleAverageFactory.get();
break;
case SUM:
sumFactory = DoubleAccumulator.DoubleSumFactory.get();
break;
default:
log.warn("Unsupported aggregation specified: {}", aggregation);
}
}
}
MetricAccumulatorFactory metricAccumulatorFactory = new MetricAccumulatorFactory(minimumFactory, maximumFactory, averageFactory, sumFactory);
return getAggregatedMetricValues(stores, requestedMetrics, metricAccumulatorFactory);
} catch (Exception e) {
log.warn("Could not retrieve metrics.", e);
throw new CompletionException(new RestHandlerException("Could not retrieve metrics.", HttpResponseStatus.INTERNAL_SERVER_ERROR));
}
},
executor);
}
示例30
@Override
protected CompletableFuture<AggregatedMetricsResponseBody> handleRequest(@Nonnull HandlerRequest<EmptyRequestBody, P> request, @Nonnull RestfulGateway gateway) throws RestHandlerException {
return CompletableFuture.supplyAsync(
() -> {
try {
fetcher.update();
List<String> requestedMetrics = request.getQueryParameter(MetricsFilterParameter.class);
List<MetricsAggregationParameter.AggregationMode> requestedAggregations = request.getQueryParameter(MetricsAggregationParameter.class);
MetricStore store = fetcher.getMetricStore();
Collection<? extends MetricStore.ComponentMetricStore> stores = getStores(store, request);
if (requestedMetrics.isEmpty()) {
Collection<String> list = getAvailableMetrics(stores);
return new AggregatedMetricsResponseBody(
list.stream()
.map(AggregatedMetric::new)
.collect(Collectors.toList())
);
}
DoubleAccumulator.DoubleMinimumFactory minimumFactory = null;
DoubleAccumulator.DoubleMaximumFactory maximumFactory = null;
DoubleAccumulator.DoubleAverageFactory averageFactory = null;
DoubleAccumulator.DoubleSumFactory sumFactory = null;
// by default we return all aggregations
if (requestedAggregations.isEmpty()) {
minimumFactory = DoubleAccumulator.DoubleMinimumFactory.get();
maximumFactory = DoubleAccumulator.DoubleMaximumFactory.get();
averageFactory = DoubleAccumulator.DoubleAverageFactory.get();
sumFactory = DoubleAccumulator.DoubleSumFactory.get();
} else {
for (MetricsAggregationParameter.AggregationMode aggregation : requestedAggregations) {
switch (aggregation) {
case MIN:
minimumFactory = DoubleAccumulator.DoubleMinimumFactory.get();
break;
case MAX:
maximumFactory = DoubleAccumulator.DoubleMaximumFactory.get();
break;
case AVG:
averageFactory = DoubleAccumulator.DoubleAverageFactory.get();
break;
case SUM:
sumFactory = DoubleAccumulator.DoubleSumFactory.get();
break;
default:
log.warn("Unsupported aggregation specified: {}", aggregation);
}
}
}
MetricAccumulatorFactory metricAccumulatorFactory = new MetricAccumulatorFactory(minimumFactory, maximumFactory, averageFactory, sumFactory);
return getAggregatedMetricValues(stores, requestedMetrics, metricAccumulatorFactory);
} catch (Exception e) {
log.warn("Could not retrieve metrics.", e);
throw new CompletionException(new RestHandlerException("Could not retrieve metrics.", HttpResponseStatus.INTERNAL_SERVER_ERROR));
}
},
executor);
}