|
5 | 5 | */ |
6 | 6 | package io.k8ssandra.metrics.http; |
7 | 7 |
|
| 8 | +import com.google.common.collect.Sets; |
8 | 9 | import io.netty.buffer.Unpooled; |
9 | 10 | import io.netty.channel.ChannelFutureListener; |
10 | 11 | import io.netty.channel.ChannelHandlerContext; |
|
16 | 17 | import io.netty.handler.codec.http.HttpRequest; |
17 | 18 | import io.netty.handler.codec.http.HttpResponseStatus; |
18 | 19 | import io.netty.handler.codec.http.HttpVersion; |
| 20 | +import io.netty.handler.codec.http.QueryStringDecoder; |
19 | 21 | import io.netty.util.CharsetUtil; |
| 22 | +import io.prometheus.client.Collector; |
20 | 23 | import io.prometheus.client.CollectorRegistry; |
21 | 24 | import io.prometheus.client.exporter.common.TextFormat; |
22 | 25 | import java.io.StringWriter; |
23 | 26 | import java.net.URI; |
| 27 | +import java.util.Enumeration; |
| 28 | +import java.util.List; |
24 | 29 |
|
25 | 30 | public class NettyServerHandler extends SimpleChannelInboundHandler<HttpObject> { |
26 | 31 | private final StringWriter writer = new StringWriter(); |
@@ -48,8 +53,19 @@ protected void channelRead0(ChannelHandlerContext ctx, HttpObject httpObject) th |
48 | 53 | writer.getBuffer().setLength(0); |
49 | 54 |
|
50 | 55 | String contentType = TextFormat.chooseContentType(req.headers().get("Accept")); |
51 | | - TextFormat.writeFormat( |
52 | | - contentType, writer, CollectorRegistry.defaultRegistry.metricFamilySamples()); |
| 56 | + |
| 57 | + QueryStringDecoder queryString = new QueryStringDecoder(req.getUri()); |
| 58 | + if (queryString.parameters().containsKey("name")) { |
| 59 | + List<String> nameFilter = queryString.parameters().get("name"); |
| 60 | + Enumeration<Collector.MetricFamilySamples> filteredSamples = |
| 61 | + CollectorRegistry.defaultRegistry.filteredMetricFamilySamples( |
| 62 | + Sets.newHashSet(nameFilter)); |
| 63 | + |
| 64 | + TextFormat.writeFormat(contentType, writer, filteredSamples); |
| 65 | + } else { |
| 66 | + TextFormat.writeFormat( |
| 67 | + contentType, writer, CollectorRegistry.defaultRegistry.metricFamilySamples()); |
| 68 | + } |
53 | 69 |
|
54 | 70 | if (!writeResponse(req, ctx, contentType)) { |
55 | 71 | // If keep-alive is off, close the connection once the content is fully written. |
|
0 commit comments