Skip to content

Commit ce77e23

Browse files
authored
Add name filter parameter to /metrics endpoint, which allows to query single metric name (#363)
1 parent c8ade80 commit ce77e23

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

management-api-agent-common/src/main/java/io/k8ssandra/metrics/http/NettyServerHandler.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
package io.k8ssandra.metrics.http;
77

8+
import com.google.common.collect.Sets;
89
import io.netty.buffer.Unpooled;
910
import io.netty.channel.ChannelFutureListener;
1011
import io.netty.channel.ChannelHandlerContext;
@@ -16,11 +17,15 @@
1617
import io.netty.handler.codec.http.HttpRequest;
1718
import io.netty.handler.codec.http.HttpResponseStatus;
1819
import io.netty.handler.codec.http.HttpVersion;
20+
import io.netty.handler.codec.http.QueryStringDecoder;
1921
import io.netty.util.CharsetUtil;
22+
import io.prometheus.client.Collector;
2023
import io.prometheus.client.CollectorRegistry;
2124
import io.prometheus.client.exporter.common.TextFormat;
2225
import java.io.StringWriter;
2326
import java.net.URI;
27+
import java.util.Enumeration;
28+
import java.util.List;
2429

2530
public class NettyServerHandler extends SimpleChannelInboundHandler<HttpObject> {
2631
private final StringWriter writer = new StringWriter();
@@ -48,8 +53,19 @@ protected void channelRead0(ChannelHandlerContext ctx, HttpObject httpObject) th
4853
writer.getBuffer().setLength(0);
4954

5055
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+
}
5369

5470
if (!writeResponse(req, ctx, contentType)) {
5571
// If keep-alive is off, close the connection once the content is fully written.

0 commit comments

Comments
 (0)