Skip to content

Commit f6667dd

Browse files
committed
Merge branch 'jmx-scrapper' of github.com:SylvainJuge/opentelemetry-java-contrib into jmx-scraper-it
2 parents 5b3ef9d + 352202f commit f6667dd

File tree

87 files changed

+3155
-388
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+3155
-388
lines changed

.github/component_owners.yml

+5
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ components:
4141
- sfriberg
4242
jmx-metrics:
4343
- breedx-splk
44+
jmx-scraper:
45+
- breedx-splk
46+
- robsunday
47+
- sylvainjuge
4448
maven-extension:
4549
- cyrille-leclerc
4650
- kenfinnigan
@@ -61,6 +65,7 @@ components:
6165
- jeanbisutti
6266
samplers:
6367
- trask
68+
- jack-berg
6469
static-instrumenter:
6570
- anosek-an
6671
kafka-exporter:

aws-xray-propagator/build.gradle.kts

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ dependencies {
1313
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
1414
testImplementation("io.opentelemetry:opentelemetry-sdk-trace")
1515
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
16+
17+
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator")
1618
testImplementation("uk.org.webcompere:system-stubs-jupiter:2.0.3")
1719
}

aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsXrayLambdaPropagator.java

+5
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ public <C> Context extract(Context context, @Nullable C carrier, TextMapGetter<C
7979
MapGetter.INSTANCE);
8080
}
8181

82+
@Override
83+
public String toString() {
84+
return "AwsXrayLambdaPropagator";
85+
}
86+
8287
private static boolean isEmptyOrNull(@Nullable String value) {
8388
return value == null || value.isEmpty();
8489
}

aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsXrayPropagator.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,11 @@ public <C> Context extract(Context context, @Nullable C carrier, TextMapGetter<C
169169
return getContextFromHeader(context, carrier, getter);
170170
}
171171

