feat: add prometheus plugin scaffold
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user