feat: add prometheus plugin scaffold

This commit is contained in:
dmg
2026-01-22 22:05:03 -05:00
commit 01878de01e
13 changed files with 456 additions and 0 deletions
@@ -0,0 +1,49 @@
package com.prometheus.spigot.http;
import com.prometheus.spigot.metrics.MetricsRegistry;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public final class MetricsHttpHandler implements HttpHandler {
private static final String CONTENT_TYPE = "text/plain; version=0.0.4";
private static final String AUTH_HEADER = "Authorization";
private static final String BEARER_PREFIX = "Bearer ";
private final MetricsRegistry registry;
private final String bearerToken;
public MetricsHttpHandler(MetricsRegistry registry, String bearerToken) {
this.registry = registry;
this.bearerToken = bearerToken;
}
@Override
public void handle(HttpExchange exchange) throws IOException {
if (!isAuthorized(exchange.getRequestHeaders())) {
byte[] response = "Unauthorized\n".getBytes(StandardCharsets.UTF_8);
exchange.sendResponseHeaders(401, response.length);
exchange.getResponseBody().write(response);
exchange.close();
return;
}
String body = registry.render();
byte[] response = body.getBytes(StandardCharsets.UTF_8);
exchange.getResponseHeaders().set("Content-Type", CONTENT_TYPE);
exchange.sendResponseHeaders(200, response.length);
exchange.getResponseBody().write(response);
exchange.close();
}
private boolean isAuthorized(Headers headers) {
String authHeader = headers.getFirst(AUTH_HEADER);
if (authHeader == null || !authHeader.startsWith(BEARER_PREFIX)) {
return false;
}
String token = authHeader.substring(BEARER_PREFIX.length());
return token.equals(bearerToken);
}
}