diff --git a/src/main/java/net/frozenorb/apiv3/APIv3.java b/src/main/java/net/frozenorb/apiv3/APIv3.java index a2a3426..919abd0 100644 --- a/src/main/java/net/frozenorb/apiv3/APIv3.java +++ b/src/main/java/net/frozenorb/apiv3/APIv3.java @@ -35,6 +35,7 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.frozenorb.apiv3.handler.ActorAttributeHandler; import net.frozenorb.apiv3.handler.AuthorizationHandler; +import net.frozenorb.apiv3.handler.MetricsHandler; import net.frozenorb.apiv3.route.GETDumpsType; import net.frozenorb.apiv3.route.GETWhoAmI; import net.frozenorb.apiv3.route.auditLog.GETAuditLog; @@ -225,6 +226,7 @@ public final class APIv3 extends AbstractVerticle { http.route().handler(TimeoutHandler.create(TimeUnit.SECONDS.toMillis(5))); http.route().method(HttpMethod.PUT).method(HttpMethod.POST).method(HttpMethod.DELETE).handler(BodyHandler.create()); http.route().handler(new ActorAttributeHandler()); + http.route().handler(new MetricsHandler()); http.route().handler(new AuthorizationHandler()); // TODO: The commented out routes diff --git a/src/main/java/net/frozenorb/apiv3/handler/MetricsHandler.java b/src/main/java/net/frozenorb/apiv3/handler/MetricsHandler.java new file mode 100644 index 0000000..4fe3013 --- /dev/null +++ b/src/main/java/net/frozenorb/apiv3/handler/MetricsHandler.java @@ -0,0 +1,40 @@ +package net.frozenorb.apiv3.handler; + +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; +import io.vertx.redis.RedisClient; +import io.vertx.redis.RedisOptions; +import net.frozenorb.apiv3.APIv3; + +public final class MetricsHandler implements Handler { + + private static final RedisClient redisClient = RedisClient.create(APIv3.getVertxInstance(), + new RedisOptions() + .setAddress(APIv3.getConfig().getProperty("redis.address")) + .setPort(Integer.parseInt(APIv3.getConfig().getProperty("redis.port"))) + ); + + @Override + public void handle(RoutingContext ctx) { + redisClient.incr("apiv3:requests:total", (totalUpdateResult) -> { + if (totalUpdateResult.failed()) { + totalUpdateResult.cause().printStackTrace(); + } else { + redisClient.incr("apiv3:requests:method:" + ctx.request().method(), (methodUpdateResult) -> { + if (methodUpdateResult.failed()) { + methodUpdateResult.cause().printStackTrace(); + } else { + redisClient.incr("apiv3:requests:actor:" + ctx.get("actor").getClass().getSimpleName(), (actorUpdateResult) -> { + if (actorUpdateResult.failed()) { + actorUpdateResult.cause().printStackTrace(); + } + }); + } + }); + } + }); + + ctx.next(); + } + +} \ No newline at end of file