diff --git a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/GaugeHandler.java b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/GaugeHandler.java index 2af2643b1..f0ff21830 100644 --- a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/GaugeHandler.java +++ b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/GaugeHandler.java @@ -148,8 +148,7 @@ public void createGaugeMetric( @ApiResponse(code = 204, message = "Query was successful, but no metrics definition is set."), @ApiResponse(code = 500, message = "Unexpected error occurred while fetching metric's definition.", response = ApiError.class) }) - public void getGaugeMetric(@Suspended final AsyncResponse asyncResponse, - @HeaderParam("tenantId") String tenantId, @PathParam("id") String id) { + public void getGaugeMetric(@Suspended final AsyncResponse asyncResponse, @PathParam("id") String id) { metricsService.findMetric(tenantId, MetricType.GAUGE, new MetricId(id)) .subscribe( @@ -233,10 +232,9 @@ public void addDataForMetric( @ApiParam(value = "List of datapoints containing timestamp and value", required = true) List data ) { - executeAsync(asyncResponse, () -> { - if (data == null) { - return ApiUtils.emptyPayload(); - } + if (data.isEmpty()) { + asyncResponse.resume(badRequest(new ApiError("Payload is empty"))); + } else { Gauge metric = new Gauge(tenantId, new MetricId(id)); metric.getData().addAll(data); Observable observable = metricsService.addGaugeData(Observable.just(metric)); @@ -254,7 +252,7 @@ public void addDataForMetric( @ApiResponse(code = 200, message = "Adding data succeeded."), @ApiResponse(code = 500, message = "Unexpected error happened while storing the data", response = ApiError.class) }) - public void addGaugeData(@Suspended final AsyncResponse asyncResponse, @HeaderParam("tenantId") String tenantId, + public void addGaugeData(@Suspended final AsyncResponse asyncResponse, @ApiParam(value = "List of metrics", required = true) List metrics) { if (metrics.isEmpty()) { diff --git a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/MetricHandler.java b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/MetricHandler.java index bdcf8fe71..a24291b93 100644 --- a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/MetricHandler.java +++ b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/MetricHandler.java @@ -17,9 +17,7 @@ package org.hawkular.metrics.api.jaxrs.handler; import static javax.ws.rs.core.MediaType.APPLICATION_JSON; - import static org.hawkular.metrics.api.jaxrs.filter.TenantFilter.TENANT_HEADER_NAME; -import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.badRequest; import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.executeAsync; import java.util.ArrayList; @@ -37,6 +35,8 @@ import javax.ws.rs.container.Suspended; import javax.ws.rs.core.Response; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.ApiOperation; import com.wordnik.swagger.annotations.ApiParam; @@ -106,8 +106,27 @@ public void addMetricsData( executeAsync(asyncResponse, () -> { if ((metricsRequest.getGaugeMetrics() == null || !metricsRequest.getGaugeMetrics().isEmpty()) && (metricsRequest.getAvailabilityMetrics() == null || metricsRequest.getAvailabilityMetrics() - .isEmpty())) { + .isEmpty())) { return Futures.immediateFuture(Response.ok().build()); } + List> simpleFuturesList = new ArrayList<>(); + + if (metricsRequest.getGaugeMetrics() != null && !metricsRequest.getGaugeMetrics().isEmpty()) { + metricsRequest.getGaugeMetrics().forEach(m -> m.setTenantId(tenantId)); + // TODO This needs to be fix + // Temporarily commented out to get it to compile as we midst of updating MetricsService + // to use rx.Observable instead of ListenableFuture + +// simpleFuturesList.add(metricsService.addGaugeData(metricsRequest.getGaugeMetrics())); + } + + if (metricsRequest.getAvailabilityMetrics() != null && !metricsRequest.getAvailabilityMetrics().isEmpty()) { + metricsRequest.getAvailabilityMetrics().forEach(m -> m.setTenantId(tenantId)); + simpleFuturesList.add(metricsService.addAvailabilityData(metricsRequest.getAvailabilityMetrics())); + } + + return Futures.transform(Futures.successfulAsList(simpleFuturesList), ApiUtils.MAP_LIST_VOID); + }); + } }