Skip to content

Commit ee32c8a

Browse files
committed
refactor: Use Jetty 12 APIs
1 parent 63287a5 commit ee32c8a

File tree

2 files changed

+54
-42
lines changed

2 files changed

+54
-42
lines changed

src/main/java/de/sldk/mc/MetricsController.java

+25-19
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@
22

33
import io.prometheus.client.CollectorRegistry;
44
import io.prometheus.client.exporter.common.TextFormat;
5-
import jakarta.servlet.http.HttpServletRequest;
6-
import jakarta.servlet.http.HttpServletResponse;
5+
import org.eclipse.jetty.http.HttpFields;
6+
import org.eclipse.jetty.http.HttpHeader;
77
import org.eclipse.jetty.http.HttpStatus;
8+
import org.eclipse.jetty.server.Handler;
89
import org.eclipse.jetty.server.Request;
9-
import org.eclipse.jetty.server.handler.AbstractHandler;
10+
import org.eclipse.jetty.server.Response;
11+
import org.eclipse.jetty.util.Callback;
1012

11-
import java.io.IOException;
12-
import java.util.concurrent.ExecutionException;
13+
import java.io.OutputStreamWriter;
14+
import java.nio.charset.StandardCharsets;
1315
import java.util.logging.Level;
1416

15-
public class MetricsController extends AbstractHandler {
17+
public class MetricsController extends Handler.Abstract {
1618

1719
private final MetricRegistry metricRegistry = MetricRegistry.getInstance();
1820
private final PrometheusExporter exporter;
@@ -21,28 +23,32 @@ public MetricsController(PrometheusExporter exporter) {
2123
this.exporter = exporter;
2224
}
2325

24-
@Override
25-
public void handle(String target, Request request, HttpServletRequest httpServletRequest,
26-
HttpServletResponse response) throws IOException {
27-
28-
if (!target.equals("/metrics")) {
29-
response.sendError(HttpServletResponse.SC_NOT_FOUND);
30-
return;
31-
}
3226

27+
@Override
28+
public boolean handle(Request request, Response response, Callback callback) throws Exception {
3329
try {
3430
metricRegistry.collectMetrics().get();
3531

3632
response.setStatus(HttpStatus.OK_200);
37-
response.setContentType(TextFormat.CONTENT_TYPE_004);
3833

39-
TextFormat.write004(response.getWriter(), CollectorRegistry.defaultRegistry.metricFamilySamples());
34+
HttpFields.Mutable responseHeaders = response.getHeaders();
35+
responseHeaders.put(HttpHeader.CONTENT_TYPE, TextFormat.CONTENT_TYPE_004);
4036

41-
request.setHandled(true);
42-
} catch (InterruptedException | ExecutionException e) {
37+
writeMetricsToResponse(request, response);
38+
} catch (Exception e) {
4339
exporter.getLogger().log(Level.WARNING, "Failed to read server statistic: " + e.getMessage());
4440
exporter.getLogger().log(Level.FINE, "Failed to read server statistic: ", e);
45-
response.sendError(HttpStatus.INTERNAL_SERVER_ERROR_500);
41+
Response.writeError(request, response, callback, HttpStatus.INTERNAL_SERVER_ERROR_500, "Failed to read server statistics");
42+
}
43+
callback.succeeded();
44+
return true;
45+
}
46+
47+
private void writeMetricsToResponse(Request request, Response response) throws Exception {
48+
try (var out = Response.asBufferedOutputStream(request, response);
49+
var writer = new OutputStreamWriter(out, StandardCharsets.UTF_8)) {
50+
TextFormat.write004(writer, CollectorRegistry.defaultRegistry.metricFamilySamples());
51+
writer.flush();
4652
}
4753
}
4854
}
+29-23
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,46 @@
11
package de.sldk.mc;
22

3+
import org.eclipse.jetty.http.pathmap.PathSpec;
34
import org.eclipse.jetty.server.Server;
5+
import org.eclipse.jetty.server.handler.PathMappingsHandler;
46
import org.eclipse.jetty.server.handler.gzip.GzipHandler;
57

68
import java.net.InetSocketAddress;
79

810
public class MetricsServer {
911

10-
private final String host;
11-
private final int port;
12-
private final PrometheusExporter prometheusExporter;
12+
private final String host;
13+
private final int port;
14+
private final PrometheusExporter prometheusExporter;
1315

14-
private Server server;
16+
private Server server;
1517

16-
public MetricsServer(String host, int port, PrometheusExporter prometheusExporter) {
17-
this.host = host;
18-
this.port = port;
19-
this.prometheusExporter = prometheusExporter;
20-
}
18+
public MetricsServer(String host, int port, PrometheusExporter prometheusExporter) {
19+
this.host = host;
20+
this.port = port;
21+
this.prometheusExporter = prometheusExporter;
22+
}
2123

22-
public void start() throws Exception {
23-
GzipHandler gzipHandler = new GzipHandler();
24-
gzipHandler.setHandler(new MetricsController(prometheusExporter));
24+
public void start() throws Exception {
25+
GzipHandler gzipHandler = new GzipHandler();
2526

26-
InetSocketAddress address = new InetSocketAddress(host, port);
27-
server = new Server(address);
28-
server.setHandler(gzipHandler);
27+
var pathMappings = new PathMappingsHandler();
28+
pathMappings.addMapping(PathSpec.from("/metrics"), new MetricsController(prometheusExporter));
2929

30-
server.start();
31-
}
30+
gzipHandler.setHandler(pathMappings);
3231

33-
public void stop() throws Exception {
34-
if (server == null) {
35-
return;
36-
}
32+
InetSocketAddress address = new InetSocketAddress(host, port);
33+
server = new Server(address);
34+
server.setHandler(gzipHandler);
3735

38-
server.stop();
39-
}
36+
server.start();
37+
}
38+
39+
public void stop() throws Exception {
40+
if (server == null) {
41+
return;
42+
}
43+
44+
server.stop();
45+
}
4046
}

0 commit comments

Comments
 (0)