Skip to content

Commit

Permalink
HWKMETRICS-212 Eliminate duplicate methods in MetricsService
Browse files Browse the repository at this point in the history
Made MetricType and MetricId generic. As Enums cannot be generic,
I had to translate MetricType to the old style type safe enum.

Replaced all #addXXXData and #findXXXData with generic #addDataPoints
and #findDataPoints methods.

Removed calls to deprecated methods in core-impl
Remove unused Counter related classes
  • Loading branch information
tsegismont committed Aug 25, 2015
1 parent c614de3 commit e861996
Show file tree
Hide file tree
Showing 38 changed files with 747 additions and 892 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,18 @@ public static List<DataPoint<Double>> requestToGaugeDataPoints(List<GaugeDataPoi

public static Observable<Metric<Double>> requestToGauges(String tenantId, List<Gauge> gauges) {
return Observable.from(gauges).map(
g -> new Metric<>(new MetricId(tenantId, GAUGE, g.getId()), requestToGaugeDataPoints(g.getData())));
g -> new Metric<>(new MetricId<>(tenantId, GAUGE, g.getId()), requestToGaugeDataPoints(g.getData())));
}

public static Observable<Metric<Long>> requestToCounters(String tenantId, List<Counter> counters) {
return Observable.from(counters).map(
c -> new Metric<>(new MetricId(tenantId, COUNTER, c.getId()), requestToCounterDataPoints(c.getData())));
c -> new Metric<>(new MetricId<>(tenantId, COUNTER, c.getId()),
requestToCounterDataPoints(c.getData())));
}

