Skip to content

Commit fc662b1

Browse files
authored
Fix double quoting of 'when' condition in metadata (#15364)
1 parent 58d1661 commit fc662b1

File tree

5 files changed

+90
-5
lines changed

5 files changed

+90
-5
lines changed

instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/parsers/EmittedMetricsParser.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package io.opentelemetry.instrumentation.docs.parsers;
77

8+
import static io.opentelemetry.instrumentation.docs.parsers.TelemetryParser.normalizeWhenCondition;
9+
810
import com.fasterxml.jackson.core.JsonProcessingException;
911
import io.opentelemetry.instrumentation.docs.internal.EmittedMetrics;
1012
import io.opentelemetry.instrumentation.docs.utils.FileManager;
@@ -62,8 +64,7 @@ private static Map<String, List<EmittedMetrics.MetricsByScope>> parseAllMetricFi
6264
path -> {
6365
String content = FileManager.readFileToString(path.toString());
6466
if (content != null) {
65-
String when = content.substring(0, content.indexOf('\n'));
66-
String whenKey = when.replace("when: ", "");
67+
String whenKey = normalizeWhenCondition(content);
6768

6869
int metricsIndex = content.indexOf("metrics_by_scope:");
6970
if (metricsIndex != -1) {

instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/parsers/EmittedSpanParser.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package io.opentelemetry.instrumentation.docs.parsers;
77

8+
import static io.opentelemetry.instrumentation.docs.parsers.TelemetryParser.normalizeWhenCondition;
9+
810
import com.fasterxml.jackson.core.JsonProcessingException;
911
import io.opentelemetry.instrumentation.docs.internal.EmittedSpans;
1012
import io.opentelemetry.instrumentation.docs.internal.TelemetryAttribute;
@@ -49,8 +51,7 @@ public static Map<String, EmittedSpans> getSpansByScopeFromFiles(
4951
path -> {
5052
String content = FileManager.readFileToString(path.toString());
5153
if (content != null) {
52-
String when = content.substring(0, content.indexOf('\n'));
53-
String whenKey = when.replace("when: ", "");
54+
String whenKey = normalizeWhenCondition(content);
5455

5556
spansByScope.putIfAbsent(whenKey, new StringBuilder("spans_by_scope:\n"));
5657

instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/parsers/TelemetryParser.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,25 @@ static boolean scopeIsValid(String telemetryScope, String moduleScope) {
7373
|| scopeAllowList.getOrDefault(moduleScope, emptySet()).contains(telemetryScope);
7474
}
7575

76+
/**
77+
* Normalizes the 'when' condition from the given content by stripping quotes and whitespace.
78+
*
79+
* @param content the content containing the 'when' condition
80+
* @return normalized when condition
81+
*/
82+
static String normalizeWhenCondition(String content) {
83+
if (content == null) {
84+
return "";
85+
}
86+
87+
String when = content.substring(0, content.indexOf('\n'));
88+
String whenCondition = when.replace("when: ", "").strip();
89+
// Remove surrounding quotes if present (to avoid double-quoting in output)
90+
if (whenCondition.startsWith("\"") && whenCondition.endsWith("\"")) {
91+
whenCondition = whenCondition.substring(1, whenCondition.length() - 1);
92+
}
93+
return whenCondition;
94+
}
95+
7696
private TelemetryParser() {}
7797
}

instrumentation-docs/src/test/java/io/opentelemetry/instrumentation/docs/parsers/EmittedMetricsParserTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.junit.jupiter.api.io.TempDir;
2222
import org.mockito.MockedStatic;
2323

24-
@SuppressWarnings("NullAway")
2524
class EmittedMetricsParserTest {
2625

2726
@Test
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.docs.parsers;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import org.junit.jupiter.api.Test;
11+
12+
class TelemetryParserTest {
13+
14+
@Test
15+
void normalizeWhenConditionStripsQuotes() {
16+
String content =
17+
"""
18+
when: "otel.instrumentation.common.experimental.view-telemetry.enabled=true,otel.instrumentation.jsp.experimental-span-attributes=true"
19+
metrics_by_scope:
20+
- scope: io.opentelemetry.jsp-2.3
21+
""";
22+
23+
String result = TelemetryParser.normalizeWhenCondition(content);
24+
25+
assertThat(result)
26+
.isEqualTo(
27+
"otel.instrumentation.common.experimental.view-telemetry.enabled=true,otel.instrumentation.jsp.experimental-span-attributes=true");
28+
}
29+
30+
@Test
31+
void normalizeWhenConditionHandlesUnquotedValue() {
32+
String content =
33+
"""
34+
when: default
35+
metrics_by_scope:
36+
- scope: io.opentelemetry.test
37+
""";
38+
39+
String result = TelemetryParser.normalizeWhenCondition(content);
40+
41+
assertThat(result).isEqualTo("default");
42+
}
43+
44+
@Test
45+
void normalizeWhenConditionReturnsEmptyForNull() {
46+
String result = TelemetryParser.normalizeWhenCondition(null);
47+
48+
assertThat(result).isEmpty();
49+
}
50+
51+
@Test
52+
void normalizeWhenConditionHandlesComplexConditions() {
53+
String content =
54+
"""
55+
when: "config1=value1,config2=value2,config3=value3"
56+
spans_by_scope:
57+
- scope: io.opentelemetry.test
58+
""";
59+
60+
String result = TelemetryParser.normalizeWhenCondition(content);
61+
62+
assertThat(result).isEqualTo("config1=value1,config2=value2,config3=value3");
63+
}
64+
}

0 commit comments

Comments
 (0)