Skip to content

Commit ea3e0d5

Browse files
committed
Filter out some options in command line metrics
Having some options in this metrics can be awkward (URI with password) or useless (metrics-related options), so this commit filter out the URI option and all metrics-related options from the tag of this specific metrics. References #319
1 parent e3df74e commit ea3e0d5

File tree

8 files changed

+81
-6
lines changed

8 files changed

+81
-6
lines changed

src/main/java/com/rabbitmq/perf/BaseMetrics.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@
2525
import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics;
2626
import io.micrometer.core.instrument.binder.system.ProcessorMetrics;
2727
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
28+
import java.util.Arrays;
2829
import java.util.Collections;
30+
import java.util.HashMap;
31+
import java.util.Iterator;
32+
import java.util.Map;
2933
import java.util.concurrent.atomic.AtomicInteger;
3034
import org.apache.commons.cli.Option;
3135
import org.apache.commons.cli.Options;
@@ -72,7 +76,7 @@ public void configure(ConfigurationContext context) {
7276
if (args == null || args.length == 0) {
7377
tags = Tags.of("command_line", "");
7478
} else {
75-
tags = Tags.of("command_line", String.join(" ", args));
79+
tags = Tags.of("command_line", commandLineMetrics(args, context.metricsOptions()));
7680
}
7781
meterRegistry.gauge(metricsPrefix + "args", tags, argumentsGauge);
7882
}
@@ -114,4 +118,29 @@ static Collection<Tag> parseTags(String argument) {
114118
return tags;
115119
}
116120
}
121+
122+
static String commandLineMetrics(String [] args, Options metricsOptions) {
123+
Map<String, Boolean> filteredOptions = new HashMap<>();
124+
filteredOptions.put("--uri", true);
125+
filteredOptions.put("-h", true);
126+
for (Option option : metricsOptions.getOptions()) {
127+
filteredOptions.put("-" + option.getOpt(), option.hasArg());
128+
if (option.hasLongOpt()) {
129+
filteredOptions.put("--" + option.getLongOpt(), option.hasArg());
130+
}
131+
}
132+
Collection<String> filtered = new ArrayList<>();
133+
Iterator<String> iterator = Arrays.stream(args).iterator();
134+
while(iterator.hasNext()) {
135+
String option = iterator.next();
136+
if (filteredOptions.containsKey(option)) {
137+
if (filteredOptions.get(option)) {
138+
iterator.next();
139+
}
140+
} else {
141+
filtered.add(option);
142+
}
143+
}
144+
return String.join(" ", filtered);
145+
}
117146
}

