package co.teemo.blog.handlers; import com.codahale.metrics.Counter; import com.codahale.metrics.SharedMetricRegistries; import io.vertx.core.Handler; import io.vertx.core.logging.Logger; import io.vertx.core.logging.LoggerFactory; import io.vertx.ext.web.RoutingContext; import io.vertx.ext.web.api.validation.ValidationException; public class FailureHandler implements Handler<RoutingContext> { private final Counter validationErrorsCounter; private static final Logger logger = LoggerFactory.getLogger(FailureHandler.class); public FailureHandler() { validationErrorsCounter = SharedMetricRegistries.getDefault().counter("validationErrors"); } public void handle(RoutingContext context) { Throwable thrown = context.failure(); String userId = context.request().getHeader("Authorization"); recordError(userId, thrown); if(thrown instanceof ValidationException) { context.response().setStatusCode(400).end(thrown.getMessage()); } else { context.response().setStatusCode(500).end(thrown.getMessage()); } } private void recordError(String userId, Throwable thrown) { String dynamicMetadata = ""; if(userId != null) { dynamicMetadata = String.format("userId=%s ", userId); } validationErrorsCounter.inc(); logger.error(dynamicMetadata + thrown.getMessage()); } }