public static Observable<Metric<AvailabilityType>> requestToAvailabilities(String tenantId,
List<Availability> avails) {
return Observable.from(avails).map(a -> new Metric<>(new MetricId(tenantId, AVAILABILITY, a.getId()),
return Observable.from(avails).map(a -> new Metric<>(new MetricId<>(tenantId, AVAILABILITY, a.getId()),
requestToAvailabilityDataPoints(a.getData())));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@
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.noContent;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.requestToAvailabilities;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.requestToAvailabilityDataPoints;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.valueToResponse;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.serverError;
import static org.hawkular.metrics.core.api.MetricType.AVAILABILITY;

import java.net.URI;
Expand Down Expand Up @@ -59,7 +60,6 @@
import org.hawkular.metrics.api.jaxrs.util.ApiUtils;
import org.hawkular.metrics.core.api.AvailabilityType;
import org.hawkular.metrics.core.api.Buckets;
import org.hawkular.metrics.core.api.DataPoint;
import org.hawkular.metrics.core.api.Metric;
import org.hawkular.metrics.core.api.MetricAlreadyExistsException;
import org.hawkular.metrics.core.api.MetricId;
Expand Down Expand Up @@ -110,7 +110,7 @@ public Response createAvailabilityMetric(
@Context UriInfo uriInfo
) {
URI location = uriInfo.getBaseUriBuilder().path("/availability/{id}").build(metricDefinition.getId());
Metric<?> metric = new Metric<DataPoint<?>>(new MetricId(tenantId, AVAILABILITY, metricDefinition.getId()),
Metric<AvailabilityType> metric = new Metric<>(new MetricId<>(tenantId, AVAILABILITY, metricDefinition.getId()),
metricDefinition.getTags(), metricDefinition.getDataRetention());
try {
Observable<Void> observable = metricsService.createMetric(metric);
Expand All @@ -120,7 +120,7 @@ public Response createAvailabilityMetric(
String message = "A metric with name [" + e.getMetric().getId().getName() + "] already exists";
return Response.status(Response.Status.CONFLICT).entity(new ApiError(message)).build();
} catch (Exception e) {
return ApiUtils.serverError(e);
return serverError(e);
}
}

Expand All @@ -134,14 +134,14 @@ public Response createAvailabilityMetric(
response = ApiError.class) })
public Response getAvailabilityMetric(@PathParam("id") String id) {
try {
return metricsService.findMetric(new MetricId(tenantId, AVAILABILITY, id))
return metricsService.findMetric(new MetricId<>(tenantId, AVAILABILITY, id))
.map(MetricDefinition::new)
.map(metricDef -> Response.ok(metricDef).build())
.switchIfEmpty(Observable.just(noContent()))
.toBlocking()
.firstOrDefault(null);
} catch (Exception e) {
return ApiUtils.serverError(e);
return serverError(e);
}
}

Expand All @@ -158,14 +158,14 @@ public Response getAvailabilityMetricTags(
@PathParam("id") String id
) {
Observable<Optional<Map<String, String>>> something = metricsService
.getMetricTags(new MetricId(tenantId, AVAILABILITY, id));
.getMetricTags(new MetricId<>(tenantId, AVAILABILITY, id));
try {
return something
.map(optional -> valueToResponse(optional))
.map(ApiUtils::valueToResponse)
.toBlocking()
.lastOrDefault(null);
} catch (Exception e) {
return ApiUtils.serverError(e);
return serverError(e);
}
}

Expand All @@ -181,12 +181,12 @@ public Response updateAvailabilityMetricTags(
@PathParam("id") String id,
@ApiParam(required = true) Map<String, String> tags
) {
Metric<AvailabilityType> metric = new Metric<>(new MetricId(tenantId, AVAILABILITY, id));
Metric<AvailabilityType> metric = new Metric<>(new MetricId<>(tenantId, AVAILABILITY, id));
try {
metricsService.addTags(metric, tags).toBlocking().lastOrDefault(null);
return Response.ok().build();
} catch (Exception e) {
return ApiUtils.serverError(e);
return serverError(e);
}
}

Expand All @@ -202,13 +202,13 @@ public Response deleteAvailabilityMetricTags(
@PathParam("id") String id,
@ApiParam("Tag list") @PathParam("tags") Tags tags
) {
Metric<AvailabilityType> metric = new Metric<>(new MetricId(tenantId, AVAILABILITY, id));
Metric<AvailabilityType> metric = new Metric<>(new MetricId<>(tenantId, AVAILABILITY, id));

try {
metricsService.deleteTags(metric, tags.getTags()).toBlocking().lastOrDefault(null);
return Response.ok().build();
} catch (Exception e) {
return ApiUtils.serverError(e);
return serverError(e);
}
}

Expand All @@ -225,14 +225,14 @@ public Response addAvailabilityForMetric(
@PathParam("id") String id,
@ApiParam(value = "List of availability datapoints", required = true) List<AvailabilityDataPoint> data
) {
Metric<AvailabilityType> metric = new Metric<>(new MetricId(tenantId, AVAILABILITY, id),
Metric<AvailabilityType> metric = new Metric<>(new MetricId<>(tenantId, AVAILABILITY, id),
requestToAvailabilityDataPoints(data));

try {
metricsService.addAvailabilityData(Observable.just(metric)).toBlocking().lastOrDefault(null);
metricsService.addDataPoints(Observable.just(metric)).toBlocking().lastOrDefault(null);
return Response.ok().build();
} catch (Exception e) {
return ApiUtils.serverError(e);
return serverError(e);
}
}

Expand All @@ -250,11 +250,11 @@ public Response addAvailabilityData(
List<Availability> availabilities
) {
try {
metricsService.addAvailabilityData(requestToAvailabilities(tenantId, availabilities)).toBlocking()
metricsService.addDataPoints(requestToAvailabilities(tenantId, availabilities)).toBlocking()
.lastOrDefault(null);
return Response.ok().build();
} catch (Exception e) {
return ApiUtils.serverError(e);
return serverError(e);
}
}

Expand All @@ -270,7 +270,7 @@ public Response findAvailabilityDataByTags(
@ApiParam(value = "Tag list", required = true) @QueryParam("tags") Tags tags
) {
if (tags == null) {
return ApiUtils.badRequest(new ApiError("Missing tags query"));
return badRequest(new ApiError("Missing tags query"));
} else {
try {
return metricsService.findAvailabilityByTags(tenantId, tags.getTags()).map(m -> {
Expand Down Expand Up @@ -314,7 +314,7 @@ public Response findAvailabilityData(
Long startTime = start == null ? now - EIGHT_HOURS : start;
Long endTime = end == null ? now : end;

MetricId metricId = new MetricId(tenantId, AVAILABILITY, id);
MetricId<AvailabilityType> metricId = new MetricId<>(tenantId, AVAILABILITY, id);
if (bucketsCount == null && bucketDuration == null) {
try {
return metricsService.findAvailabilityData(metricId, startTime, endTime, distinct)
Expand All @@ -325,10 +325,10 @@ public Response findAvailabilityData(
.lastOrDefault(null);
} catch (Exception e) {
logger.warn("Failed to fetch availability data", e);
return ApiUtils.serverError(e);
return serverError(e);
}
} else if (bucketsCount != null && bucketDuration != null) {
return ApiUtils.badRequest(new ApiError("Both buckets and bucketDuration parameters are used"));
return badRequest(new ApiError("Both buckets and bucketDuration parameters are used"));
} else {
Buckets buckets;
try {
Expand All @@ -338,14 +338,14 @@ public Response findAvailabilityData(
buckets = Buckets.fromStep(startTime, endTime, bucketDuration.toMillis());
}
} catch (IllegalArgumentException e) {
return ApiUtils.badRequest(new ApiError("Bucket: " + e.getMessage()));
return badRequest(new ApiError("Bucket: " + e.getMessage()));
}
try {
return metricsService.findAvailabilityStats(metricId, startTime, endTime, buckets)
.map(ApiUtils::collectionToResponse).toBlocking()
.lastOrDefault(null);
} catch (Exception e) {
return ApiUtils.serverError(e);
return serverError(e);
}
}
}
Expand All @@ -362,7 +362,7 @@ public Response tagAvailabilityData(
@ApiParam(required = true) TagRequest params
) {
Observable<Void> resultSetObservable;
Metric<AvailabilityType> metric = new Metric<>(new MetricId(tenantId, AVAILABILITY, id));
Metric<AvailabilityType> metric = new Metric<>(new MetricId<>(tenantId, AVAILABILITY, id));
if (params.getTimestamp() != null) {
resultSetObservable = metricsService.tagAvailabilityData(metric, params.getTags(), params.getTimestamp());
} else {
Expand All @@ -374,7 +374,7 @@ public Response tagAvailabilityData(
resultSetObservable.toBlocking().lastOrDefault(null);
return Response.ok().build();
} catch (Exception e) {
return ApiUtils.serverError(e);
return serverError(e);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public Response createCounter(
@ApiParam(required = true) MetricDefinition metricDefinition,
@Context UriInfo uriInfo
) {
Metric<Double> metric = new Metric<>(new MetricId(tenantId, COUNTER, metricDefinition.getId()),
Metric<Long> metric = new Metric<>(new MetricId<>(tenantId, COUNTER, metricDefinition.getId()),
metricDefinition.getTags(), metricDefinition.getDataRetention());
URI location = uriInfo.getBaseUriBuilder().path("/counters/{id}").build(metric.getId().getName());
try {
Expand All @@ -128,7 +128,7 @@ public Response createCounter(
response = ApiError.class) })
public Response getCounter(@PathParam("id") String id) {
try {
return metricsService.findMetric(new MetricId(tenantId, COUNTER, id))
return metricsService.findMetric(new MetricId<>(tenantId, COUNTER, id))
.map(MetricDefinition::new)
.map(metricDef -> Response.ok(metricDef).build())
.switchIfEmpty(Observable.just(ApiUtils.noContent()))
Expand All @@ -151,7 +151,7 @@ public Response addData(@ApiParam(value = "List of metrics", required = true) Li
) {
Observable<Metric<Long>> metrics = requestToCounters(tenantId, counters);
try {
metricsService.addCounterData(metrics).toBlocking().lastOrDefault(null);
metricsService.addDataPoints(metrics).toBlocking().lastOrDefault(null);
return Response.ok().build();
} catch (Exception e) {
return ApiUtils.serverError(e);
Expand All @@ -172,9 +172,9 @@ public Response addData(
@ApiParam(value = "List of data points containing timestamp and value", required = true)
List<CounterDataPoint> data
) {
Metric<Long> metric = new Metric<>(new MetricId(tenantId, COUNTER, id), requestToCounterDataPoints(data));
Metric<Long> metric = new Metric<>(new MetricId<>(tenantId, COUNTER, id), requestToCounterDataPoints(data));
try {
metricsService.addCounterData(Observable.just(metric)).toBlocking().lastOrDefault(null);
metricsService.addDataPoints(Observable.just(metric)).toBlocking().lastOrDefault(null);
return Response.ok().build();
} catch (Exception e) {
return ApiUtils.serverError(e);
Expand All @@ -201,7 +201,7 @@ public Response findCounterData(
long endTime = end == null ? now : end;

try {
return metricsService.findCounterData(new MetricId(tenantId, COUNTER, id), startTime, endTime)
return metricsService.findDataPoints(new MetricId<>(tenantId, COUNTER, id), startTime, endTime)
.map(CounterDataPoint::new)
.toList()
.map(ApiUtils::collectionToResponse)
Expand Down Expand Up @@ -236,7 +236,7 @@ public Response findRate(
long endTime = end == null ? now : end;

try {
return metricsService.findRateData(new MetricId(tenantId, COUNTER, id), startTime, endTime)
return metricsService.findRateData(new MetricId<>(tenantId, COUNTER, id), startTime, endTime)
.map(GaugeDataPoint::new)
.toList()
.map(ApiUtils::collectionToResponse)
Expand Down

0 comments on commit e861996

Please sign in to comment.