172+
@Override
173+
public String toString() {
174+
return "AwsXrayPropagator";
175+
}
176+
172177
private static <C> Context getContextFromHeader(
173178
Context context, @Nullable C carrier, TextMapGetter<C> getter) {
174179
String traceHeader = getter.get(carrier, TRACE_HEADER_KEY);
@@ -290,7 +295,8 @@ private static String parseShortTraceId(String xrayTraceId) {
290295
int secondDelimiter = xrayTraceId.indexOf(TRACE_ID_DELIMITER, firstDelimiter + 2);
291296
if (firstDelimiter != TRACE_ID_DELIMITER_INDEX_1
292297
|| secondDelimiter == -1
293-
|| secondDelimiter > TRACE_ID_DELIMITER_INDEX_2) {
298+
|| secondDelimiter > TRACE_ID_DELIMITER_INDEX_2
299+
|| xrayTraceId.length() < secondDelimiter + 25) {
294300
return TraceId.getInvalid();
295301
}
296302

aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/AwsConfigurablePropagator.java renamed to aws-xray-propagator/src/main/java/io/opentelemetry/contrib/awsxray/propagator/internal/AwsConfigurablePropagator.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package io.opentelemetry.contrib.awsxray.propagator;
6+
package io.opentelemetry.contrib.awsxray.propagator.internal;
77

88
import io.opentelemetry.context.propagation.TextMapPropagator;
9+
import io.opentelemetry.contrib.awsxray.propagator.AwsXrayPropagator;
910
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1011
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider;
1112

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.awsxray.propagator.internal;
7+
8+
import io.opentelemetry.context.propagation.TextMapPropagator;
9+
import io.opentelemetry.contrib.awsxray.propagator.AwsXrayPropagator;
10+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
11+
import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties;
12+
13+
public class AwsXrayComponentProvider implements ComponentProvider<TextMapPropagator> {
14+
@Override
15+
public Class<TextMapPropagator> getType() {
16+
return TextMapPropagator.class;
17+
}
18+
19+
@Override
20+
public String getName() {
21+
return "xray";
22+
}
23+
24+
@Override
25+
public TextMapPropagator create(StructuredConfigProperties config) {
26+
return AwsXrayPropagator.getInstance();
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.awsxray.propagator.internal;
7+
8+
import io.opentelemetry.context.propagation.TextMapPropagator;
9+
import io.opentelemetry.contrib.awsxray.propagator.AwsXrayLambdaPropagator;
10+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
11+
import io.opentelemetry.sdk.autoconfigure.spi.internal.StructuredConfigProperties;
12+
13+
public class AwsXrayLambdaComponentProvider implements ComponentProvider<TextMapPropagator> {
14+
@Override
15+
public Class<TextMapPropagator> getType() {
16+
return TextMapPropagator.class;
17+
}
18+
19+
@Override
20+
public String getName() {
21+
return "xray-lambda";
22+
}
23+
24+
@Override
25+
public TextMapPropagator create(StructuredConfigProperties config) {
26+
return AwsXrayLambdaPropagator.getInstance();
27+
}
28+
}
+2-1
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package io.opentelemetry.contrib.awsxray.propagator;
6+
package io.opentelemetry.contrib.awsxray.propagator.internal;
77

88
import io.opentelemetry.context.propagation.TextMapPropagator;
9+
import io.opentelemetry.contrib.awsxray.propagator.AwsXrayLambdaPropagator;
910
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1011
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider;
1112

Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
io.opentelemetry.contrib.awsxray.propagator.AwsConfigurablePropagator
1+
io.opentelemetry.contrib.awsxray.propagator.internal.AwsConfigurablePropagator
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
io.opentelemetry.contrib.awsxray.propagator.internal.AwsXrayComponentProvider
2+
io.opentelemetry.contrib.awsxray.propagator.internal.AwsXrayLambdaComponentProvider

aws-xray-propagator/src/test/java/io/opentelemetry/contrib/awsxray/propagator/AwsXrayPropagatorTest.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ void extract_InvalidTraceId() {
297297
}
298298

299299
@Test
300-
void extract_InvalidTraceId_Size() {
300+
void extract_InvalidTraceId_Size_TooBig() {
301301
Map<String, String> invalidHeaders = new LinkedHashMap<>();
302302
invalidHeaders.put(
303303
TRACE_HEADER_KEY,
@@ -306,6 +306,16 @@ void extract_InvalidTraceId_Size() {
306306
verifyInvalidBehavior(invalidHeaders);
307307
}
308308

309+
@Test
310+
void extract_InvalidTraceId_Size_TooShort() {
311+
Map<String, String> invalidHeaders = new LinkedHashMap<>();
312+
invalidHeaders.put(
313+
TRACE_HEADER_KEY,
314+
"Root=1-64fbd5a9-2202432c9dfed25ae1e6996;Parent=53995c3f42cd8ad8;Sampled=0");
315+
316+
verifyInvalidBehavior(invalidHeaders);
317+
}
318+
309319
@Test
310320
void extract_InvalidSpanId() {
311321
Map<String, String> invalidHeaders = new LinkedHashMap<>();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.awsxray.propagator.internal;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.context.propagation.TextMapPropagator;
11+
import io.opentelemetry.contrib.awsxray.propagator.AwsXrayLambdaPropagator;
12+
import io.opentelemetry.contrib.awsxray.propagator.AwsXrayPropagator;
13+
import io.opentelemetry.sdk.OpenTelemetrySdk;
14+
import io.opentelemetry.sdk.extension.incubator.fileconfig.FileConfiguration;
15+
import java.io.ByteArrayInputStream;
16+
import java.nio.charset.StandardCharsets;
17+
import org.junit.jupiter.api.Test;
18+
19+
class AwsComponentProviderTest {
20+
21+
@Test
22+
void endToEnd() {
23+
String yaml = "file_format: 0.1\n" + "propagator:\n" + " composite: [xray, xray-lambda]\n";
24+
25+
OpenTelemetrySdk openTelemetrySdk =
26+
FileConfiguration.parseAndCreate(
27+
new ByteArrayInputStream(yaml.getBytes(StandardCharsets.UTF_8)));
28+
TextMapPropagator expectedPropagator =
29+
TextMapPropagator.composite(
30+
AwsXrayPropagator.getInstance(), AwsXrayLambdaPropagator.getInstance());
31+
assertThat(openTelemetrySdk.getPropagators().getTextMapPropagator().toString())
32+
.isEqualTo(expectedPropagator.toString());
33+
}
34+
}

aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/AwsXrayRemoteSampler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.concurrent.Executors;
2929
import java.util.concurrent.ScheduledExecutorService;
3030
import java.util.concurrent.ScheduledFuture;
31+
import java.util.concurrent.ThreadLocalRandom;
3132
import java.util.concurrent.TimeUnit;
3233
import java.util.function.Function;
3334
import java.util.logging.Level;
@@ -40,7 +41,6 @@ public final class AwsXrayRemoteSampler implements Sampler, Closeable {
4041

4142
static final long DEFAULT_TARGET_INTERVAL_NANOS = TimeUnit.SECONDS.toNanos(10);
4243

43-
private static final Random RANDOM = new Random();
4444
private static final Logger logger = Logger.getLogger(AwsXrayRemoteSampler.class.getName());
4545

4646
private final Resource resource;
@@ -97,7 +97,7 @@ public static AwsXrayRemoteSamplerBuilder newBuilder(Resource resource) {
9797

9898
this.pollingIntervalNanos = pollingIntervalNanos;
9999
// Add ~1% of jitter
100-
jitterNanos = RANDOM.longs(0, pollingIntervalNanos / 100).iterator();
100+
jitterNanos = ThreadLocalRandom.current().longs(0, pollingIntervalNanos / 100).iterator();
101101

102102
// Execute first update right away on the executor thread.
103103
executor.execute(this::getAndUpdateSampler);

buildSrc/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ dependencies {
1515
implementation("com.diffplug.spotless:spotless-plugin-gradle:6.25.0")
1616
implementation("net.ltgt.gradle:gradle-errorprone-plugin:4.0.1")
1717
implementation("net.ltgt.gradle:gradle-nullaway-plugin:2.0.0")
18-
implementation("com.gradle.enterprise:com.gradle.enterprise.gradle.plugin:3.18")
18+
implementation("com.gradle.enterprise:com.gradle.enterprise.gradle.plugin:3.18.1")
1919
}
2020

2121
spotless {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.sampler.consistent56;
7+
8+
import io.opentelemetry.api.common.Attributes;
9+
import io.opentelemetry.api.trace.SpanKind;
10+
import io.opentelemetry.context.Context;
11+
import io.opentelemetry.sdk.trace.data.LinkData;
12+
import java.util.List;
13+
14+
/** An interface for components to be used by composite consistent probability samplers. */
15+
public interface ComposableSampler {
16+
17+
/**
18+
* Returns the SamplingIntent that is used for the sampling decision. The SamplingIntent includes
19+
* the threshold value which will be used for the sampling decision.
20+
*
21+
* <p>NOTE: Keep in mind, that in any case the returned threshold value must not depend directly
22+
* or indirectly on the random value. In particular this means that the parent sampled flag must
23+
* not be used for the calculation of the threshold as the sampled flag depends itself on the
24+
* random value.
25+
*/
26+
SamplingIntent getSamplingIntent(
27+
Context parentContext,
28+
String name,
29+
SpanKind spanKind,
30+
Attributes attributes,
31+
List<LinkData> parentLinks);
32+
33+
/** Return the string providing a description of the implementation. */
34+
String getDescription();
35+
}

consistent-sampling/src/main/java/io/opentelemetry/contrib/sampler/consistent56/ConsistentAlwaysOffSampler.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@
55

66
package io.opentelemetry.contrib.sampler.consistent56;
77

8+
import static io.opentelemetry.contrib.sampler.consistent56.ConsistentSamplingUtil.getInvalidThreshold;
9+
10+
import io.opentelemetry.api.common.Attributes;
11+
import io.opentelemetry.api.trace.SpanKind;
12+
import io.opentelemetry.context.Context;
13+
import io.opentelemetry.sdk.trace.data.LinkData;
14+
import java.util.List;
815
import javax.annotation.concurrent.Immutable;
916

1017
@Immutable
@@ -19,8 +26,14 @@ static ConsistentAlwaysOffSampler getInstance() {
1926
}
2027

2128
@Override
22-
protected long getThreshold(long parentThreshold, boolean isRoot) {
23-
return ConsistentSamplingUtil.getMaxThreshold();
29+
public SamplingIntent getSamplingIntent(
30+
Context parentContext,
31+
String name,
32+
SpanKind spanKind,
33+
Attributes attributes,
34+
List<LinkData> parentLinks) {
35+
36+
return () -> getInvalidThreshold();
2437
}
2538

2639
@Override

consistent-sampling/src/main/java/io/opentelemetry/contrib/sampler/consistent56/ConsistentAlwaysOnSampler.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77

88
import static io.opentelemetry.contrib.sampler.consistent56.ConsistentSamplingUtil.getMinThreshold;
99

10+
import io.opentelemetry.api.common.Attributes;
11+
import io.opentelemetry.api.trace.SpanKind;
12+
import io.opentelemetry.context.Context;
13+
import io.opentelemetry.sdk.trace.data.LinkData;
14+
import java.util.List;
1015
import javax.annotation.concurrent.Immutable;
1116

1217
@Immutable
@@ -21,8 +26,14 @@ static ConsistentAlwaysOnSampler getInstance() {
2126
}
2227

2328
@Override
24-
protected long getThreshold(long parentThreshold, boolean isRoot) {
25-
return getMinThreshold();
29+
public SamplingIntent getSamplingIntent(
30+
Context parentContext,
31+
String name,
32+
SpanKind spanKind,
33+
Attributes attributes,
34+
List<LinkData> parentLinks) {
35+
36+
return () -> getMinThreshold();
2637
}
2738

2839
@Override

0 commit comments

Comments
 (0)