src/main/java/com/rabbitmq/perf/Metrics.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,18 @@ class ConfigurationContext {
4848
private final ConnectionFactory factory;
4949
private final String [] args;
5050
private final String metricsPrefix;
51+
private final Options metricsOptions;
5152

5253
public ConfigurationContext(CommandLineProxy cmd,
5354
CompositeMeterRegistry meterRegistry, ConnectionFactory factory,
54-
String[] args, String metricsPrefix) {
55+
String[] args, String metricsPrefix,
56+
Options metricsOptions) {
5557
this.cmd = cmd;
5658
this.meterRegistry = meterRegistry;
5759
this.factory = factory;
5860
this.args = args;
5961
this.metricsPrefix = metricsPrefix;
62+
this.metricsOptions = metricsOptions;
6063
}
6164

6265
public CommandLineProxy cmd() {
@@ -78,6 +81,10 @@ public String[] args() {
7881
public String metricsPrefix() {
7982
return metricsPrefix;
8083
}
84+
85+
public Options metricsOptions() {
86+
return metricsOptions;
87+
}
8188
}
8289

8390
}

src/main/java/com/rabbitmq/perf/PerfTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,8 @@ public static void main(String [] args, PerfTestOptions perfTestOptions) {
254254
shutdownService.wrap(() -> registry.close());
255255

256256
String metricsPrefix = strArg(cmd, "mpx", "perftest_");
257-
metrics.configure(new ConfigurationContext(cmd, registry, factory, args, metricsPrefix));
257+
metrics.configure(new ConfigurationContext(cmd, registry, factory, args,
258+
metricsPrefix, metricsOptions));
258259

259260
PrintWriter output;
260261
if (outputFile != null) {

src/main/java/com/rabbitmq/perf/PrometheusMetrics.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public Options options() {
4949
options.addOption(new Option("mpr", "metrics-prometheus", false, "enable Prometheus metrics"));
5050
options.addOption(new Option("mpe", "metrics-prometheus-endpoint", true, "the HTTP metrics endpoint, default is /metrics"));
5151
options.addOption(new Option("mpp", "metrics-prometheus-port", true, "the port to launch the HTTP metrics endpoint on, default is 8080"));
52+
5253
return options;
5354
}
5455

src/test/java/com/rabbitmq/perf/BaseMetricsTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515

1616
package com.rabbitmq.perf;
1717

18+
import static com.rabbitmq.perf.BaseMetrics.commandLineMetrics;
1819
import static com.rabbitmq.perf.BaseMetrics.parseTags;
1920
import static org.assertj.core.api.Assertions.assertThat;
2021

2122
import io.micrometer.core.instrument.Tag;
23+
import org.apache.commons.cli.Options;
2224
import org.junit.jupiter.api.Test;
2325

2426
public class BaseMetricsTest {
@@ -39,4 +41,39 @@ void parseTagsTest() {
3941
.hasSize(1)
4042
.contains(tag("args", "--queue-args \"x-max-length=100000\""));
4143
}
44+
45+
@Test
46+
void commandLineMetricsTest() {
47+
Options metricsOptions = new Options();
48+
new BaseMetrics().options().getOptions().forEach(metricsOptions::addOption);
49+
new PrometheusMetrics().options().getOptions().forEach(metricsOptions::addOption);
50+
assertThat(
51+
commandLineMetrics(
52+
("--uri amqp://default_user_kdId_cNrxfdolc5V7WJ:K8IYrRjh1NGqdVsaxfFa-r0KR1vGuPHB@cqv2 "
53+
+ "--metrics-prometheus --use-millis --servers-startup-timeout 300 "
54+
+ "--metrics-command-line-arguments "
55+
+ "-mt rabbitmq_cluster=cqv2,workload_name=test-new "
56+
+ "-x 1 -y 2 -u cq -c 1000 -A 1000 -q 1000 -f persistent -s 1000 "
57+
+ "--queue-args x-queue-version=2,x-queue-mode=lazy --auto-delete false")
58+
.split(" "),
59+
metricsOptions))
60+
.isEqualTo(
61+
"--use-millis --servers-startup-timeout 300 "
62+
+ "-x 1 -y 2 -u cq -c 1000 -A 1000 -q 1000 -f persistent -s 1000 "
63+
+ "--queue-args x-queue-version=2,x-queue-mode=lazy --auto-delete false");
64+
assertThat(
65+
commandLineMetrics(
66+
("-h amqp://default_user_kdId_cNrxfdolc5V7WJ:K8IYrRjh1NGqdVsaxfFa-r0KR1vGuPHB@cqv2 "
67+
+ "-mpr --use-millis --servers-startup-timeout 300 "
68+
+ "-mcla "
69+
+ "-mt rabbitmq_cluster=cqv2,workload_name=test-new "
70+
+ "-x 1 -y 2 -u cq -c 1000 -A 1000 -q 1000 -f persistent -s 1000 "
71+
+ "--queue-args x-queue-version=2,x-queue-mode=lazy --auto-delete false")
72+
.split(" "),
73+
metricsOptions))
74+
.isEqualTo(
75+
"--use-millis --servers-startup-timeout 300 "
76+
+ "-x 1 -y 2 -u cq -c 1000 -A 1000 -q 1000 -f persistent -s 1000 "
77+
+ "--queue-args x-queue-version=2,x-queue-mode=lazy --auto-delete false");
78+
}
4279
}

src/test/java/com/rabbitmq/perf/DatadogMetricsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public void metricsShouldBeSentToDatadogHttpEndpoint() throws Exception {
9191
registry.config().commonTags("host", "test");
9292
AtomicInteger gauge = new AtomicInteger(42);
9393
Gauge.builder("dummy", gauge, g -> g.doubleValue()).description("this is a dummy meter").register(registry);
94-
metrics.configure(new ConfigurationContext(cmd, registry, null, null, null));
94+
metrics.configure(new ConfigurationContext(cmd, registry, null, null, null, null));
9595

9696
assertTrue(latch.await(10, TimeUnit.SECONDS), NB_REQUESTS + " metrics requests should have been sent by now");
9797

src/test/java/com/rabbitmq/perf/JmxMetricsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void metricsShouldBeExposedAsMbeans() throws Exception {
5555
CompositeMeterRegistry registry = new CompositeMeterRegistry();
5656
AtomicInteger metric = registry.gauge("dummy", new AtomicInteger(0));
5757
metric.set(42);
58-
metrics.configure(new ConfigurationContext(cmd, registry, null, null, null));
58+
metrics.configure(new ConfigurationContext(cmd, registry, null, null, null, null));
5959

6060
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
6161
Set<ObjectName> objectNames = server.queryNames(new ObjectName("*:name=dummy"), null);

src/test/java/com/rabbitmq/perf/PrometheusMetricsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void prometheusHttpEndpointExposed() throws Exception {
5050
CompositeMeterRegistry registry = new CompositeMeterRegistry();
5151
AtomicInteger metric = registry.gauge("dummy", new AtomicInteger(0));
5252
metric.set(42);
53-
metrics.configure(new ConfigurationContext(cmd, registry, null, null, null));
53+
metrics.configure(new ConfigurationContext(cmd, registry, null, null, null, null));
5454

5555
URL url = new URL("http://localhost:" + port + "/metrics");
5656
HttpURLConnection con = (HttpURLConnection) url.openConnection();

0 commit comments

Comments
 (0)