diff --git a/.travis.yml b/.travis.yml index d8fba5273..5af5ebe11 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,7 +43,7 @@ before_install: install: - mvn -version -B script: -- mvn verify -Dwildfly.logging.console.level=INFO -Djboss-as.logging.console.level=INFO -Dterminal-event.timeout=25 -B +- mvn verify -Dtest.logging.console.level=INFO -Dwildfly.logging.console.level=INFO -Djboss-as.logging.console.level=INFO -Dterminal-event.timeout=25 -B after_failure: bash .travis.diagnose.sh after_success: - PROJECT_VERSION=`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '\['` diff --git a/api/diff.txt b/api/diff.txt index a87aebacd..350135af5 100644 --- a/api/diff.txt +++ b/api/diff.txt @@ -41,19 +41,30 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/pom.xml api/metrics-api-jaxrs-1 < antlr4-runtime < < -60c68 +60,61c68,78 < +< --- > -68c76 +> +> +> org.jboss.logging +> jboss-logging +> +> provided +> +69c86 < resteasy-jackson2-provider --- > resteasy-jackson-provider -73c81 +74c91 < jboss-servlet-api_3.1_spec --- > jboss-servlet-api_3.0_spec -81,99d88 +82,100d98 < < < @@ -73,13 +84,13 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/pom.xml api/metrics-api-jaxrs-1 < mockito-core < test < -103c92 +104c102 < hawkular-metric-rest --- > hawkular-metrics-api-rest-1.1 -105d93 +106d103 < -107,121c95,101 +108,122c105,111 < org.antlr < antlr4-maven-plugin < @@ -103,15 +114,15 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/pom.xml api/metrics-api-jaxrs-1 > 7.5.0.Final-redhat-15 > ${jboss-as.management.port} > -139c119 +140c129 < static/index.html --- > index.html -147c127 +148c137 < static/index.html --- > index.html -156,225d135 +157,226d145 < < < @@ -189,7 +200,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < import org.hawkular.metrics.api.jaxrs.filter.CorsResponseFilter; 46d43 < import org.hawkular.metrics.api.jaxrs.influx.InfluxSeriesHandler; -48,49c45,47 +50,51c47,49 < import org.hawkular.metrics.api.jaxrs.param.ConvertersProvider; < import org.hawkular.metrics.api.jaxrs.util.JacksonConfig; --- @@ -218,13 +229,13 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/exception/mappers/ExceptionMapperUtils.java api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/exception/mappers/ExceptionMapperUtils.java 20a21 > import javax.ws.rs.core.Response.ResponseBuilder; -34a36,40 +33a35,39 > public static Response buildResponse(Throwable exception, int statusCode) { > ResponseBuilder responseBuilder = Response.status(statusCode); > return buildErrorResponse(exception, responseBuilder); > } > -36c42,47 +35c41,46 < Response response = Response.status(status) --- > ResponseBuilder responseBuilder = Response.status(status); @@ -464,15 +475,15 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < import org.hawkular.metrics.api.jaxrs.handler.observer.ResultSetObserver; 65a62 > import org.hawkular.metrics.core.api.MetricAlreadyExistsException; -72,76d68 +70,74d66 < import io.swagger.annotations.Api; < import io.swagger.annotations.ApiOperation; < import io.swagger.annotations.ApiParam; < import io.swagger.annotations.ApiResponse; < import io.swagger.annotations.ApiResponses; -86d77 +84d75 < @Api(tags = "Availability") -100,111c91,92 +96,107c87,88 < @ApiOperation(value = "Create availability metric. Same notes as creating gauge metric apply.") < @ApiResponses(value = { < @ApiResponse(code = 201, message = "Metric created successfully"), @@ -488,13 +499,13 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr --- > public Response createAvailabilityMetric( > MetricDefinition metricDefinition, -115,116c96,97 +111,112c92,93 < asyncResponse.resume(badRequest(new ApiError("MetricDefinition type does not match " + MetricType < .AVAILABILITY.getText()))); --- > return ApiUtils.badRequest(new ApiError("MetricDefinition type does not match " + MetricType > .AVAILABILITY.getText())); -121c102,111 +117c98,107 < metricsService.createMetric(metric).subscribe(new MetricCreatedObserver(asyncResponse, location)); --- > try { @@ -507,7 +518,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -126,134c116,118 +122,130c112,114 < @ApiOperation(value = "Retrieve single metric definition.", response = MetricDefinition.class) < @ApiResponses(value = { < @ApiResponse(code = 200, message = "Metric's definition was successfully retrieved."), @@ -521,7 +532,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > public Response getAvailabilityMetric(@PathParam("id") String id) { > try { > return metricsService.findMetric(new MetricId<>(tenantId, AVAILABILITY, id)) -138c122,126 +134c118,122 < .subscribe(asyncResponse::resume, t -> asyncResponse.resume(serverError(t))); --- > .toBlocking() @@ -529,7 +540,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -143,151c131 +139,147c127 < @ApiOperation(value = "Retrieve tags associated with the metric definition.", response = String.class, < responseContainer = "Map") < @ApiResponses(value = { @@ -541,7 +552,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < @Suspended final AsyncResponse asyncResponse, --- > public Response getAvailabilityMetricTags( -154,156c134,143 +150,152c130,139 < metricsService.getMetricTags(new MetricId<>(tenantId, AVAILABILITY, id)).subscribe( < optional -> asyncResponse.resume(valueToResponse(optional)), < t -> asyncResponse.resume(serverError(t))); @@ -556,9 +567,9 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -158a146 +154a142 > -161,167c149 +157,163c145 < @ApiOperation(value = "Update tags associated with the metric definition.") < @ApiResponses(value = { < @ApiResponse(code = 200, message = "Metric's tags were successfully updated."), @@ -568,11 +579,11 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < @Suspended final AsyncResponse asyncResponse, --- > public Response updateAvailabilityMetricTags( -169c151 +165c147 < @ApiParam(required = true) Map tags --- > Map tags -172c154,159 +168c150,155 < metricsService.addTags(metric, tags).subscribe(new ResultSetObserver(asyncResponse)); --- > try { @@ -581,7 +592,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -177,184c164 +173,180c160 < @ApiOperation(value = "Delete tags associated with the metric definition.") < @ApiResponses(value = { < @ApiResponse(code = 200, message = "Metric's tags were successfully deleted."), @@ -592,11 +603,11 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < @Suspended final AsyncResponse asyncResponse, --- > public Response deleteAvailabilityMetricTags( -186c166 +182c162 < @ApiParam("Tag list") @PathParam("tags") Tags tags --- > @PathParam("tags") Tags tags -189c169,175 +185c165,171 < metricsService.deleteTags(metric, tags.getTags()).subscribe(new ResultSetObserver(asyncResponse)); --- > @@ -606,7 +617,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -194,203c180,182 +190,199c176,178 < @ApiOperation(value = "Add data for a single availability metric.") < @ApiResponses(value = { < @ApiResponse(code = 200, message = "Adding data succeeded."), @@ -621,7 +632,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > public Response addAvailabilityForMetric( > @PathParam("id") String id, > List data -206,207c185,190 +202,203c181,186 < Observable observable = metricsService.addDataPoints(AVAILABILITY, metrics); < observable.subscribe(new ResultSetObserver(asyncResponse)); --- @@ -631,7 +642,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -212,221c195 +208,217c191 < @ApiOperation(value = "Add metric data for multiple availability metrics in a single call.") < @ApiResponses(value = { < @ApiResponse(code = 200, message = "Adding data succeeded."), @@ -644,7 +655,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < @ApiParam(value = "List of availability metrics", required = true) --- > public Response addAvailabilityData( -225,226c199,204 +221,222c195,200 < Observable observable = metricsService.addDataPoints(AVAILABILITY, metrics); < observable.subscribe(new ResultSetObserver(asyncResponse)); --- @@ -654,7 +665,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -231,238c209,210 +227,234c205,206 < @ApiOperation(value = "Find availabilities metrics data by their tags.", response = Map.class) < @ApiResponses(value = { @ApiResponse(code = 200, message = "Successfully fetched data."), < @ApiResponse(code = 204, message = "No matching data found."), @@ -666,19 +677,19 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr --- > public Response findAvailabilityDataByTags( > @QueryParam("tags") Tags tags -241c213 +237c209 < asyncResponse.resume(badRequest(new ApiError("Missing tags query"))); --- > return badRequest(new ApiError("Missing tags query")); -243,251c215,227 +239,247c211,221 < // @TODO Repeated code, refactor (in GaugeHandler also) < metricsService.findAvailabilityByTags(tenantId, tags.getTags()).subscribe(m -> { < if (m.isEmpty()) { -< asyncResponse.resume(Response.noContent().build()); +< asyncResponse.resume(noContent()); < } else { < asyncResponse.resume(Response.ok(m).build()); < } -< }, t -> asyncResponse.resume(Response.serverError().entity(new ApiError(t.getMessage())).build())); +< }, t -> asyncResponse.resume(serverError(t))); < --- > try { @@ -688,13 +699,11 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } else { > return Response.ok(m).build(); > } -> }) -> .toBlocking() -> .lastOrDefault(null); +> }).toBlocking().lastOrDefault(null); > } catch (Exception e) { -> return Response.serverError().entity(new ApiError(e.getMessage())).build(); +> return serverError(e); > } -257,269c233 +253,265c227 < @ApiOperation(value = "Retrieve availability data.", notes = "When buckets or bucketDuration query parameter is " + < "used, the time range between start and end will be divided in buckets of equal duration, and " + < "availability statistics will be computed for each bucket.", response = AvailabilityDataPoint.class, @@ -710,7 +719,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < @Suspended AsyncResponse asyncResponse, --- > public Response findAvailabilityData( -271,275c235,238 +267,271c229,232 < @ApiParam(value = "Defaults to now - 8 hours") @QueryParam("start") final Long start, < @ApiParam(value = "Defaults to now") @QueryParam("end") final Long end, < @ApiParam(value = "Total number of buckets") @QueryParam("buckets") Integer bucketsCount, @@ -721,32 +730,26 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > @QueryParam("end") final Long end, > @QueryParam("buckets") Integer bucketsCount, > @QueryParam("bucketDuration") Duration bucketDuration, -283d245 +279d239 < -285c247,248 +281c241,242 < metricsService.findAvailabilityData(metricId, startTime, endTime, distinct) --- > try { > return metricsService.findAvailabilityData(metricId, startTime, endTime, distinct) -289,294c252,257 -< .subscribe( -< asyncResponse::resume, -< t -> { -< logger.warn("Failed to fetch availability data", t); -< serverError(t); -< }); +285c246,250 +< .subscribe(asyncResponse::resume, t -> asyncResponse.resume(serverError(t))); --- > .toBlocking() > .lastOrDefault(null); > } catch (Exception e) { -> logger.warn("Failed to fetch availability data", e); > return serverError(e); > } -296c259 +287c252 < asyncResponse.resume(badRequest(new ApiError("Both buckets and bucketDuration parameters are used"))); --- > return badRequest(new ApiError("Both buckets and bucketDuration parameters are used")); -306,307c269,276 +297,298c262,269 < asyncResponse.resume(badRequest(new ApiError("Bucket: " + e.getMessage()))); < return; --- @@ -758,12 +761,12 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > .lastOrDefault(null); > } catch (Exception e) { > return serverError(e); -309,312d277 +300,303d270 < < metricsService.findAvailabilityStats(metricId, startTime, endTime, buckets) < .map(ApiUtils::collectionToResponse) -< .subscribe(asyncResponse::resume, ApiUtils::serverError); -318,324c283 +< .subscribe(asyncResponse::resume, t -> asyncResponse.resume(serverError(t))); +309,315c276 < @ApiOperation(value = "Add or update availability metric's tags.") < @ApiResponses(value = { < @ApiResponse(code = 200, message = "Tags were modified successfully."), @@ -773,11 +776,11 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < @Suspended final AsyncResponse asyncResponse, --- > public Response tagAvailabilityData( -326c285 +317c278 < @ApiParam(required = true) TagRequest params --- > TagRequest params -336c295,301 +327c288,294 < resultSetObservable.subscribe(new ResultSetObserver(asyncResponse)); --- > @@ -787,7 +790,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -341,348c306,307 +332,339c299,300 < @ApiOperation(value = "Find availability metric data with given tags.", response = Map.class) < @ApiResponses(value = { @ApiResponse(code = 200, message = "Availability values fetched successfully"), < @ApiResponse(code = 204, message = "No matching data found."), @@ -799,27 +802,29 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr --- > public Response findTaggedAvailabilityData( > @PathParam("tags") Tags tags -350,351c309,310 +341,342c302,303 < metricsService.findAvailabilityByTags(tenantId, tags.getTags()) < .subscribe(m -> { // @TODO Repeated code, refactor and use Optional? --- > try { > return metricsService.findAvailabilityByTags(tenantId, tags.getTags()).map(m -> { -353c312 -< asyncResponse.resume(Response.noContent().build()); +344c305 +< asyncResponse.resume(noContent()); --- > return ApiUtils.noContent(); -355c314 +346c307 < asyncResponse.resume(Response.ok(m).build()); --- > return Response.ok(m).build(); -357c316,319 -< }, t -> asyncResponse.resume(Response.serverError().entity(new ApiError(t.getMessage())).build())); +348c309,312 +< }, t -> asyncResponse.resume(serverError(t))); --- > }).toBlocking().lastOrDefault(null); > } catch (Exception e) { -> return Response.serverError().entity(new ApiError(e.getMessage())).build(); +> return serverError(e); > } +349a314 +> diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/BaseHandler.java api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/BaseHandler.java 39,40d38 < import io.swagger.annotations.ApiOperation; @@ -836,15 +841,15 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < import org.hawkular.metrics.api.jaxrs.handler.observer.ResultSetObserver; 56a53 > import org.hawkular.metrics.core.api.MetricAlreadyExistsException; -63,67d59 +61,65d57 < import io.swagger.annotations.Api; < import io.swagger.annotations.ApiOperation; < import io.swagger.annotations.ApiParam; < import io.swagger.annotations.ApiResponse; < import io.swagger.annotations.ApiResponses; -77d68 +75d66 < @Api(tags = "Counter") -92,107c83,84 +87,102c78,79 < @ApiOperation( < value = "Create counter metric. This operation also causes the rate to be calculated and " + < "persisted periodically after raw count data is persisted.", @@ -864,13 +869,13 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr --- > public Response createCounter( > MetricDefinition metricDefinition, -111,112c88,89 +106,107c83,84 < asyncResponse.resume(badRequest(new ApiError("MetricDefinition type does not match " + MetricType < .COUNTER.getText()))); --- > return badRequest(new ApiError("MetricDefinition type does not match " + MetricType > .COUNTER.getText())); -117c94,103 +112c89,98 < metricsService.createMetric(metric).subscribe(new MetricCreatedObserver(asyncResponse, location)); --- > try { @@ -883,7 +888,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -122,130c108,110 +117,125c103,105 < @ApiOperation(value = "Retrieve a counter definition", response = MetricDefinition.class) < @ApiResponses(value = { < @ApiResponse(code = 200, message = "Metric's definition was successfully retrieved."), @@ -897,7 +902,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > public Response getCounter(@PathParam("id") String id) { > try { > return metricsService.findMetric(new MetricId<>(tenantId, COUNTER, id)) -133,134c113,117 +128,129c108,112 < .switchIfEmpty(Observable.just(noContent())) < .subscribe(asyncResponse::resume, t -> asyncResponse.resume(serverError(t))); --- @@ -906,7 +911,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -139,148c122 +134,143c117 < @ApiOperation(value = "Add data points for multiple counters") < @ApiResponses(value = { < @ApiResponse(code = 200, message = "Adding data points succeeded."), @@ -919,7 +924,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < ) { --- > public Response addData(List counters) { -150,151c124,129 +145,146c119,124 < Observable observable = metricsService.addDataPoints(COUNTER, metrics); < observable.subscribe(new ResultSetObserver(asyncResponse)); --- @@ -929,7 +934,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -156,164c134 +151,159c129 < @ApiOperation(value = "Add data for a single counter") < @ApiResponses(value = { < @ApiResponse(code = 200, message = "Adding data succeeded."), @@ -941,9 +946,9 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < @Suspended final AsyncResponse asyncResponse, --- > public Response addData( -166d135 +161d130 < @ApiParam(value = "List of data points containing timestamp and value", required = true) -170,171c139,144 +165,166c134,139 < Observable observable = metricsService.addDataPoints(COUNTER, metrics); < observable.subscribe(new ResultSetObserver(asyncResponse)); --- @@ -953,7 +958,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > } catch (Exception e) { > return serverError(e); > } -176,186c149 +171,181c144 < @ApiOperation(value = "Retrieve counter data points.", response = CounterDataPoint.class, < responseContainer = "List") < @ApiResponses(value = { @@ -967,7 +972,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < @Suspended AsyncResponse asyncResponse, --- > public Response findCounterData( -188,190c151,153 +183,185c146,148 < @ApiParam(value = "Defaults to now - 8 hours") @QueryParam("start") final Long start, < @ApiParam(value = "Defaults to now") @QueryParam("end") final Long end) { < @@ -975,26 +980,20 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > @QueryParam("start") final Long start, > @QueryParam("end") final Long end > ) { -195c158,159 +190c153,154 < metricsService.findDataPoints(new MetricId<>(tenantId, COUNTER, id), startTime, endTime) --- > try { > return metricsService.findDataPoints(new MetricId<>(tenantId, COUNTER, id), startTime, endTime) -199,204c163,168 -< .subscribe( -< asyncResponse::resume, -< t -> { -< logger.warn("Failed to fetch counter data", t); -< serverError(t); -< }); +194c158,162 +< .subscribe(asyncResponse::resume, t -> asyncResponse.resume(serverError(t))); --- > .toBlocking() > .lastOrDefault(null); > } catch (Exception e) { -> logger.warn("Failed to fetch counter data", e); > return serverError(e); > } -209,221c173 +199,211c167 < @ApiOperation( < value = "Retrieve counter rate data points which are automatically generated on the server side.", < notes = "Rate data points are only generated for counters that are explicitly created.", @@ -1010,7 +1009,7 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr < @Suspended AsyncResponse asyncResponse, --- > public Response findRate( -223,225c175,177 +213,215c169,171 < @ApiParam(value = "Defaults to now - 8 hours") @QueryParam("start") final Long start, < @ApiParam(value = "Defaults to now") @QueryParam("end") final Long end) { < @@ -1018,27 +1017,19 @@ diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metr > @QueryParam("start") final Long start, > @QueryParam("end") final Long end > ) { -230c182,183 +220c176,177 < metricsService.findRateData(new MetricId<>(tenantId, COUNTER, id), startTime, endTime) --- > try { > return metricsService.findRateData(new MetricId<>(tenantId, COUNTER, id), startTime, endTime) -234,239c187,192 -< .subscribe( -< asyncResponse::resume, -< t -> { -< logger.warn("Failed to fetch counter rate data", t); -< serverError(t); -< }); +224c181,185 +< .subscribe(asyncResponse::resume, t -> asyncResponse.resume(serverError(t))); --- > .toBlocking() > .lastOrDefault(null); > } catch (Exception e) { -> logger.warn("Failed to fetch counter rate data", e); > return serverError(e); > } -241d193 -< diff -r '--exclude=target' api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/GaugeHandler.java api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/GaugeHandler.java 44,45d43 < import javax.ws.rs.container.AsyncResponse; diff --git a/api/metrics-api-common/pom.xml b/api/metrics-api-common/pom.xml index 123417e33..8bb4e21d4 100644 --- a/api/metrics-api-common/pom.xml +++ b/api/metrics-api-common/pom.xml @@ -114,5 +114,19 @@ provided + + + + org.jboss.logging + jboss-logging-annotations + provided + + + + org.jboss.logging + jboss-logging-processor + provided + + diff --git a/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/MetricsServiceLifecycle.java b/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/MetricsServiceLifecycle.java index 22cb15ebd..f9b912782 100644 --- a/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/MetricsServiceLifecycle.java +++ b/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/MetricsServiceLifecycle.java @@ -46,6 +46,8 @@ import org.hawkular.metrics.api.jaxrs.config.Configurable; import org.hawkular.metrics.api.jaxrs.config.ConfigurationProperty; +import org.hawkular.metrics.api.jaxrs.log.RestLogger; +import org.hawkular.metrics.api.jaxrs.log.RestLogging; import org.hawkular.metrics.api.jaxrs.util.Eager; import org.hawkular.metrics.api.jaxrs.util.TestClock; import org.hawkular.metrics.api.jaxrs.util.VirtualClock; @@ -62,8 +64,6 @@ import org.hawkular.metrics.tasks.impl.TaskSchedulerImpl; import org.hawkular.rx.cassandra.driver.RxSessionImpl; import org.joda.time.DateTime; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.codahale.metrics.MetricRegistry; import com.datastax.driver.core.Cluster; @@ -86,7 +86,7 @@ @ApplicationScoped @Eager public class MetricsServiceLifecycle { - private static final Logger LOG = LoggerFactory.getLogger(MetricsServiceLifecycle.class); + private static final RestLogger log = RestLogging.getRestLogger(MetricsServiceLifecycle.class); /** * @see #getState() @@ -190,17 +190,16 @@ private void startMetricsService() { if (state != State.STARTING) { return; } - LOG.info("Initializing metrics service"); + log.infoInitializing(); connectionAttempts++; try { session = createSession(); } catch (Exception t) { Throwable rootCause = Throwables.getRootCause(t); - LOG.warn("Could not connect to Cassandra cluster - assuming its not up yet: " + rootCause - .getLocalizedMessage()); + log.warnCouldNotConnectToCassandra(rootCause.getLocalizedMessage()); // cycle between original and more wait time - avoid waiting huge amounts of time long delay = 1L + ((connectionAttempts - 1L) % 4L); - LOG.warn("[{}] Retrying connecting to Cassandra cluster in [{}]s...", connectionAttempts, delay); + log.warnRetryingConnectingToCassandra(connectionAttempts, delay); lifecycleExecutor.schedule(this::startMetricsService, delay, SECONDS); return; } @@ -226,20 +225,20 @@ private void startMetricsService() { // the registered metrics in various ways such as new REST endpoints, JMX, or via different // com.codahale.metrics.Reporter instances. metricsService.startUp(session, keyspace, false, false, new MetricRegistry()); - LOG.info("Metrics service started"); + log.infoServiceStarted(); initJobs(); state = State.STARTED; - } catch (Exception t) { - LOG.error("An error occurred trying to connect to the Cassandra cluster", t); + } catch (Exception e) { + log.fatalCannotConnectToCassandra(e); state = State.FAILED; } finally { if (state != State.STARTED) { try { metricsService.shutdown(); - } catch (Exception ignore) { - LOG.error("Could not shutdown the metricsService instance: ", ignore); + } catch (Exception e) { + log.errorCouldNotCloseServiceInstance(e); } } } @@ -252,7 +251,7 @@ private Session createSession() { port = Integer.parseInt(cqlPort); } catch (NumberFormatException nfe) { String defaultPort = CASSANDRA_CQL_PORT.defaultValue(); - LOG.warn("Invalid CQL port '{}', not a number. Will use a default of {}", cqlPort, defaultPort); + log.warnInvalidCqlPort(cqlPort, defaultPort); port = Integer.parseInt(defaultPort); } clusterBuilder.withPort(port); @@ -342,8 +341,8 @@ void destroy() { Future stopFuture = lifecycleExecutor.submit(this::stopMetricsService); try { Futures.get(stopFuture, 1, MINUTES, Exception.class); - } catch (Exception ignore) { - LOG.error("Unexcepted exception while shutting down, ", ignore); + } catch (Exception e) { + log.errorShutdownProblem(e); } lifecycleExecutor.shutdown(); } @@ -362,4 +361,4 @@ private void stopMetricsService() { } } } -} \ No newline at end of file +} diff --git a/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/log/RestLogger.java b/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/log/RestLogger.java new file mode 100644 index 000000000..d571acf63 --- /dev/null +++ b/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/log/RestLogger.java @@ -0,0 +1,80 @@ +/* + * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hawkular.metrics.api.jaxrs.log; + +import static org.jboss.logging.Logger.Level.ERROR; +import static org.jboss.logging.Logger.Level.FATAL; +import static org.jboss.logging.Logger.Level.INFO; +import static org.jboss.logging.Logger.Level.WARN; + +import org.jboss.logging.BasicLogger; +import org.jboss.logging.annotations.Cause; +import org.jboss.logging.annotations.LogMessage; +import org.jboss.logging.annotations.Message; +import org.jboss.logging.annotations.MessageLogger; +import org.jboss.logging.annotations.ValidIdRange; + +/** + * REST interface logging messages. + * + * @author Thomas Segismont + */ +@MessageLogger(projectCode = "HAWKMETRICS") +@ValidIdRange(min = 200000, max = 209999) +public interface RestLogger extends BasicLogger { + + @LogMessage(level = INFO) + @Message(id = 200001, value = "Hawkular Metrics starting") + void infoAppStarting(); + + @LogMessage(level = INFO) + @Message(id = 200002, value = "Initializing metrics service") + void infoInitializing(); + + @LogMessage(level = WARN) + @Message(id = 200003, value = "Could not connect to Cassandra cluster - assuming its not up yet: %s") + void warnCouldNotConnectToCassandra(String msg); + + @LogMessage(level = WARN) + @Message(id = 200004, value = "[%d] Retrying connecting to Cassandra cluster in [%d]s...") + void warnRetryingConnectingToCassandra(Integer connectionAttempts, Long delay); + + @LogMessage(level = INFO) + @Message(id = 200005, value = "Metrics service started") + void infoServiceStarted(); + + @LogMessage(level = FATAL) + @Message(id = 200006, value = "An error occurred trying to connect to the Cassandra cluster") + void fatalCannotConnectToCassandra(@Cause Exception e); + + @LogMessage(level = ERROR) + @Message(id = 200007, value = "Could not shutdown the Metrics service instance") + void errorCouldNotCloseServiceInstance(@Cause Exception e); + + @LogMessage(level = WARN) + @Message(id = 200008, value = "Invalid CQL port %s, not a number. Will use a default of %s") + void warnInvalidCqlPort(String port, String defaultPort); + + @LogMessage(level = ERROR) + @Message(id = 200009, value = "Unexcepted exception while shutting down") + void errorShutdownProblem(@Cause Exception e); + + @LogMessage(level = ERROR) + @Message(id = 200010, value = "Failed to process request") + void errorRequestProblem(@Cause Throwable t); +} diff --git a/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/log/RestLogging.java b/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/log/RestLogging.java new file mode 100644 index 000000000..b05cc3996 --- /dev/null +++ b/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/log/RestLogging.java @@ -0,0 +1,35 @@ +/* + * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.hawkular.metrics.api.jaxrs.log; + +import org.jboss.logging.Logger; + +/** + * Simplify logger lookup. + * + * @author Thomas Segismont + */ +public class RestLogging { + + public static RestLogger getRestLogger(Class clazz) { + return Logger.getMessageLogger(RestLogger.class, clazz.getName()); + } + + private RestLogging() { + // Utility class + } +} diff --git a/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/util/ApiUtils.java b/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/util/ApiUtils.java index a32e03aef..db21e7170 100644 --- a/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/util/ApiUtils.java +++ b/api/metrics-api-common/src/main/java/org/hawkular/metrics/api/jaxrs/util/ApiUtils.java @@ -22,9 +22,9 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import org.hawkular.metrics.api.jaxrs.log.RestLogger; +import org.hawkular.metrics.api.jaxrs.log.RestLogging; import org.hawkular.metrics.api.jaxrs.model.ApiError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.google.common.base.Throwables; @@ -32,17 +32,14 @@ * @author jsanda */ public class ApiUtils { - private static final Logger LOG = LoggerFactory.getLogger(ApiUtils.class); - - private ApiUtils() { - } + private static final RestLogger log = RestLogging.getRestLogger(ApiUtils.class); public static Response collectionToResponse(Collection collection) { return collection.isEmpty() ? noContent() : Response.ok(collection).type(MediaType.APPLICATION_JSON).build(); } public static Response serverError(Throwable t, String message) { - LOG.trace("Server error response", t); + log.errorRequestProblem(t); String errorMsg = message + ": " + Throwables.getRootCause(t).getMessage(); return Response.serverError().type(MediaType.APPLICATION_JSON).entity(new ApiError(errorMsg)).build(); } @@ -71,4 +68,8 @@ public static Response badRequest(Throwable t) { ApiError error = new ApiError(t.getLocalizedMessage()); return badRequest(error); } + + private ApiUtils() { + // Utility class + } } \ No newline at end of file diff --git a/api/metrics-api-jaxrs-1.1/pom.xml b/api/metrics-api-jaxrs-1.1/pom.xml index f24d5811b..ddf0a189d 100644 --- a/api/metrics-api-jaxrs-1.1/pom.xml +++ b/api/metrics-api-jaxrs-1.1/pom.xml @@ -66,6 +66,16 @@ + + + org.jboss.logging + jboss-logging + + provided + org.jboss.resteasy resteasy-jaxrs diff --git a/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/HawkularMetricsRestApp.java b/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/HawkularMetricsRestApp.java index 5b68c4153..b3d1c7b96 100644 --- a/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/HawkularMetricsRestApp.java +++ b/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/HawkularMetricsRestApp.java @@ -42,23 +42,23 @@ import org.hawkular.metrics.api.jaxrs.handler.TenantsHandler; import org.hawkular.metrics.api.jaxrs.handler.VirtualClockHandler; import org.hawkular.metrics.api.jaxrs.interceptor.EmptyPayloadInterceptor; +import org.hawkular.metrics.api.jaxrs.log.RestLogger; +import org.hawkular.metrics.api.jaxrs.log.RestLogging; import org.hawkular.metrics.api.jaxrs.param.DurationConverter; import org.hawkular.metrics.api.jaxrs.param.MetricTypeConverter; import org.hawkular.metrics.api.jaxrs.param.TagsConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** - * Rest app initialization + * Rest app initialization. + * * @author Heiko W. Rupp */ @ApplicationPath("/") public class HawkularMetricsRestApp extends Application { - - private static final Logger logger = LoggerFactory.getLogger(HawkularMetricsRestApp.class); + private static final RestLogger log = RestLogging.getRestLogger(HawkularMetricsRestApp.class); public HawkularMetricsRestApp() { - logger.info("Hawkular Metrics starting .."); + log.infoAppStarting(); } /** @@ -91,10 +91,10 @@ public Set> getClasses() { boolean useVirtualClock = Boolean.valueOf(System.getProperty("hawkular.metrics.use-virtual-clock", "false")); if (useVirtualClock) { - logger.info("Deploying {}", VirtualClockHandler.class); + log.infof("Deploying %s", VirtualClockHandler.class.getCanonicalName()); classes.add(VirtualClockHandler.class); } else { - logger.info("Virtual clock is disabled"); + log.info("Virtual clock is disabled"); } // Add exception mapper providers diff --git a/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/exception/mappers/ExceptionMapperUtils.java b/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/exception/mappers/ExceptionMapperUtils.java index d9b281ee7..7482ac6d8 100644 --- a/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/exception/mappers/ExceptionMapperUtils.java +++ b/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/exception/mappers/ExceptionMapperUtils.java @@ -22,8 +22,7 @@ import javax.ws.rs.core.Response.Status; import org.hawkular.metrics.api.jaxrs.model.ApiError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; import com.google.common.base.Throwables; @@ -31,7 +30,7 @@ * @author Jeeva Kandasamy */ public class ExceptionMapperUtils { - private static final Logger LOG = LoggerFactory.getLogger(ExceptionMapperUtils.class); + private static final Logger log = Logger.getLogger(ExceptionMapperUtils.class); public static Response buildResponse(Throwable exception, int statusCode) { ResponseBuilder responseBuilder = Response.status(statusCode); @@ -48,8 +47,8 @@ private static Response buildErrorResponse(Throwable exception, ResponseBuilder .entity(new ApiError(Throwables.getRootCause(exception).getMessage())) .type(MediaType.APPLICATION_JSON_TYPE) .build(); - if (LOG.isTraceEnabled()) { - LOG.trace("Turning " + exception.getClass().getCanonicalName() + " into a " + response.getStatus() + " " + + if (log.isTraceEnabled()) { + log.trace("Turning " + exception.getClass().getCanonicalName() + " into a " + response.getStatus() + " " + "response", exception); } return response; diff --git a/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/AvailabilityHandler.java b/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/AvailabilityHandler.java index d3ef49452..5decc2149 100644 --- a/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/AvailabilityHandler.java +++ b/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/AvailabilityHandler.java @@ -63,8 +63,6 @@ import org.hawkular.metrics.core.api.MetricId; import org.hawkular.metrics.core.api.MetricType; import org.hawkular.metrics.core.api.MetricsService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import rx.Observable; @@ -78,8 +76,6 @@ public class AvailabilityHandler { private static final long EIGHT_HOURS = MILLISECONDS.convert(8, HOURS); - private static final Logger logger = LoggerFactory.getLogger(AvailabilityHandler.class); - @Inject private MetricsService metricsService; @@ -219,11 +215,9 @@ public Response findAvailabilityDataByTags( } else { return Response.ok(m).build(); } - }) - .toBlocking() - .lastOrDefault(null); + }).toBlocking().lastOrDefault(null); } catch (Exception e) { - return Response.serverError().entity(new ApiError(e.getMessage())).build(); + return serverError(e); } } } @@ -252,7 +246,6 @@ public Response findAvailabilityData( .toBlocking() .lastOrDefault(null); } catch (Exception e) { - logger.warn("Failed to fetch availability data", e); return serverError(e); } } else if (bucketsCount != null && bucketDuration != null) { @@ -315,7 +308,7 @@ public Response findTaggedAvailabilityData( } }).toBlocking().lastOrDefault(null); } catch (Exception e) { - return Response.serverError().entity(new ApiError(e.getMessage())).build(); + return serverError(e); } } diff --git a/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/CounterHandler.java b/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/CounterHandler.java index 801f0c9f2..6824120be 100644 --- a/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/CounterHandler.java +++ b/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/CounterHandler.java @@ -54,8 +54,6 @@ import org.hawkular.metrics.core.api.MetricId; import org.hawkular.metrics.core.api.MetricType; import org.hawkular.metrics.core.api.MetricsService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import rx.Observable; @@ -67,9 +65,6 @@ @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) public class CounterHandler { - - private static Logger logger = LoggerFactory.getLogger(CounterHandler.class); - private static final long EIGHT_HOURS = MILLISECONDS.convert(8, HOURS); @Inject @@ -163,7 +158,6 @@ public Response findCounterData( .toBlocking() .lastOrDefault(null); } catch (Exception e) { - logger.warn("Failed to fetch counter data", e); return serverError(e); } } @@ -187,7 +181,6 @@ public Response findRate( .toBlocking() .lastOrDefault(null); } catch (Exception e) { - logger.warn("Failed to fetch counter rate data", e); return serverError(e); } } diff --git a/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/VirtualClockHandler.java b/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/VirtualClockHandler.java index e93ca6ff1..2caadcbbc 100644 --- a/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/VirtualClockHandler.java +++ b/api/metrics-api-jaxrs-1.1/src/main/java/org/hawkular/metrics/api/jaxrs/handler/VirtualClockHandler.java @@ -21,6 +21,8 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON; +import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.serverError; + import java.util.Map; import java.util.concurrent.TimeUnit; @@ -38,10 +40,8 @@ import org.hawkular.metrics.api.jaxrs.util.TestClock; import org.hawkular.metrics.api.jaxrs.util.VirtualClock; import org.hawkular.metrics.tasks.api.TaskScheduler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; -import com.google.common.base.Throwables; import com.google.common.collect.ImmutableMap; import rx.observers.TestSubscriber; @@ -55,11 +55,10 @@ @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) public class VirtualClockHandler { + private static Logger log = Logger.getLogger(VirtualClockHandler.class); public static final String PATH = "/clock"; - private static Logger logger = LoggerFactory.getLogger(VirtualClockHandler.class); - @Inject @TestClock private VirtualClock virtualClock; @@ -104,9 +103,8 @@ public Response waitForDuration(@QueryParam("duration") Duration duration) { return Response.ok().build(); } catch (Exception e) { - logger.warn("Failed to wait " + numMinutes + " minutes for task scheduler to complete work", e); - return Response.serverError().entity(ImmutableMap.of("errorMsg", Throwables.getStackTraceAsString(e))) - .build(); + log.warn("Failed to wait " + numMinutes + " minutes for task scheduler to complete work", e); + return serverError(e); } } diff --git a/api/metrics-api-jaxrs/pom.xml b/api/metrics-api-jaxrs/pom.xml index b5a1a8473..2fae1049e 100644 --- a/api/metrics-api-jaxrs/pom.xml +++ b/api/metrics-api-jaxrs/pom.xml @@ -58,6 +58,7 @@ + org.jboss.resteasy resteasy-jaxrs diff --git a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/HawkularMetricsRestApp.java b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/HawkularMetricsRestApp.java index 560d6ccfc..9c289b2e3 100644 --- a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/HawkularMetricsRestApp.java +++ b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/HawkularMetricsRestApp.java @@ -45,22 +45,22 @@ import org.hawkular.metrics.api.jaxrs.handler.VirtualClockHandler; import org.hawkular.metrics.api.jaxrs.influx.InfluxSeriesHandler; import org.hawkular.metrics.api.jaxrs.interceptor.EmptyPayloadInterceptor; +import org.hawkular.metrics.api.jaxrs.log.RestLogger; +import org.hawkular.metrics.api.jaxrs.log.RestLogging; import org.hawkular.metrics.api.jaxrs.param.ConvertersProvider; import org.hawkular.metrics.api.jaxrs.util.JacksonConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** - * Rest app initialization + * Rest app initialization. + * * @author Heiko W. Rupp */ @ApplicationPath("/") public class HawkularMetricsRestApp extends Application { - - private static final Logger logger = LoggerFactory.getLogger(HawkularMetricsRestApp.class); + private static final RestLogger log = RestLogging.getRestLogger(HawkularMetricsRestApp.class); public HawkularMetricsRestApp() { - logger.info("Hawkular Metrics starting .."); + log.infoAppStarting(); } /** @@ -94,10 +94,10 @@ public Set> getClasses() { boolean useVirtualClock = Boolean.valueOf(System.getProperty("hawkular.metrics.use-virtual-clock", "false")); if (useVirtualClock) { - logger.info("Deploying {}", VirtualClockHandler.class); + log.infof("Deploying %s", VirtualClockHandler.class.getCanonicalName()); classes.add(VirtualClockHandler.class); } else { - logger.info("Virtual clock is disabled"); + log.info("Virtual clock is disabled"); } // Add exception mapper providers diff --git a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/exception/mappers/ExceptionMapperUtils.java b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/exception/mappers/ExceptionMapperUtils.java index 1387ecc21..27aa553b2 100644 --- a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/exception/mappers/ExceptionMapperUtils.java +++ b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/exception/mappers/ExceptionMapperUtils.java @@ -21,8 +21,7 @@ import javax.ws.rs.core.Response.Status; import org.hawkular.metrics.api.jaxrs.model.ApiError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; import com.google.common.base.Throwables; @@ -30,15 +29,15 @@ * @author Jeeva Kandasamy */ public class ExceptionMapperUtils { - private static final Logger LOG = LoggerFactory.getLogger(ExceptionMapperUtils.class); + private static final Logger log = Logger.getLogger(ExceptionMapperUtils.class); public static Response buildResponse(Throwable exception, Status status) { Response response = Response.status(status) .entity(new ApiError(Throwables.getRootCause(exception).getMessage())) .type(MediaType.APPLICATION_JSON_TYPE) .build(); - if (LOG.isTraceEnabled()) { - LOG.trace("Turning " + exception.getClass().getCanonicalName() + " into a " + response.getStatus() + " " + + if (log.isTraceEnabled()) { + log.trace("Turning " + exception.getClass().getCanonicalName() + " into a " + response.getStatus() + " " + "response", exception); } return response; diff --git a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/AvailabilityHandler.java b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/AvailabilityHandler.java index 45d8084cf..83c93f492 100644 --- a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/AvailabilityHandler.java +++ b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/AvailabilityHandler.java @@ -66,8 +66,6 @@ import org.hawkular.metrics.core.api.MetricId; import org.hawkular.metrics.core.api.MetricType; import org.hawkular.metrics.core.api.MetricsService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -87,8 +85,6 @@ public class AvailabilityHandler { private static final long EIGHT_HOURS = MILLISECONDS.convert(8, HOURS); - private static final Logger logger = LoggerFactory.getLogger(AvailabilityHandler.class); - @Inject private MetricsService metricsService; @@ -243,11 +239,11 @@ public void findAvailabilityDataByTags( // @TODO Repeated code, refactor (in GaugeHandler also) metricsService.findAvailabilityByTags(tenantId, tags.getTags()).subscribe(m -> { if (m.isEmpty()) { - asyncResponse.resume(Response.noContent().build()); + asyncResponse.resume(noContent()); } else { asyncResponse.resume(Response.ok(m).build()); } - }, t -> asyncResponse.resume(Response.serverError().entity(new ApiError(t.getMessage())).build())); + }, t -> asyncResponse.resume(serverError(t))); } } @@ -286,12 +282,7 @@ public void findAvailabilityData( .map(AvailabilityDataPoint::new) .toList() .map(ApiUtils::collectionToResponse) - .subscribe( - asyncResponse::resume, - t -> { - logger.warn("Failed to fetch availability data", t); - serverError(t); - }); + .subscribe(asyncResponse::resume, t -> asyncResponse.resume(serverError(t))); } else if (bucketsCount != null && bucketDuration != null) { asyncResponse.resume(badRequest(new ApiError("Both buckets and bucketDuration parameters are used"))); } else { @@ -309,7 +300,7 @@ public void findAvailabilityData( metricsService.findAvailabilityStats(metricId, startTime, endTime, buckets) .map(ApiUtils::collectionToResponse) - .subscribe(asyncResponse::resume, ApiUtils::serverError); + .subscribe(asyncResponse::resume, t -> asyncResponse.resume(serverError(t))); } } @@ -350,11 +341,10 @@ public void findTaggedAvailabilityData( metricsService.findAvailabilityByTags(tenantId, tags.getTags()) .subscribe(m -> { // @TODO Repeated code, refactor and use Optional? if (m.isEmpty()) { - asyncResponse.resume(Response.noContent().build()); + asyncResponse.resume(noContent()); } else { asyncResponse.resume(Response.ok(m).build()); } - }, t -> asyncResponse.resume(Response.serverError().entity(new ApiError(t.getMessage())).build())); + }, t -> asyncResponse.resume(serverError(t))); } - } diff --git a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/CounterHandler.java b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/CounterHandler.java index d3b190a83..23daa24f5 100644 --- a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/CounterHandler.java +++ b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/CounterHandler.java @@ -57,8 +57,6 @@ import org.hawkular.metrics.core.api.MetricId; import org.hawkular.metrics.core.api.MetricType; import org.hawkular.metrics.core.api.MetricsService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -76,9 +74,6 @@ @Produces(APPLICATION_JSON) @Api(tags = "Counter") public class CounterHandler { - - private static Logger logger = LoggerFactory.getLogger(CounterHandler.class); - private static final long EIGHT_HOURS = MILLISECONDS.convert(8, HOURS); @Inject @@ -196,12 +191,7 @@ public void findCounterData( .map(CounterDataPoint::new) .toList() .map(ApiUtils::collectionToResponse) - .subscribe( - asyncResponse::resume, - t -> { - logger.warn("Failed to fetch counter data", t); - serverError(t); - }); + .subscribe(asyncResponse::resume, t -> asyncResponse.resume(serverError(t))); } @GET @@ -231,12 +221,6 @@ public void findRate( .map(GaugeDataPoint::new) .toList() .map(ApiUtils::collectionToResponse) - .subscribe( - asyncResponse::resume, - t -> { - logger.warn("Failed to fetch counter rate data", t); - serverError(t); - }); + .subscribe(asyncResponse::resume, t -> asyncResponse.resume(serverError(t))); } - } diff --git a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/VirtualClockHandler.java b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/VirtualClockHandler.java index e93ca6ff1..2caadcbbc 100644 --- a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/VirtualClockHandler.java +++ b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/VirtualClockHandler.java @@ -21,6 +21,8 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON; +import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.serverError; + import java.util.Map; import java.util.concurrent.TimeUnit; @@ -38,10 +40,8 @@ import org.hawkular.metrics.api.jaxrs.util.TestClock; import org.hawkular.metrics.api.jaxrs.util.VirtualClock; import org.hawkular.metrics.tasks.api.TaskScheduler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; -import com.google.common.base.Throwables; import com.google.common.collect.ImmutableMap; import rx.observers.TestSubscriber; @@ -55,11 +55,10 @@ @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) public class VirtualClockHandler { + private static Logger log = Logger.getLogger(VirtualClockHandler.class); public static final String PATH = "/clock"; - private static Logger logger = LoggerFactory.getLogger(VirtualClockHandler.class); - @Inject @TestClock private VirtualClock virtualClock; @@ -104,9 +103,8 @@ public Response waitForDuration(@QueryParam("duration") Duration duration) { return Response.ok().build(); } catch (Exception e) { - logger.warn("Failed to wait " + numMinutes + " minutes for task scheduler to complete work", e); - return Response.serverError().entity(ImmutableMap.of("errorMsg", Throwables.getStackTraceAsString(e))) - .build(); + log.warn("Failed to wait " + numMinutes + " minutes for task scheduler to complete work", e); + return serverError(e); } } diff --git a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/influx/InfluxSeriesHandler.java b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/influx/InfluxSeriesHandler.java index b153ae13b..278ab9d76 100644 --- a/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/influx/InfluxSeriesHandler.java +++ b/api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/influx/InfluxSeriesHandler.java @@ -80,10 +80,9 @@ import org.hawkular.metrics.core.api.Metric; import org.hawkular.metrics.core.api.MetricId; import org.hawkular.metrics.core.api.MetricsService; +import org.jboss.logging.Logger; import org.joda.time.Instant; import org.joda.time.Interval; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; @@ -101,7 +100,7 @@ @Produces(APPLICATION_JSON) @ApplicationScoped public class InfluxSeriesHandler { - private static final Logger LOG = LoggerFactory.getLogger(InfluxSeriesHandler.class); + private static final Logger log = Logger.getLogger(InfluxSeriesHandler.class); @Inject MetricsService metricsService; @@ -401,9 +400,7 @@ private List> applyMapping( for (DataPoint rnm : list) { retVal += rnm.getValue(); } - if (LOG.isDebugEnabled()) { - LOG.debug("Applying mean mapping, total = {}, size = {}", retVal, size); - } + log.debugf("Applying mean mapping, total = %d, size = %d", retVal, size); retVal /= size; break; case MAX: @@ -506,7 +503,7 @@ private List> applyMapping( retVal = Math.sqrt(sd); break; default: - LOG.warn("Mapping of '{}' function not yet supported", function); + log.warnf("Mapping of '%s' function not supported yet", function); } if (isSingleValue) { out.add(new DataPoint<>(firstElementInList.getTimestamp(), retVal)); diff --git a/api/metrics-api-jaxrs/src/test/resources/log4j.xml b/api/metrics-api-jaxrs/src/test/resources/log4j.xml deleted file mode 100644 index de6fc13a9..000000000 --- a/api/metrics-api-jaxrs/src/test/resources/log4j.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/clients/ptranslator/README.adoc b/clients/ptranslator/README.adoc index 2dabbfdc1..3820da814 100644 --- a/clients/ptranslator/README.adoc +++ b/clients/ptranslator/README.adoc @@ -106,21 +106,6 @@ LoadPlugin network TIP: Don't forget to start a Hawkular Metrics web server as well. -=== With the start script - -You can use the provided `start.sh` script to start the server (this will build the source first). - -Make sure to specify a configuration file on the command line: - -[source,bash] ----- -./start.sh -c ptrans.conf ----- - -This method does not allow to configure logging and works on *nix systems only. - -=== With Maven - Once the project is built, simply run the following command: [source,bash] @@ -128,10 +113,10 @@ Once the project is built, simply run the following command: mvn exec:java ---- -By default, the log4j and ptrans.conf files at the project base directory will be used. +By default, the `logging-dev.properties` and `ptrans.conf` files at the project base directory will be used. If you want to use your own files: [source,bash] ---- -mvn exec:java -Ddev.log4j.configuration= -Ddev.ptrans.conf= +mvn exec:java -Dlogback.configurationFile= -Ddev.ptrans.conf= ---- diff --git a/clients/ptranslator/log4j-dev.xml b/clients/ptranslator/log4j-dev.xml deleted file mode 100644 index 8861aa6e7..000000000 --- a/clients/ptranslator/log4j-dev.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/clients/ptranslator/pom.xml b/clients/ptranslator/pom.xml index 5de906c83..b6e35851c 100644 --- a/clients/ptranslator/pom.xml +++ b/clients/ptranslator/pom.xml @@ -38,7 +38,7 @@ true hawkular_metrics_ptrans_integration_tests - ${project.basedir}/log4j-dev.xml + ${project.basedir}/src/main/resources/logback-test.xml ${project.basedir}/ptrans.conf @@ -59,14 +59,12 @@ 1.0.7 - org.slf4j - slf4j-log4j12 - ${slf4j.version} + org.jboss.logging + jboss-logging - log4j - log4j - ${log4j.version} + ch.qos.logback + logback-classic commons-cli @@ -107,10 +105,29 @@ war test + + + org.jboss.logging + jboss-logging-annotations + provided + + + org.jboss.logging + jboss-logging-processor + provided + ptrans + + + ${project.basedir}/src/main/resources + + logback-test.xml + + + org.apache.maven.plugins @@ -149,8 +166,8 @@ org.hawkular.metrics.clients.ptrans.Main - log4j.configuration - file:${dev.log4j.configuration} + logback.configurationFile + ${dev.logback.configuration} diff --git a/clients/ptranslator/src/assembly/dist/assembly.xml b/clients/ptranslator/src/assembly/dist/assembly.xml index 1ff358bfd..25a848ee0 100644 --- a/clients/ptranslator/src/assembly/dist/assembly.xml +++ b/clients/ptranslator/src/assembly/dist/assembly.xml @@ -33,7 +33,6 @@ . LICENSE - log4j.xml ptrans.conf 644 @@ -45,6 +44,10 @@ true 644 + + ${project.basedir}/src/main/resources/logback.xml + 644 + ${project.build.directory}/${project.build.finalName}-all.jar 644 diff --git a/clients/ptranslator/src/assembly/dist/assets/README b/clients/ptranslator/src/assembly/dist/assets/README index 5bba7c1a6..414bab416 100644 --- a/clients/ptranslator/src/assembly/dist/assets/README +++ b/clients/ptranslator/src/assembly/dist/assets/README @@ -8,9 +8,9 @@ The following command starts ptrans: java -jar ptrans-all.jar -c -By default, ptrans logs everything to the console, but you can make use your own log4j configuration file: +By default, ptrans logs everything to the console, but you can use your own logback configuration file: -java -jar ptrans-all.jar -Dlog4j.configuration=file: -c +java -jar ptrans-all.jar -Dlogback.configurationFile= -c === STOPPING diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/DemuxHandler.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/DemuxHandler.java index c89ce336e..1dd024237 100644 --- a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/DemuxHandler.java +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/DemuxHandler.java @@ -19,8 +19,7 @@ import java.util.List; import org.hawkular.metrics.clients.ptrans.syslog.SyslogEventDecoder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; @@ -34,7 +33,7 @@ * @author Heiko W. Rupp */ public class DemuxHandler extends ByteToMessageDecoder { - private static final Logger logger = LoggerFactory.getLogger(DemuxHandler.class); + private static final Logger log = Logger.getLogger(DemuxHandler.class); private ChannelInboundHandlerAdapter forwardingHandler; @@ -54,8 +53,8 @@ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, @SuppressWarnings( ChannelPipeline pipeline = ctx.pipeline(); String data = msg.toString(CharsetUtil.UTF_8); - if (logger.isDebugEnabled()) { - logger.debug("Incoming: [" + data + "]"); + if (log.isTraceEnabled()) { + log.trace("Incoming: [" + data + "]"); } boolean done = false; @@ -68,7 +67,9 @@ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, @SuppressWarnings( } if (!done) { - logger.warn("Unknown input [" + data + "], ignoring"); + if (log.isTraceEnabled()) { + log.trace("Unknown input [" + data + "], ignoring"); + } msg.clear(); ctx.close(); } diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/Main.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/Main.java index f8419d68c..37ff66982 100644 --- a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/Main.java +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/Main.java @@ -31,8 +31,8 @@ import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Options; import org.apache.commons.cli.PosixParser; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.hawkular.metrics.clients.ptrans.log.PTransLogger; +import org.hawkular.metrics.clients.ptrans.log.PTransLogging; import jnr.posix.POSIXFactory; @@ -45,7 +45,7 @@ * @author Thomas Segismont */ public class Main { - private static final Logger LOG = LoggerFactory.getLogger(Main.class); + private static final PTransLogger log = PTransLogging.getPTransLogger(Main.class); private final String[] args; private final OptionsFactory optionsFactory; @@ -147,7 +147,7 @@ public static void main(String[] args) { try { main.start(); } catch (Exception e) { - LOG.error("Exception on startup", e); + log.errorStartupProblem(e); System.exit(1); } } diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/PTrans.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/PTrans.java index 858c296ec..ffac9f727 100644 --- a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/PTrans.java +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/PTrans.java @@ -35,11 +35,11 @@ import org.hawkular.metrics.clients.ptrans.collectd.CollectdServer; import org.hawkular.metrics.clients.ptrans.ganglia.GangliaChannelInitializer; import org.hawkular.metrics.clients.ptrans.graphite.GraphiteServer; +import org.hawkular.metrics.clients.ptrans.log.PTransLogger; +import org.hawkular.metrics.clients.ptrans.log.PTransLogging; import org.hawkular.metrics.clients.ptrans.statsd.StatsdChannelInitializer; import org.hawkular.metrics.clients.ptrans.syslog.TcpChannelInitializer; import org.hawkular.metrics.clients.ptrans.syslog.UdpChannelInitializer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import io.netty.bootstrap.Bootstrap; import io.netty.bootstrap.ServerBootstrap; @@ -60,7 +60,7 @@ * @author Thomas Segismont */ public class PTrans { - private static final Logger LOG = LoggerFactory.getLogger(PTrans.class); + private static final PTransLogger log = PTransLogging.getPTransLogger(PTrans.class); private final Configuration configuration; @@ -91,7 +91,7 @@ public PTrans(Configuration configuration) { * Starts this PTrans instance. the calling thread will be blocked until another thread calls {@link #stop()}. */ public void start() { - LOG.info("Starting ptrans..."); + log.infoStarting(); group = new NioEventLoopGroup(); workerGroup = new NioEventLoopGroup(); @@ -113,7 +113,7 @@ public void start() { .localAddress(configuration.getTcpPort()) .childHandler(new TcpChannelInitializer(nettyToVertxHandler)); ChannelFuture tcpBindFuture = serverBootstrap.bind().syncUninterruptibly(); - LOG.info("Server listening on TCP {}", tcpBindFuture.channel().localAddress()); + log.infoServerListening("Server", "TCP", tcpBindFuture.channel().localAddress()); closeFutures.add(tcpBindFuture.channel().closeFuture()); } @@ -124,7 +124,7 @@ public void start() { .localAddress(configuration.getUdpPort()) .handler(new UdpChannelInitializer(nettyToVertxHandler)); ChannelFuture udpBindFuture = udpBootstrap.bind().syncUninterruptibly(); - LOG.info("Syslogd listening on UDP {}", udpBindFuture.channel().localAddress()); + log.infoServerListening("Syslogd", "UDP", udpBindFuture.channel().localAddress()); closeFutures.add(udpBindFuture.channel().closeFuture()); } @@ -151,12 +151,12 @@ public void start() { .option(ChannelOption.IP_MULTICAST_IF, mcIf) .localAddress(gangliaSocket) .handler(new GangliaChannelInitializer(nettyToVertxHandler)); - LOG.trace("Ganglia bootstrap is {}", gangliaBootstrap); + log.tracef("Ganglia bootstrap is %s", gangliaBootstrap); ChannelFuture gangliaBindFuture = gangliaBootstrap.bind().syncUninterruptibly(); - LOG.info("Ganglia listening on UDP {}", gangliaBindFuture.channel().localAddress()); + log.infoServerListening("Ganglia", "UDP", gangliaBindFuture.channel().localAddress()); DatagramChannel gangliaChannel = (DatagramChannel) gangliaBindFuture.channel(); gangliaChannel.joinGroup(gangliaSocket, mcIf); - LOG.trace("Joined the Ganglia group"); + log.trace("Joined the Ganglia group"); closeFutures.add(gangliaChannel.closeFuture()); } @@ -167,23 +167,23 @@ public void start() { .localAddress(configuration.getStatsDport()) .handler(new StatsdChannelInitializer(nettyToVertxHandler)); ChannelFuture statsdBindFuture = statsdBootstrap.bind().syncUninterruptibly(); - LOG.info("Statsd listening on UDP {}", statsdBindFuture.channel().localAddress()); + log.infoServerListening("Statsd", "UDP", statsdBindFuture.channel().localAddress()); closeFutures.add(statsdBindFuture.channel().closeFuture()); } if (services.contains(Service.GRAPHITE)) { vertx.deployVerticle(new GraphiteServer(configuration), handler -> { - LOG.info("Graphite listening on TCP {}", configuration.getGraphitePort()); + log.infoServerListening("Graphite", "TCP", configuration.getGraphitePort()); }); } if (services.contains(Service.COLLECTD)) { vertx.deployVerticle(new CollectdServer(configuration), handler -> { - LOG.info("Collectd listening on UDP {}", configuration.getCollectdPort()); + log.infoServerListening("Collectd", "UDP", configuration.getCollectdPort()); }); } - LOG.info("ptrans started"); + log.infoStarted(); closeFutures.forEach(ChannelFuture::syncUninterruptibly); } @@ -192,7 +192,7 @@ public void start() { * Stops this PTrans instance. */ public void stop() { - LOG.info("Stopping ptrans..."); + log.infoStopping(); group.shutdownGracefully().syncUninterruptibly(); workerGroup.shutdownGracefully().syncUninterruptibly(); Set deploymentIDs = vertx.deploymentIDs().stream() @@ -221,6 +221,6 @@ public void stop() { } catch (InterruptedException e) { Thread.currentThread().interrupt(); } - LOG.info("ptrans stopped"); + log.infoStopped(); } } diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/backend/MetricsSender.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/backend/MetricsSender.java index 0be091f25..918f7155d 100644 --- a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/backend/MetricsSender.java +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/backend/MetricsSender.java @@ -25,8 +25,7 @@ import org.hawkular.metrics.client.common.MetricBuffer; import org.hawkular.metrics.client.common.SingleMetric; import org.hawkular.metrics.clients.ptrans.Configuration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; import io.vertx.core.AbstractVerticle; import io.vertx.core.Future; @@ -48,7 +47,7 @@ * @author Thomas Segismont */ public class MetricsSender extends AbstractVerticle { - private static final Logger LOG = LoggerFactory.getLogger(MetricsSender.class); + private static final Logger log = Logger.getLogger(MetricsSender.class); private final String host; private final int port; @@ -150,9 +149,9 @@ private void send(List metrics) { HttpClientRequest req = httpClient.post(postUri, response -> { connectionsUsed--; if (response.statusCode() != 200) { - if (LOG.isTraceEnabled()) { + if (log.isTraceEnabled()) { response.bodyHandler(msg -> { - LOG.trace("Could not send metrics: " + response.statusCode() + " : " + msg.toString()); + log.trace("Could not send metrics: " + response.statusCode() + " : " + msg.toString()); }); } buffer.reInsert(metrics); @@ -167,7 +166,7 @@ private void send(List metrics) { req.putHeader(Constants.TENANT_HEADER_NAME, tenant); req.exceptionHandler(err -> { connectionsUsed--; - LOG.trace("Could not send metrics", err); + log.trace("Could not send metrics", err); buffer.reInsert(metrics); metricInserted(); }); diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/CollectdServer.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/CollectdServer.java index 136ec37b6..1b3501f3e 100644 --- a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/CollectdServer.java +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/CollectdServer.java @@ -30,8 +30,6 @@ import org.hawkular.metrics.clients.ptrans.collectd.event.ValueListEvent; import org.hawkular.metrics.clients.ptrans.collectd.packet.CollectdPacket; import org.hawkular.metrics.clients.ptrans.collectd.packet.CollectdPacketDecoder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import io.vertx.core.AbstractVerticle; import io.vertx.core.Future; @@ -42,8 +40,6 @@ * @author Thomas Segismont */ public class CollectdServer extends AbstractVerticle { - private static final Logger LOG = LoggerFactory.getLogger(CollectdServer.class); - private final int port; private final CollectdPacketDecoder packetDecoder; private final CollectdEventsDecoder eventsDecoder; diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/event/CollectdEventsDecoder.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/event/CollectdEventsDecoder.java index 0e41c0ebb..7afe3ebca 100644 --- a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/event/CollectdEventsDecoder.java +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/event/CollectdEventsDecoder.java @@ -29,14 +29,13 @@ import org.hawkular.metrics.clients.ptrans.collectd.packet.StringPart; import org.hawkular.metrics.clients.ptrans.collectd.packet.ValuePart; import org.hawkular.metrics.clients.ptrans.collectd.packet.Values; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; /** * @author Thomas Segismont */ public final class CollectdEventsDecoder { - private static final Logger LOG = LoggerFactory.getLogger(CollectdEventsDecoder.class); + private static final Logger log = Logger.getLogger(CollectdEventsDecoder.class); private static final String EMPTY_STRING_VALUE = ""; @@ -81,17 +80,17 @@ public List decode(CollectdPacket packet) { host, timestamp, pluginName, pluginInstance, typeName, typeInstance, getValues(part).getData(), interval ); - LOG.trace("Decoded ValueListEvent: {}", event); + log.tracef("Decoded ValueListEvent: %s", event); events.add(event); break; default: - LOG.debug("Skipping unknown part type: {}", partType); + log.tracef("Skipping unknown part type: %s", partType); } } - if (LOG.isTraceEnabled()) { + if (log.isTraceEnabled()) { long stop = System.currentTimeMillis(); - LOG.trace("Decoded events in {} ms", stop - start); + log.tracef("Decoded events in %d ms", stop - start); } return events; diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/packet/CollectdPacketDecoder.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/packet/CollectdPacketDecoder.java index 83fa6ea93..48acd3ee5 100644 --- a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/packet/CollectdPacketDecoder.java +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/collectd/packet/CollectdPacketDecoder.java @@ -21,8 +21,7 @@ import java.util.List; import org.hawkular.metrics.clients.ptrans.collectd.event.DataType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; @@ -35,7 +34,7 @@ * @author Thomas Segismont */ public final class CollectdPacketDecoder { - private static final Logger LOG = LoggerFactory.getLogger(CollectdPacketDecoder.class); + private static final Logger log = Logger.getLogger(CollectdPacketDecoder.class); public CollectdPacket decode(DatagramPacket packet) { long start = System.currentTimeMillis(); @@ -80,20 +79,20 @@ public CollectdPacket decode(DatagramPacket packet) { } //noinspection ConstantConditions if (part != null) { - LOG.trace("Decoded part: {}", part); + log.tracef("Decoded part: %s", part); parts.add(part); } } - if (LOG.isTraceEnabled()) { + if (log.isTraceEnabled()) { long stop = System.currentTimeMillis(); - LOG.trace("Decoded datagram in {} ms", stop - start); + log.tracef("Decoded datagram in %d ms", stop - start); } if (parts.size() > 0) { return new CollectdPacket(parts); } else { - LOG.debug("No parts decoded, no CollectdPacket output"); + log.trace("No parts decoded, no CollectdPacket output"); return null; } } @@ -139,7 +138,7 @@ private Values readValuePartContent(ByteBuf content, int length) { data.add(Double.longBitsToDouble(ByteBufUtil.swapLong(content.readLong()))); break; default: - LOG.debug("Skipping unknown data type: {}", dataType); + log.tracef("Skipping unknown data type: %s", dataType); } } // Skip any additionnal bytes diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/graphite/GraphiteServer.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/graphite/GraphiteServer.java index 73d1cfa99..d5cc9b5de 100644 --- a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/graphite/GraphiteServer.java +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/graphite/GraphiteServer.java @@ -23,8 +23,7 @@ import org.hawkular.metrics.client.common.SingleMetric; import org.hawkular.metrics.clients.ptrans.Configuration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; import io.vertx.core.AbstractVerticle; import io.vertx.core.Future; @@ -38,7 +37,7 @@ * @author Thomas Segismont */ public class GraphiteServer extends AbstractVerticle { - private static final Logger LOG = LoggerFactory.getLogger(GraphiteServer.class); + private static final Logger log = Logger.getLogger(GraphiteServer.class); private final int port; private final RecordParser recordParser; @@ -68,7 +67,7 @@ private void handleRecord(Buffer buf) { String[] items = msg.split(" "); if (items.length != 3) { - LOG.debug("Unknown data format for '{}', skipping", msg); + log.tracef("Unknown data format for '%s', skipping", msg); return; } diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/log/PTransLogger.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/log/PTransLogger.java new file mode 100644 index 000000000..eec9a2b6f --- /dev/null +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/log/PTransLogger.java @@ -0,0 +1,62 @@ +/* + * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hawkular.metrics.clients.ptrans.log; + +import static org.jboss.logging.Logger.Level.ERROR; +import static org.jboss.logging.Logger.Level.INFO; + +import org.jboss.logging.BasicLogger; +import org.jboss.logging.annotations.Cause; +import org.jboss.logging.annotations.LogMessage; +import org.jboss.logging.annotations.Message; +import org.jboss.logging.annotations.MessageLogger; +import org.jboss.logging.annotations.ValidIdRange; + +/** + * PTrans logging messages. + * + * @author Thomas Segismont + */ +@MessageLogger(projectCode = "HAWKMETRICS") +@ValidIdRange(min = 500000, max = 509999) +public interface PTransLogger extends BasicLogger { + + @LogMessage(level = INFO) + @Message(id = 500001, value = "Starting ptrans...") + void infoStarting(); + + @LogMessage(level = ERROR) + @Message(id = 500002, value = "Exception on startup") + void errorStartupProblem(@Cause Exception e); + + @LogMessage(level = INFO) + @Message(id = 500003, value = "%s listening on %s %s") + void infoServerListening(String serverType, String protocol, Object address); + + @LogMessage(level = INFO) + @Message(id = 500004, value = "ptrans started") + void infoStarted(); + + @LogMessage(level = INFO) + @Message(id = 500005, value = "Stopping ptrans...") + void infoStopping(); + + @LogMessage(level = INFO) + @Message(id = 500006, value = "ptrans stopped") + void infoStopped(); +} diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/log/PTransLogging.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/log/PTransLogging.java new file mode 100644 index 000000000..ff4bd8d11 --- /dev/null +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/log/PTransLogging.java @@ -0,0 +1,36 @@ +/* + * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hawkular.metrics.clients.ptrans.log; + +import org.jboss.logging.Logger; + +/** + * Simplify logger lookup. + * + * @author Thomas Segismont + */ +public class PTransLogging { + + public static PTransLogger getPTransLogger(Class clazz) { + return Logger.getMessageLogger(PTransLogger.class, clazz.getName()); + } + + private PTransLogging() { + // Utility class + } +} diff --git a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/syslog/DecoderUtil.java b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/syslog/DecoderUtil.java index 394ed45d9..3b005baa1 100644 --- a/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/syslog/DecoderUtil.java +++ b/clients/ptranslator/src/main/java/org/hawkular/metrics/clients/ptrans/syslog/DecoderUtil.java @@ -22,8 +22,7 @@ import java.util.regex.Pattern; import org.hawkular.metrics.client.common.SingleMetric; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; import io.netty.buffer.ByteBuf; import io.netty.util.CharsetUtil; @@ -40,8 +39,8 @@ * @author Heiko W. Rupp */ public class DecoderUtil { + private static final Logger log = Logger.getLogger(DecoderUtil.class); - private static final Logger logger = LoggerFactory.getLogger(DecoderUtil.class); private static Pattern statsDPattern = Pattern.compile("([A-Za-z\\.]+):([0-9\\.]+)\\|[a-z]"); public static void decodeTheBuffer(ByteBuf data, List out) { @@ -101,9 +100,7 @@ public static void decodeTheBuffer(ByteBuf data, List out) { SingleMetric metric = new SingleMetric(source,now, value); metrics.add(metric); } catch (NumberFormatException e) { - if (logger.isTraceEnabled()) { - logger.debug("Unknown number format for " + entry + ", skipping"); - } + log.tracef("Unknown number format for %s, skipping", entry); } } out.add(metrics); diff --git a/clients/ptranslator/src/main/resources/log4j.xml b/clients/ptranslator/src/main/resources/logback-test.xml similarity index 55% rename from clients/ptranslator/src/main/resources/log4j.xml rename to clients/ptranslator/src/main/resources/logback-test.xml index 0538d897b..67946e015 100644 --- a/clients/ptranslator/src/main/resources/log4j.xml +++ b/clients/ptranslator/src/main/resources/logback-test.xml @@ -1,4 +1,3 @@ - - - - - - - - - - + + + + %-5level %date{ISO8601} [%thread] %logger - %message%n + - - - - + - + + + + \ No newline at end of file diff --git a/clients/ptranslator/src/assembly/dist/assets/log4j.xml b/clients/ptranslator/src/main/resources/logback.xml similarity index 55% rename from clients/ptranslator/src/assembly/dist/assets/log4j.xml rename to clients/ptranslator/src/main/resources/logback.xml index f4ed35881..c074973ec 100644 --- a/clients/ptranslator/src/assembly/dist/assets/log4j.xml +++ b/clients/ptranslator/src/main/resources/logback.xml @@ -1,4 +1,3 @@ - - - - - - - - - - + + + + %-5level %date{ISO8601} [%thread] %logger - %message%n + - - - + + - - + \ No newline at end of file diff --git a/clients/ptranslator/start.sh b/clients/ptranslator/start.sh deleted file mode 100755 index e38114a17..000000000 --- a/clients/ptranslator/start.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -# -# Copyright 2014-2015 Red Hat, Inc. and/or its affiliates -# and other contributors as indicated by the @author tags. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - -# set -x - -echo "(Re)building the commons library" -cd ../common -mvn install -if [ $? -ne 0 ] -then - cd - - exit 1; -fi -cd - - -echo "(Re)building ptrans" -mvn install -if [ $? -ne 0 ] -then - exit 1; -fi - -java -Djava.net.preferIPv4Stack=true -Dlog4j.configuration=file:log4j-dev.xml -jar target/ptrans-all.jar $* diff --git a/core/metrics-core-api/pom.xml b/core/metrics-core-api/pom.xml index 2e73d8854..19e41f00a 100644 --- a/core/metrics-core-api/pom.xml +++ b/core/metrics-core-api/pom.xml @@ -40,11 +40,6 @@ guava - - org.slf4j - slf4j-api - - io.reactivex rxjava diff --git a/core/metrics-core-impl/pom.xml b/core/metrics-core-impl/pom.xml index 5b39c7a55..d4542534e 100644 --- a/core/metrics-core-impl/pom.xml +++ b/core/metrics-core-impl/pom.xml @@ -60,19 +60,20 @@ ${project.version} - - org.slf4j - slf4j-log4j12 - ${slf4j.version} - test - - org.apache.commons commons-math3 3.4.1 + + + + ch.qos.logback + logback-classic + test + + junit junit @@ -91,6 +92,20 @@ test + + + + org.jboss.logging + jboss-logging-annotations + provided + + + + org.jboss.logging + jboss-logging-processor + provided + + diff --git a/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/CreateTenants.java b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/CreateTenants.java index 637966d96..d0ff421d1 100644 --- a/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/CreateTenants.java +++ b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/CreateTenants.java @@ -18,11 +18,11 @@ import java.util.concurrent.CountDownLatch; +import org.hawkular.metrics.core.impl.log.CoreLogger; +import org.hawkular.metrics.core.impl.log.CoreLogging; import org.hawkular.metrics.tasks.api.Task2; import org.hawkular.metrics.tasks.api.Trigger; import org.joda.time.DateTime; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.datastax.driver.core.ResultSet; @@ -33,8 +33,7 @@ * @author jsanda */ public class CreateTenants implements Action1 { - - private static final Logger logger = LoggerFactory.getLogger(CreateTenants.class); + private static final CoreLogger log = CoreLogging.getCoreLogger(CreateTenants.class); public static final String TASK_NAME = "create-tenants"; @@ -61,13 +60,13 @@ public void call(Task2 task) { tenantsService.createTenants(bucket, tenantIds).subscribe( aVoid -> {}, t -> { - logger.warn("Tenant creation failed", t); + log.warnTenantCreationFailed(t); latch.countDown(); }, () -> dataAccess.deleteTenantsBucket(bucket).subscribe( resultSet -> {}, t -> { - logger.warn("Failed to delete tenants bucket [" + bucket + "]", t); + log.warnFailedToDeleteTenantBucket(bucket, t); latch.countDown(); }, latch::countDown @@ -75,7 +74,7 @@ public void call(Task2 task) { ); try { latch.await(); - } catch (InterruptedException e) { + } catch (InterruptedException ignored) { } } @@ -87,5 +86,4 @@ private long getBucket(Trigger trigger) { private Observable tenantDoesNotExist(String tenantId) { return dataAccess.findTenant(tenantId).map(ResultSet::isExhausted); } - } diff --git a/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/GenerateRate.java b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/GenerateRate.java index e9a30902a..c31090eea 100644 --- a/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/GenerateRate.java +++ b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/GenerateRate.java @@ -28,9 +28,9 @@ import org.hawkular.metrics.core.api.Metric; import org.hawkular.metrics.core.api.MetricId; import org.hawkular.metrics.core.api.MetricsService; +import org.hawkular.metrics.core.impl.log.CoreLogger; +import org.hawkular.metrics.core.impl.log.CoreLogging; import org.hawkular.metrics.tasks.api.Task2; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import rx.Observable; import rx.functions.Action1; @@ -39,8 +39,7 @@ * Calculates and persists rates for all counter metrics of a single tenant. */ public class GenerateRate implements Action1 { - - private static final Logger logger = LoggerFactory.getLogger(GenerateRate.class); + private static final CoreLogger log = CoreLogging.getCoreLogger(GenerateRate.class); public static final String TASK_NAME = "generate-rates"; @@ -53,7 +52,7 @@ public GenerateRate(MetricsService metricsService) { @Override public void call(Task2 task) { // TODO We need to make this fault tolerant. See HWKMETRICS-213 for details. - logger.info("Generating rate for {}", task); + log.debugf("Generating rate for %s", task); String tenant = task.getParameters().get("tenant"); long start = task.getTrigger().getTriggerTime(); long end = start + TimeUnit.MINUTES.toMillis(1); @@ -72,13 +71,14 @@ public void call(Task2 task) { aVoid -> { }, t -> { - logger.warn("There was an error persisting rates for {tenant= " + tenant + ", start= " + - start + ", end= " + end + "}", t); + log.warnFailedToPersistRates(tenant, start, end, t); latch.countDown(); }, () -> { - logger.debug("Successfully persisted rate data for {tenant= " + tenant + ", start= " + - start + ", end= " + end + "}"); + if (log.isDebugEnabled()) { + log.debug("Successfully persisted rate data for {tenant= " + tenant + ", start= " + start + + ", end= " + end + "}"); + } latch.countDown(); } ); diff --git a/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/MetricsServiceImpl.java b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/MetricsServiceImpl.java index b241c05b2..7d01289aa 100644 --- a/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/MetricsServiceImpl.java +++ b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/MetricsServiceImpl.java @@ -57,10 +57,11 @@ import org.hawkular.metrics.core.api.MetricId; import org.hawkular.metrics.core.api.MetricType; import org.hawkular.metrics.core.api.MetricsService; -import org.hawkular.metrics.core.api.MetricsThreadFactory; import org.hawkular.metrics.core.api.Retention; import org.hawkular.metrics.core.api.Tenant; import org.hawkular.metrics.core.api.TenantAlreadyExistsException; +import org.hawkular.metrics.core.impl.log.CoreLogger; +import org.hawkular.metrics.core.impl.log.CoreLogging; import org.hawkular.metrics.core.impl.transformers.ItemsToSetTransformer; import org.hawkular.metrics.core.impl.transformers.MetricsIndexRowTransformer; import org.hawkular.metrics.core.impl.transformers.TagsIndexRowTransformer; @@ -69,8 +70,6 @@ import org.hawkular.rx.cassandra.driver.RxUtil; import org.joda.time.DateTime; import org.joda.time.Duration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.codahale.metrics.Meter; import com.codahale.metrics.MetricRegistry; @@ -96,7 +95,7 @@ * @author John Sanda */ public class MetricsServiceImpl implements MetricsService, TenantsService { - private static final Logger logger = LoggerFactory.getLogger(MetricsServiceImpl.class); + private static final CoreLogger log = CoreLogging.getCoreLogger(MetricsServiceImpl.class); /** * In seconds. @@ -191,7 +190,7 @@ public void startUp(Session session, String keyspace, boolean resetDb, boolean c schemaManager.createSchema(keyspace); } session.execute("USE " + keyspace); - logger.info("Using a key space of '{}'", keyspace); + log.infoKeyspaceUsed(keyspace); metricsTasks = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(4, new MetricsThreadFactory())); loadDataRetentions(); @@ -333,10 +332,9 @@ public void onSuccess(Set dataRetentionsSet) { @Override public void onFailure(Throwable t) { - logger.warn("Failed to load data retentions for {tenantId: " + tenantId + ", metricType: " + - type.getText() + "}", t); + log.warnDataRetentionLoadingFailure(tenantId, type, t); latch.countDown(); - // TODO We probably should not let initialization proceed on this error + // TODO We probably should not let initialization proceed on this error (then change log level to FATAL) } } @@ -606,7 +604,7 @@ public Observable addDataPoints(MetricType metricType, Observable tenantUpdates = updateTenantBuckets(metrics); Observable indexUpdates = dataAccess.updateMetricsIndex(metrics) - .doOnNext(batchSize -> logger.debug("Inserted {} {} metrics into metrics_idx", batchSize, metricType)); + .doOnNext(batchSize -> log.tracef("Inserted %d %s metrics into metrics_idx", batchSize, metricType)); return Observable.concat(updates, indexUpdates, tenantUpdates) .takeLast(1) .map(count -> null); diff --git a/core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/MetricsThreadFactory.java b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/MetricsThreadFactory.java similarity index 60% rename from core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/MetricsThreadFactory.java rename to core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/MetricsThreadFactory.java index 102dcb0d7..8a6b21d04 100644 --- a/core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/MetricsThreadFactory.java +++ b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/MetricsThreadFactory.java @@ -14,37 +14,35 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.hawkular.metrics.core.api; +package org.hawkular.metrics.core.impl; +import java.lang.Thread.UncaughtExceptionHandler; import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.hawkular.metrics.core.impl.log.CoreLogger; +import org.hawkular.metrics.core.impl.log.CoreLogging; /** * @author John Sanda */ -public class MetricsThreadFactory implements ThreadFactory, Thread.UncaughtExceptionHandler { +public class MetricsThreadFactory implements ThreadFactory, UncaughtExceptionHandler { + private static final CoreLogger log = CoreLogging.getCoreLogger(MetricsThreadFactory.class); - private static final Logger logger = LoggerFactory.getLogger(MetricsThreadFactory.class); + private static final String METRICS_THREAD_POOL = "MetricsThreadPool"; private AtomicInteger threadNumber = new AtomicInteger(0); - private String poolName = "MetricsThreadPool"; - @Override public Thread newThread(Runnable r) { - Thread t = new Thread(r, poolName + "-" + threadNumber.getAndIncrement()); + Thread t = new Thread(r, METRICS_THREAD_POOL + "-" + threadNumber.getAndIncrement()); t.setDaemon(false); t.setUncaughtExceptionHandler(this); - return t; } @Override - public void uncaughtException(Thread t, Throwable e) { - logger.error("Uncaught exception on scheduled thread [{}]", t.getName(), e); + public void uncaughtException(Thread thread, Throwable t) { + log.errorUncaughtExceptionOnScheduledThread(thread.getName(), t); } - } diff --git a/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/log/CoreLogger.java b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/log/CoreLogger.java new file mode 100644 index 000000000..22e000e28 --- /dev/null +++ b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/log/CoreLogger.java @@ -0,0 +1,62 @@ +/* + * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.hawkular.metrics.core.impl.log; + +import static org.jboss.logging.Logger.Level.INFO; +import static org.jboss.logging.Logger.Level.WARN; + +import org.hawkular.metrics.core.api.MetricType; +import org.jboss.logging.BasicLogger; +import org.jboss.logging.annotations.Cause; +import org.jboss.logging.annotations.LogMessage; +import org.jboss.logging.annotations.Message; +import org.jboss.logging.annotations.MessageLogger; +import org.jboss.logging.annotations.ValidIdRange; + +/** + * Core library logging messages. + * + * @author Thomas Segismont + */ +@MessageLogger(projectCode = "HAWKMETRICS") +@ValidIdRange(min = 100000, max = 109999) +public interface CoreLogger extends BasicLogger { + + @LogMessage(level = INFO) + @Message(id = 100001, value = "Using a key space of '%s'") + void infoKeyspaceUsed(String keyspace); + + @LogMessage(level = WARN) + @Message(id = 100002, value = "Uncaught exception on scheduled thread [%s]") + void errorUncaughtExceptionOnScheduledThread(String threadName, @Cause Throwable t); + + @LogMessage(level = WARN) + @Message(id = 100003, value = "Tenant creation failed") + void warnTenantCreationFailed(@Cause Throwable t); + + @LogMessage(level = WARN) + @Message(id = 100004, value = "Failed to delete tenants bucket [%d]") + void warnFailedToDeleteTenantBucket(Long bucket, @Cause Throwable t); + + @LogMessage(level = WARN) + @Message(id = 100005, value = "Failed to load data retentions for {tenantId: %s, metricType: %s}") + void warnDataRetentionLoadingFailure(String tenantId, MetricType metricType, @Cause Throwable t); + + @LogMessage(level = WARN) + @Message(id = 100006, value = "There was an error persisting rates for {tenant= %s, start= %d, end= %d}") + void warnFailedToPersistRates(String tenantId, Long start, Long end, @Cause Throwable t); +} diff --git a/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/log/CoreLogging.java b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/log/CoreLogging.java new file mode 100644 index 000000000..64ba1cdba --- /dev/null +++ b/core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/log/CoreLogging.java @@ -0,0 +1,36 @@ +/* + * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hawkular.metrics.core.impl.log; + +import org.jboss.logging.Logger; + +/** + * Simplify logger lookup. + * + * @author Thomas Segismont + */ +public class CoreLogging { + + public static CoreLogger getCoreLogger(Class clazz) { + return Logger.getMessageLogger(CoreLogger.class, clazz.getName()); + } + + private CoreLogging() { + // Utility class + } +} diff --git a/core/metrics-core-impl/src/main/resources/log4j.properties b/core/metrics-core-impl/src/main/resources/log4j.properties deleted file mode 100644 index 7d20a42fb..000000000 --- a/core/metrics-core-impl/src/main/resources/log4j.properties +++ /dev/null @@ -1,23 +0,0 @@ -# -# Copyright 2014-2015 Red Hat, Inc. and/or its affiliates -# and other contributors as indicated by the @author tags. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -log4j.rootLogger=INFO,stdout - -# stdout -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%5p %d{HH:mm:ss,SSS} %m%n \ No newline at end of file diff --git a/core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/GenerateRateITest.java b/core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/GenerateRateITest.java index cf7984c06..b904793a6 100644 --- a/core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/GenerateRateITest.java +++ b/core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/GenerateRateITest.java @@ -33,8 +33,6 @@ import org.hawkular.metrics.tasks.api.Trigger; import org.hawkular.metrics.tasks.impl.Task2Impl; import org.joda.time.DateTime; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -49,9 +47,6 @@ * task scheduler running for these tests. */ public class GenerateRateITest extends MetricsITest { - - private static Logger logger = LoggerFactory.getLogger(GenerateRateITest.class); - private MetricsServiceImpl metricsService; private DateTimeService dateTimeService; diff --git a/core/metrics-core-impl/src/test/resources/log4j.xml b/core/metrics-core-impl/src/test/resources/log4j.xml deleted file mode 100644 index 6e35d4b7f..000000000 --- a/core/metrics-core-impl/src/test/resources/log4j.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/core/metrics-core-impl/src/test/resources/logback-test.xml b/core/metrics-core-impl/src/test/resources/logback-test.xml new file mode 100644 index 000000000..5a8478340 --- /dev/null +++ b/core/metrics-core-impl/src/test/resources/logback-test.xml @@ -0,0 +1,46 @@ + + + + + + + ${test.logging.console.level:-ERROR} + + + ${pattern} + + + + + + ${test.logging.file.level:-ERROR} + + target/test.log + false + + ${pattern} + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3e9646383..809b9151c 100644 --- a/pom.xml +++ b/pom.xml @@ -108,45 +108,79 @@ - hawkulartest 127.0.0.1 - - 2.3 - 6.8.8 - 1.7.7 - 1.2.17 - 4.5 - 1.0.13 - 3.0.2 - 1.0.0 - 1.5.3 - - 3.0.0 - + + 3.0.2 + 2.3 + 1.1.3 + 4.5 + + 3.2.1.Final + 2.0.0.Final + 1.7.7 + 6.8.8 + 1.0.13 + 1.0.0 + 1.5.3 + 3.0.0 + org.slf4j slf4j-api - ${slf4j.version} + ${version.org.slf4j} + + + + ch.qos.logback + logback-classic + ${version.logback} + + + org.jboss.logging + jboss-logging + ${version.org.jboss.logging} + + + org.jboss.logging + jboss-logging-annotations + ${version.org.jboss.logging.jboss-logging-tools} + + + org.jboss.logging + jboss-logging-processor + ${version.org.jboss.logging.jboss-logging-tools} joda-time joda-time - ${joda.time.version} + ${version.joda-time} io.reactivex rxjava - ${rxjava.version} + ${version.io.reactivex.rxjava} io.reactivex rxjava-math - ${rxjava-math.version} + ${version.io.reactivex.rxjava-math} com.google.guava @@ -156,12 +190,12 @@ org.antlr antlr4-runtime - ${antlr.version} + ${version.org.antlr} com.codahale.metrics metrics-core - ${codahale.metrics.version} + ${version.com.codahale.metrics} @@ -170,13 +204,13 @@ org.testng testng - ${testng.version} + ${version.org.testng} io.swagger swagger-annotations - ${io.swagger.version} + ${version.io.swagger} @@ -195,7 +229,7 @@ org.antlr antlr4-maven-plugin - ${antlr.version} + ${version.org.antlr} @@ -244,7 +278,7 @@ org.codehaus.mojo findbugs-maven-plugin - ${findbugs.version} + ${version.org.codehaus.mojo.findbugs-maven-plugin} @@ -284,7 +318,7 @@ org.codehaus.mojo findbugs-maven-plugin - ${findbugs.version} + ${version.org.codehaus.mojo.findbugs-maven-plugin} true Max diff --git a/schema-manager/pom.xml b/schema-manager/pom.xml index 8a1ea2583..c33941c75 100644 --- a/schema-manager/pom.xml +++ b/schema-manager/pom.xml @@ -39,8 +39,22 @@ - org.slf4j - slf4j-api + org.jboss.logging + jboss-logging + + + + + + org.jboss.logging + jboss-logging-annotations + provided + + + + org.jboss.logging + jboss-logging-processor + provided diff --git a/schema-manager/src/main/java/org/hawkular/metrics/schema/SchemaManager.java b/schema-manager/src/main/java/org/hawkular/metrics/schema/SchemaManager.java index 761766542..30576ee30 100644 --- a/schema-manager/src/main/java/org/hawkular/metrics/schema/SchemaManager.java +++ b/schema-manager/src/main/java/org/hawkular/metrics/schema/SchemaManager.java @@ -22,8 +22,8 @@ import java.io.StringWriter; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.hawkular.metrics.schema.log.SchemaManagerLogger; +import org.hawkular.metrics.schema.log.SchemaManagerLogging; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Session; @@ -35,7 +35,7 @@ * @author Heiko W. Rupp */ public class SchemaManager { - private static final Logger logger = LoggerFactory.getLogger(SchemaManager.class); + private static final SchemaManagerLogger log = SchemaManagerLogging.getSchemaManagerLogger(SchemaManager.class); private final Session session; @@ -44,17 +44,17 @@ public SchemaManager(Session session) { } public void dropKeyspace(String keyspace) { - logger.info("Dropping keyspace " + keyspace); + log.infoDroppingKeyspace(keyspace); session.execute("DROP KEYSPACE IF EXISTS " + keyspace); } public void createSchema(String keyspace) { - logger.info("Creating schema for keyspace " + keyspace); + log.infoCreatingSchemaForKeyspace(keyspace); ResultSet resultSet = session.execute("SELECT * FROM system.schema_keyspaces WHERE keyspace_name = '" + keyspace + "'"); if (!resultSet.isExhausted()) { - logger.info("Schema already exist. Skipping schema creation."); + log.infoSchemaAlreadyExists(); return; } @@ -67,7 +67,7 @@ public void createSchema(String keyspace) { for (String cql : content.split("(?m)^-- #.*$")) { if (!cql.startsWith("--")) { String updatedCQL = substituteVars(cql.trim(), schemaVars); - logger.debug("Executing CQL:\n" + updatedCQL + "\n"); + log.debugf("Executing CQL: %n%s%n", updatedCQL); session.execute(updatedCQL); } } diff --git a/schema-manager/src/main/java/org/hawkular/metrics/schema/log/SchemaManagerLogger.java b/schema-manager/src/main/java/org/hawkular/metrics/schema/log/SchemaManagerLogger.java new file mode 100644 index 000000000..5c6575bf1 --- /dev/null +++ b/schema-manager/src/main/java/org/hawkular/metrics/schema/log/SchemaManagerLogger.java @@ -0,0 +1,47 @@ +/* + * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.hawkular.metrics.schema.log; + +import static org.jboss.logging.Logger.Level.INFO; + +import org.jboss.logging.BasicLogger; +import org.jboss.logging.annotations.LogMessage; +import org.jboss.logging.annotations.Message; +import org.jboss.logging.annotations.MessageLogger; +import org.jboss.logging.annotations.ValidIdRange; + +/** + * Schema manager logging messages. + * + * @author Thomas Segismont + */ +@MessageLogger(projectCode = "HAWKMETRICS") +@ValidIdRange(min = 300000, max = 309999) +public interface SchemaManagerLogger extends BasicLogger { + + @LogMessage(level = INFO) + @Message(id = 300001, value = "Dropping keyspace %s") + void infoDroppingKeyspace(String keyspace); + + @LogMessage(level = INFO) + @Message(id = 300002, value = "Creating schema for keyspace %s") + void infoCreatingSchemaForKeyspace(String keyspace); + + @LogMessage(level = INFO) + @Message(id = 300003, value = "Schema already exists. Skipping schema creation") + void infoSchemaAlreadyExists(); +} diff --git a/schema-manager/src/main/java/org/hawkular/metrics/schema/log/SchemaManagerLogging.java b/schema-manager/src/main/java/org/hawkular/metrics/schema/log/SchemaManagerLogging.java new file mode 100644 index 000000000..6de445c71 --- /dev/null +++ b/schema-manager/src/main/java/org/hawkular/metrics/schema/log/SchemaManagerLogging.java @@ -0,0 +1,36 @@ +/* + * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hawkular.metrics.schema.log; + +import org.jboss.logging.Logger; + +/** + * Simplify logger lookup. + * + * @author Thomas Segismont + */ +public class SchemaManagerLogging { + + public static SchemaManagerLogger getSchemaManagerLogger(Class clazz) { + return Logger.getMessageLogger(SchemaManagerLogger.class, clazz.getName()); + } + + private SchemaManagerLogging() { + // Utility class + } +} diff --git a/task-queue/pom.xml b/task-queue/pom.xml index cdb4f0932..c5f24ad19 100644 --- a/task-queue/pom.xml +++ b/task-queue/pom.xml @@ -48,23 +48,38 @@ ${project.version} - - org.slf4j - slf4j-log4j12 - ${slf4j.version} - test - - joda-time joda-time + + org.testng testng test + + + ch.qos.logback + logback-classic + test + + + + + + org.jboss.logging + jboss-logging-annotations + provided + + + + org.jboss.logging + jboss-logging-processor + provided + diff --git a/task-queue/src/main/java/org/hawkular/metrics/tasks/impl/LeaseService.java b/task-queue/src/main/java/org/hawkular/metrics/tasks/impl/LeaseService.java index 83bd4297f..c731ee82c 100644 --- a/task-queue/src/main/java/org/hawkular/metrics/tasks/impl/LeaseService.java +++ b/task-queue/src/main/java/org/hawkular/metrics/tasks/impl/LeaseService.java @@ -20,10 +20,10 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import org.hawkular.metrics.tasks.log.TaskQueueLogger; +import org.hawkular.metrics.tasks.log.TaskQueueLogging; import org.hawkular.rx.cassandra.driver.RxSession; import org.joda.time.DateTime; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import rx.Observable; @@ -31,8 +31,7 @@ * @author jsanda */ public class LeaseService { - - private static final Logger logger = LoggerFactory.getLogger(LeaseService.class); + private static final TaskQueueLogger log = TaskQueueLogging.getTaskQueueLogger(LeaseService.class); public static final int DEFAULT_LEASE_TTL = 180; @@ -54,7 +53,7 @@ public LeaseService(RxSession session, Queries queries) { } public void shutdown() { - logger.info("Shutting down"); + log.infoShutdown(); renewals.shutdownNow(); } diff --git a/task-queue/src/main/java/org/hawkular/metrics/tasks/impl/TaskSchedulerImpl.java b/task-queue/src/main/java/org/hawkular/metrics/tasks/impl/TaskSchedulerImpl.java index 787ecb166..d8dd14cc1 100644 --- a/task-queue/src/main/java/org/hawkular/metrics/tasks/impl/TaskSchedulerImpl.java +++ b/task-queue/src/main/java/org/hawkular/metrics/tasks/impl/TaskSchedulerImpl.java @@ -33,11 +33,11 @@ import org.hawkular.metrics.tasks.api.Task2; import org.hawkular.metrics.tasks.api.TaskScheduler; import org.hawkular.metrics.tasks.api.Trigger; +import org.hawkular.metrics.tasks.log.TaskQueueLogger; +import org.hawkular.metrics.tasks.log.TaskQueueLogging; import org.hawkular.rx.cassandra.driver.RxSession; import org.joda.time.DateTime; import org.joda.time.Duration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.datastax.driver.core.KeyspaceMetadata; import com.datastax.driver.core.ResultSet; @@ -60,8 +60,7 @@ * @author jsanda */ public class TaskSchedulerImpl implements TaskScheduler { - - private static Logger logger = LoggerFactory.getLogger(TaskSchedulerImpl.class); + private static TaskQueueLogger log = TaskQueueLogging.getTaskQueueLogger(TaskSchedulerImpl.class); public static final int DEFAULT_LEASE_TTL = 180; @@ -166,7 +165,7 @@ public void onNext(Task2 task2) { try { delegate.onNext(task2); } catch (Exception e) { - logger.warn("Execution of {} failed", task2); + log.warnTaskExecutionFailed(task2, e); } } } @@ -224,15 +223,15 @@ public Observable start() { Observable processedLeases = Observable.create(subscriber -> { leasesSubscription = leases.subscribe( lease -> { - logger.debug("Loading tasks for {}", lease); + log.debugf("Loading tasks for %s", lease); CountDownLatch latch = new CountDownLatch(1); getQueue(lease) .observeOn(tasksScheduler) .groupBy(Task2Impl::getGroupKey) .flatMap(group -> group.flatMap(this::execute).map(this::rescheduleTask)) .subscribe( - task -> logger.debug("Finished executing {}", task), - t -> logger.warn("There was an error observing tasks", t), + task -> log.debugf("Finished executing %s", task), + t -> log.warnTasksObservationProblem(t), () -> { Date timeSlice = new Date(lease.getTimeSlice()); // TODO We need error handling here @@ -248,19 +247,18 @@ public Observable start() { ).subscribe( resultSet -> {}, t -> { - logger.warn("There was an error during post-task processing", - t); + log.warnTaskPostProcessProblem(t); subscriber.onError(t); }, () -> { - logger.debug("Finished executing tasks for {}", lease); + log.debugf("Finished executing tasks for %s", lease); latch.countDown(); subscriber.onNext(lease); } ); } ); - logger.debug("Started processing tasks for {}", lease); + log.debugf("Started processing tasks for %s", lease); try { // While using a CountDownLatch might seem contrary to RxJava, we // want to block here until all tasks have finished executing. We @@ -270,14 +268,14 @@ public Observable start() { // not want to try and acquire another lease until we have // finished with the tasks for the current lease. latch.await(); - logger.debug("Done waiting!"); + log.debug("Done waiting!"); } catch (InterruptedException e) { - logger.warn("Interrupted waiting for task execution to complete", e); + log.warnInterruptionOnTaskCompleteWaiting(e); } }, - t -> logger.warn("There was an error observing leases", t), + t -> log.warnLeasesObservationProblem(t), () -> { - logger.debug("Finished observing leases"); + log.debug("Finished observing leases"); subscriber.onCompleted(); } ); @@ -314,7 +312,7 @@ private Observable createTicks() { return Observable.timer(0, 1, TimeUnit.MINUTES, tickScheduler) .map(tick -> currentTimeSlice()) .takeUntil(d -> !running) - .doOnNext(tick -> logger.debug("Tick {}", tick)) + .doOnNext(tick -> log.debugf("Tick %s", tick)) .observeOn(leaseScheduler); } @@ -340,22 +338,22 @@ private Observable getAvailableLeases(Date timeSlice) { // we acquire a lease, we execute all of the tasks for the lease. We check for // available leases again only after those tasks have completed. try { - logger.debug("Loading leases for {}", timeSlice); - logger.debug("Timestamp is {}", timeSlice.getTime()); + log.debugf("Loading leases for %s", timeSlice); + log.debugf("Timestamp is %s", timeSlice.getTime()); List leases = findAvailableLeases(timeSlice); while (!leases.isEmpty()) { for (Lease lease : leases) { if (acquire(lease)) { - logger.debug("Acquired {}", lease); + log.debugf("Acquired %s", lease); subscriber.onNext(lease); - logger.debug("Finished with {}", lease); + log.debugf("Finished with %s", lease); } break; } - logger.debug("Looking for available leases"); + log.debug("Looking for available leases"); leases = findAvailableLeases(timeSlice); } - logger.debug("No more leases to process for {}", timeSlice); + log.debugf("No more leases to process for %s", timeSlice); // TODO we do not want to perform a delete if there are no leases for the time slice session.execute(queries.deleteLeases.bind(timeSlice)).toBlocking().first(); subscriber.onCompleted(); @@ -395,7 +393,7 @@ private boolean acquire(Lease lease) { * the queue. The observable should execute on the lease scheduler. */ Observable getQueue(Lease lease) { - logger.debug("Loading task queue for {}", lease); + log.debugf("Loading task queue for %s", lease); return session.execute(queries.getTasksFromQueue.bind(new Date(lease.getTimeSlice()), lease.getShard()), Schedulers.immediate()) .flatMap(Observable::from) @@ -416,14 +414,14 @@ Observable getQueue(Lease lease) { */ private Observable execute(Task2Impl task) { Observable observable = Observable.create(subscriber -> { - logger.debug("Emitting {} for execution", task); + log.debugf("Emitting %s for execution", task); // This onNext call is to perform the actual task execution taskSubject.onNext(task); // This onNext call is for data flow. After the task executes, we call // this onNext so that the task gets rescheduled. subscriber.onNext(task); subscriber.onCompleted(); - logger.debug("Finished executing {}", task); + log.debugf("Finished executing %s", task); }); // Subscribe on the same scheduler thread to make sure tasks within the same group @@ -434,7 +432,7 @@ private Observable execute(Task2Impl task) { @Override public void shutdown() { try { - logger.debug("shutting down"); + log.debug("shutting down"); running = false; if (leasesSubscription != null) { @@ -495,7 +493,7 @@ public Observable scheduleTask(String name, String groupKey, int executio Date timeSlice = new Date(trigger.getTriggerTime()); Task2Impl task = new Task2Impl(id, groupKey, executionOrder, name, parameters, trigger); - logger.debug("Scheduling {}", task); + log.debugf("Scheduling %s", task); Observable createTask = session.execute(queries.createTask2.bind(id, groupKey, executionOrder, name, parameters, triggerUDT)); @@ -534,7 +532,7 @@ public Observable scheduleTask(String name, String groupKey, int executio private Observable rescheduleTask(Task2Impl task) { Trigger nextTrigger = task.getTrigger().nextTrigger(); if (nextTrigger == null) { - logger.debug("There are no more executions for {}", task); + log.debugf("There are no more executions for %s", task); return Observable.just(task); } int shard = computeShard(task.getGroupKey()); @@ -543,8 +541,10 @@ private Observable rescheduleTask(Task2Impl task) { UDTValue triggerUDT = getTriggerValue(session, newTask.getTrigger()); Date timeSlice = new Date(newTask.getTrigger().getTriggerTime()); - logger.debug("Next execution time for Task2Impl{id=" + newTask.getId() + ", name=" + newTask.getName() + - "} is " + new Date(newTask.getTrigger().getTriggerTime())); + if (log.isDebugEnabled()) { + log.debug("Next execution time for Task2Impl{id=" + newTask.getId() + ", name=" + newTask.getName() + + "} is " + new Date(newTask.getTrigger().getTriggerTime())); + } Observable updateQueue = session.execute(queries.insertIntoQueue.bind(timeSlice, shard, newTask.getId(), task.getGroupKey(), task.getOrder(), newTask.getName(), newTask.getParameters(), @@ -563,7 +563,7 @@ private Observable rescheduleTask(Task2Impl task) { t -> subscriber.onError(new RuntimeException("Failed to reschedule " + newTask, t)), () -> { try { - logger.debug("Received result set for reschedule task, {}", newTask); + log.debugf("Received result set for reschedule task, %s", newTask); subscriber.onNext(newTask); subscriber.onCompleted(); } catch (Exception e) { diff --git a/task-queue/src/main/java/org/hawkular/metrics/tasks/log/TaskQueueLogger.java b/task-queue/src/main/java/org/hawkular/metrics/tasks/log/TaskQueueLogger.java new file mode 100644 index 000000000..aaaf4b2e1 --- /dev/null +++ b/task-queue/src/main/java/org/hawkular/metrics/tasks/log/TaskQueueLogger.java @@ -0,0 +1,62 @@ +/* + * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.hawkular.metrics.tasks.log; + +import static org.jboss.logging.Logger.Level.INFO; +import static org.jboss.logging.Logger.Level.WARN; + +import org.hawkular.metrics.tasks.api.Task2; +import org.jboss.logging.BasicLogger; +import org.jboss.logging.annotations.Cause; +import org.jboss.logging.annotations.LogMessage; +import org.jboss.logging.annotations.Message; +import org.jboss.logging.annotations.MessageLogger; +import org.jboss.logging.annotations.ValidIdRange; + +/** + * Task queue logging messages. + * + * @author Thomas Segismont + */ +@MessageLogger(projectCode = "HAWKMETRICS") +@ValidIdRange(min = 400000, max = 409999) +public interface TaskQueueLogger extends BasicLogger { + + @LogMessage(level = INFO) + @Message(id = 400001, value = "Shutting down") + void infoShutdown(); + + @LogMessage(level = WARN) + @Message(id = 400002, value = "Execution of %s failed") + void warnTaskExecutionFailed(Task2 task, @Cause Exception e); + + @LogMessage(level = WARN) + @Message(id = 400003, value = "There was an error observing tasks") + void warnTasksObservationProblem(@Cause Throwable t); + + @LogMessage(level = WARN) + @Message(id = 400004, value = "There was an error during post-task processing") + void warnTaskPostProcessProblem(@Cause Throwable t); + + @LogMessage(level = WARN) + @Message(id = 400005, value = "Interrupted waiting for task execution to complete") + void warnInterruptionOnTaskCompleteWaiting(@Cause Exception e); + + @LogMessage(level = WARN) + @Message(id = 400006, value = "There was an error observing leases") + void warnLeasesObservationProblem(@Cause Throwable t); +} diff --git a/task-queue/src/main/java/org/hawkular/metrics/tasks/log/TaskQueueLogging.java b/task-queue/src/main/java/org/hawkular/metrics/tasks/log/TaskQueueLogging.java new file mode 100644 index 000000000..4e6f6989f --- /dev/null +++ b/task-queue/src/main/java/org/hawkular/metrics/tasks/log/TaskQueueLogging.java @@ -0,0 +1,35 @@ +/* + * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.hawkular.metrics.tasks.log; + +import org.jboss.logging.Logger; + +/** + * Simplify logger lookup. + * + * @author Thomas Segismont + */ +public class TaskQueueLogging { + + public static TaskQueueLogger getTaskQueueLogger(Class clazz) { + return Logger.getMessageLogger(TaskQueueLogger.class, clazz.getName()); + } + + private TaskQueueLogging() { + // Utility class + } +} diff --git a/task-queue/src/test/java/org/hawkular/metrics/tasks/impl/TaskSchedulerITest.java b/task-queue/src/test/java/org/hawkular/metrics/tasks/impl/TaskSchedulerITest.java index 6e205ed69..b1736562a 100644 --- a/task-queue/src/test/java/org/hawkular/metrics/tasks/impl/TaskSchedulerITest.java +++ b/task-queue/src/test/java/org/hawkular/metrics/tasks/impl/TaskSchedulerITest.java @@ -42,8 +42,6 @@ import org.hawkular.metrics.tasks.api.Task2; import org.hawkular.metrics.tasks.api.Trigger; import org.hawkular.rx.cassandra.driver.RxSession; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -61,9 +59,6 @@ * @author jsanda */ public class TaskSchedulerITest extends BaseITest { - - private static Logger logger = LoggerFactory.getLogger(TaskSchedulerITest.class); - private TestTaskScheduler scheduler; private TestScheduler tickScheduler; diff --git a/task-queue/src/test/java/org/hawkular/metrics/tasks/impl/TaskSubscriber.java b/task-queue/src/test/java/org/hawkular/metrics/tasks/impl/TaskSubscriber.java index 93b2dce06..8b8742d31 100644 --- a/task-queue/src/test/java/org/hawkular/metrics/tasks/impl/TaskSubscriber.java +++ b/task-queue/src/test/java/org/hawkular/metrics/tasks/impl/TaskSubscriber.java @@ -22,8 +22,7 @@ import java.util.concurrent.TimeUnit; import org.hawkular.metrics.tasks.api.Task2; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.jboss.logging.Logger; import rx.functions.Action1; import rx.observers.TestSubscriber; @@ -32,8 +31,7 @@ * @author jsanda */ public class TaskSubscriber extends TestSubscriber { - - private static Logger logger = LoggerFactory.getLogger(TaskSubscriber.class); + private static Logger log = Logger.getLogger(TaskSubscriber.class); private Random random = new Random(); @@ -142,7 +140,7 @@ public synchronized void onNext(Task2 task2) { // if (numberOfOnNextEvents > 0 && getOnNextEvents().size() >= numberOfOnNextEvents) { // onNextEventsLatch.countDown(); // } - logger.debug("Executing {}", task2); + log.debugf("Executing %s", task2); onNext.call(task2); super.onNext(task2); } diff --git a/task-queue/src/test/resources/log4j.xml b/task-queue/src/test/resources/log4j.xml deleted file mode 100644 index 6e35d4b7f..000000000 --- a/task-queue/src/test/resources/log4j.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/task-queue/src/test/resources/logback-test.xml b/task-queue/src/test/resources/logback-test.xml new file mode 100644 index 000000000..5a8478340 --- /dev/null +++ b/task-queue/src/test/resources/logback-test.xml @@ -0,0 +1,46 @@ + + + + + + + ${test.logging.console.level:-ERROR} + + + ${pattern} + + + + + + ${test.logging.file.level:-ERROR} + + target/test.log + false + + ${pattern} + + + + + + + + \ No newline at end of file