From ab576107af8c9234269e6156f8782faa1731f0a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=B6ren=20Henning?= <soeren.henning@email.uni-kiel.de>
Date: Wed, 23 Feb 2022 16:02:53 +0100
Subject: [PATCH] Add Micrometer metrics

---
 theodolite-benchmarks/http-bridge/build.gradle    |  2 ++
 .../commons/httpbridge/JavalinWebServer.java      | 15 ++++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/theodolite-benchmarks/http-bridge/build.gradle b/theodolite-benchmarks/http-bridge/build.gradle
index 0377eefc7..6bc7c7218 100644
--- a/theodolite-benchmarks/http-bridge/build.gradle
+++ b/theodolite-benchmarks/http-bridge/build.gradle
@@ -24,6 +24,8 @@ dependencies {
   implementation project(':load-generator-commons')
   
   implementation 'io.javalin:javalin:4.3.0'
+  implementation 'io.micrometer:micrometer-core:1.8.3'
+  implementation 'io.micrometer:micrometer-registry-prometheus:1.8.3'
   implementation 'com.google.code.gson:gson:2.8.2'
   runtimeOnly 'org.slf4j:slf4j-simple:1.7.25'
 
diff --git a/theodolite-benchmarks/http-bridge/src/main/java/theodolite/commons/httpbridge/JavalinWebServer.java b/theodolite-benchmarks/http-bridge/src/main/java/theodolite/commons/httpbridge/JavalinWebServer.java
index c23a17588..e7073a421 100644
--- a/theodolite-benchmarks/http-bridge/src/main/java/theodolite/commons/httpbridge/JavalinWebServer.java
+++ b/theodolite-benchmarks/http-bridge/src/main/java/theodolite/commons/httpbridge/JavalinWebServer.java
@@ -1,6 +1,10 @@
 package theodolite.commons.httpbridge;
 
 import io.javalin.Javalin;
+import io.javalin.plugin.metrics.MicrometerPlugin;
+import io.micrometer.prometheus.PrometheusConfig;
+import io.micrometer.prometheus.PrometheusMeterRegistry;
+import io.prometheus.client.exporter.common.TextFormat;
 import java.util.Collection;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -14,7 +18,9 @@ public class JavalinWebServer {
 
   private static final int HTTP_SUCCESS = 200;
 
-  private final Javalin app = Javalin.create();
+  private final Javalin app;
+
+  private final PrometheusMeterRegistry registry;
 
   private final String host;
   private final int port;
@@ -28,6 +34,10 @@ public class JavalinWebServer {
       final int port) {
     this.host = host;
     this.port = port;
+    this.registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
+    this.app = Javalin.create(config -> {
+      config.registerPlugin(new MicrometerPlugin(this.registry));
+    });
     this.configureRoutes(converters);
   }
 
@@ -40,6 +50,9 @@ public class JavalinWebServer {
         ctx.status(HTTP_SUCCESS);
       });
     }
+    this.app.get("/metrics", ctx -> ctx
+        .contentType(TextFormat.CONTENT_TYPE_004)
+        .result(this.registry.scrape()));
   }
 
   public void start() {
-- 
GitLab