diff --git a/build.gradle.kts b/build.gradle.kts index 986f5ac58..ca63a9633 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,8 @@ subprojects { extra.set("versions", mapOf( "opentelemetry" to "0.15.0", "opentelemetry_java_agent" to "0.15.1", - "byte_buddy" to "1.10.18" + "byte_buddy" to "1.10.18", + "slf4j" to "1.7.30" )) apply() diff --git a/filter-api/build.gradle.kts b/filter-api/build.gradle.kts index d088320ef..488956763 100644 --- a/filter-api/build.gradle.kts +++ b/filter-api/build.gradle.kts @@ -9,5 +9,6 @@ dependencies { api("io.opentelemetry:opentelemetry-api:${versions["opentelemetry"]}") api(project(":javaagent-core")) implementation("com.google.auto.service:auto-service:1.0-rc7") + implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") annotationProcessor("com.google.auto.service:auto-service:1.0-rc7") } diff --git a/filter-api/src/main/java/org/hypertrace/agent/filter/FilterRegistry.java b/filter-api/src/main/java/org/hypertrace/agent/filter/FilterRegistry.java index ec2bc7e2c..31e608cb3 100644 --- a/filter-api/src/main/java/org/hypertrace/agent/filter/FilterRegistry.java +++ b/filter-api/src/main/java/org/hypertrace/agent/filter/FilterRegistry.java @@ -16,13 +16,19 @@ package org.hypertrace.agent.filter; +import com.google.protobuf.StringValue; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.ServiceLoader; import org.hypertrace.agent.core.config.EnvironmentConfig; +import org.hypertrace.agent.core.config.HypertraceConfig; import org.hypertrace.agent.filter.api.Filter; import org.hypertrace.agent.filter.spi.FilterProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Provides access to the {@link Filter} implementations. The {@link Filter} implementation are @@ -33,6 +39,8 @@ */ public class FilterRegistry { + private static final Logger logger = LoggerFactory.getLogger(FilterRegistry.class); + private FilterRegistry() {} private static Filter filter; @@ -54,11 +62,10 @@ public static Filter getFilter() { } private static Filter load() { - ServiceLoader providers = ServiceLoader.load(FilterProvider.class); + ClassLoader cl = loadJars(); + ServiceLoader providers = ServiceLoader.load(FilterProvider.class, cl); List filters = new ArrayList<>(); - Iterator iterator = providers.iterator(); - while (iterator.hasNext()) { - FilterProvider provider = iterator.next(); + for (FilterProvider provider : providers) { String disabled = EnvironmentConfig.getProperty(getProviderDisabledPropertyName(provider.getClass())); if ("true".equalsIgnoreCase(disabled)) { @@ -70,6 +77,23 @@ private static Filter load() { return new MultiFilter(filters); } + private static ClassLoader loadJars() { + List jarPaths = HypertraceConfig.get().getJavaagent().getFilterJarPathsList(); + URL[] urls = new URL[jarPaths.size()]; + int i = 0; + for (StringValue jarPath : jarPaths) { + try { + URL url = new URL("file", "", -1, jarPath.getValue()); + urls[i] = url; + i++; + } catch (MalformedURLException e) { + logger.warn( + String.format("Malformed URL exception for jar on path: %s", jarPath.getValue()), e); + } + } + return new URLClassLoader(urls, Thread.currentThread().getContextClassLoader()); + } + public static String getProviderDisabledPropertyName(Class clazz) { return String.format("ht.filter.provider.%s.disabled", clazz.getSimpleName()); } diff --git a/filter-custom-opa/build.gradle.kts b/filter-custom-opa/build.gradle.kts index b53e352a1..de45eb5c6 100644 --- a/filter-custom-opa/build.gradle.kts +++ b/filter-custom-opa/build.gradle.kts @@ -2,9 +2,11 @@ plugins { `java-library` } +val versions: Map by extra + dependencies { api(project(":filter-api")) - implementation("org.slf4j:slf4j-api:1.7.30") + implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") implementation("com.squareup.okhttp3:okhttp:3.14.9") implementation("com.fasterxml.jackson.core:jackson-databind:2.11.3") implementation("com.google.auto.service:auto-service:1.0-rc7") diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java index 2db74bbac..09d1936aa 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/readall/ApacheClientReadAllInstrumentationModule.java @@ -205,7 +205,6 @@ public static void exit(@Return Object response) { } byte[] bodyBytes = buffer.toByteArray(); - System.out.printf("Captured response body: %s\n", new String(bodyBytes)); currentSpan.setAttribute( HypertraceSemanticAttributes.HTTP_RESPONSE_BODY.getKey(), new String(bodyBytes)); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bodyBytes); @@ -216,8 +215,6 @@ public static void exit(@Return Object response) { // TODO log e.printStackTrace(); } - } else { - System.out.println("\n\nIt is not HttpResponse #execute"); } } } diff --git a/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java b/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java index 696ad1e08..855a7aae1 100644 --- a/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java +++ b/instrumentation/servlet/servlet-3.0-no-wrapping/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/response/ServletOutputStreamContextAccessInstrumentationModule.java @@ -76,7 +76,6 @@ static class TestAdvice { public static void enter( @Advice.Argument(0) ServletOutputStream servletOutputStream, @Advice.Argument(1) BoundedByteArrayOutputStream buffer) { - System.out.println("adding to context"); ContextStore contextStore = InstrumentationContext.get(ServletOutputStream.class, BoundedByteArrayOutputStream.class); contextStore.put(servletOutputStream, buffer); diff --git a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java index e0d16bea3..fb4712ae0 100644 --- a/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java +++ b/instrumentation/servlet/servlet-rw/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/rw/reader/BufferedReaderInstrumentation.java @@ -200,7 +200,6 @@ public static void exit( return; } - System.out.println("Capturing readLine"); if (line == null) { bufferSpanPair.captureBody(HypertraceSemanticAttributes.HTTP_REQUEST_BODY); } else { diff --git a/instrumentation/servlet/servlet-rw/src/test/java/org/TestBufferedReader.java b/instrumentation/servlet/servlet-rw/src/test/java/org/TestBufferedReader.java index 2d28f5e90..f760633f8 100644 --- a/instrumentation/servlet/servlet-rw/src/test/java/org/TestBufferedReader.java +++ b/instrumentation/servlet/servlet-rw/src/test/java/org/TestBufferedReader.java @@ -28,7 +28,6 @@ public TestBufferedReader(Reader in) { @Override public String readLine() throws IOException { - System.out.println("override readline"); return super.readLine(); } } diff --git a/javaagent-core/build.gradle.kts b/javaagent-core/build.gradle.kts index 14b3eb544..e85dfc507 100644 --- a/javaagent-core/build.gradle.kts +++ b/javaagent-core/build.gradle.kts @@ -27,7 +27,7 @@ val versions: Map by extra dependencies { api("io.opentelemetry:opentelemetry-api:${versions["opentelemetry"]}") api("io.opentelemetry.javaagent:opentelemetry-javaagent-api:${versions["opentelemetry_java_agent"]}") - implementation("org.slf4j:slf4j-api:1.7.30") + implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") api("com.google.protobuf:protobuf-java:3.11.4") api("com.google.protobuf:protobuf-java-util:3.11.4") diff --git a/javaagent-core/src/main/java/org/hypertrace/agent/core/config/EnvironmentConfig.java b/javaagent-core/src/main/java/org/hypertrace/agent/core/config/EnvironmentConfig.java index bda5497c8..7098dfacd 100644 --- a/javaagent-core/src/main/java/org/hypertrace/agent/core/config/EnvironmentConfig.java +++ b/javaagent-core/src/main/java/org/hypertrace/agent/core/config/EnvironmentConfig.java @@ -21,6 +21,7 @@ import com.google.protobuf.StringValue; import org.hypertrace.agent.config.Config.AgentConfig; import org.hypertrace.agent.config.Config.DataCapture; +import org.hypertrace.agent.config.Config.JavaAgent; import org.hypertrace.agent.config.Config.Message; import org.hypertrace.agent.config.Config.Opa; import org.hypertrace.agent.config.Config.Opa.Builder; @@ -35,6 +36,7 @@ private EnvironmentConfig() {} public static final String CONFIG_FILE_PROPERTY = HT_PREFIX + "config.file"; static final String SERVICE_NAME = HT_PREFIX + "service.name"; + static final String ENABLED = HT_PREFIX + "enabled"; static final String PROPAGATION_FORMATS = HT_PREFIX + "propagation.formats"; @@ -54,11 +56,18 @@ private EnvironmentConfig() {} public static final String CAPTURE_RPC_METADATA_PREFIX = CAPTURE_PREFIX + "rpc.metadata."; public static final String CAPTURE_RPC_BODY_PREFIX = CAPTURE_PREFIX + "rpc.body."; + private static final String JAVAAGENT_PREFIX = HT_PREFIX + "javaagent."; + public static final String JAVAAGENT_FILTER_JAR_PATHS = JAVAAGENT_PREFIX + "filter.jar.paths"; + public static AgentConfig.Builder applyPropertiesAndEnvVars(AgentConfig.Builder builder) { String serviceName = getProperty(SERVICE_NAME); if (serviceName != null) { builder.setServiceName(StringValue.newBuilder().setValue(serviceName).build()); } + String enabled = getProperty(ENABLED); + if (enabled != null) { + builder.setEnabled(BoolValue.newBuilder().setValue(Boolean.valueOf(enabled)).build()); + } Reporting.Builder reportingBuilder = applyReporting(builder.getReporting().toBuilder()); builder.setReporting(reportingBuilder); @@ -67,6 +76,20 @@ public static AgentConfig.Builder applyPropertiesAndEnvVars(AgentConfig.Builder setDefaultsToDataCapture(builder.getDataCapture().toBuilder()); builder.setDataCapture(dataCaptureBuilder); applyPropagationFormat(builder); + JavaAgent.Builder javaagentBuilder = applyJavaAgent(builder.getJavaagentBuilder()); + builder.setJavaagent(javaagentBuilder); + return builder; + } + + private static JavaAgent.Builder applyJavaAgent(JavaAgent.Builder builder) { + String filterJarPaths = getProperty(JAVAAGENT_FILTER_JAR_PATHS); + if (filterJarPaths != null) { + builder.clearFilterJarPaths(); + String[] jarPaths = filterJarPaths.split(","); + for (String jarPath : jarPaths) { + builder.addFilterJarPaths(StringValue.newBuilder().setValue(jarPath)); + } + } return builder; } diff --git a/javaagent-core/src/main/java/org/hypertrace/agent/core/config/HypertraceConfig.java b/javaagent-core/src/main/java/org/hypertrace/agent/core/config/HypertraceConfig.java index bb96fe85a..0e8c9ea49 100644 --- a/javaagent-core/src/main/java/org/hypertrace/agent/core/config/HypertraceConfig.java +++ b/javaagent-core/src/main/java/org/hypertrace/agent/core/config/HypertraceConfig.java @@ -162,6 +162,9 @@ private static AgentConfig.Builder applyDefaults(AgentConfig.Builder configBuild if (configBuilder.getServiceName().getValue().isEmpty()) { configBuilder.setServiceName(StringValue.newBuilder().setValue(DEFAULT_SERVICE_NAME).build()); } + if (!configBuilder.hasEnabled()) { + configBuilder.setEnabled(BoolValue.newBuilder().setValue(true).build()); + } Reporting.Builder reportingBuilder = applyReportingDefaults(configBuilder.getReporting().toBuilder()); diff --git a/javaagent-core/src/main/proto b/javaagent-core/src/main/proto index db8c9cd4f..f950aa554 160000 --- a/javaagent-core/src/main/proto +++ b/javaagent-core/src/main/proto @@ -1 +1 @@ -Subproject commit db8c9cd4f1e99630010d8c3389492d1ee6f0cb69 +Subproject commit f950aa55481d30d860dd61f0cc610caa5555f544 diff --git a/javaagent-core/src/test/java/org/hypertrace/agent/core/config/EnvironmentConfigTest.java b/javaagent-core/src/test/java/org/hypertrace/agent/core/config/EnvironmentConfigTest.java index 60d37cee0..1a250aaa0 100644 --- a/javaagent-core/src/test/java/org/hypertrace/agent/core/config/EnvironmentConfigTest.java +++ b/javaagent-core/src/test/java/org/hypertrace/agent/core/config/EnvironmentConfigTest.java @@ -35,6 +35,8 @@ class EnvironmentConfigTest { @ClearSystemProperty(key = EnvironmentConfig.PROPAGATION_FORMATS) @ClearSystemProperty(key = EnvironmentConfig.CAPTURE_HTTP_BODY_PREFIX + "request") @ClearSystemProperty(key = EnvironmentConfig.CAPTURE_BODY_MAX_SIZE_BYTES) + @ClearSystemProperty(key = EnvironmentConfig.JAVAAGENT_FILTER_JAR_PATHS) + @ClearSystemProperty(key = EnvironmentConfig.ENABLED) public void systemProperties() { // when tests are run in parallel the env vars/sys props set it junit-pioneer are visible to // parallel tests @@ -46,11 +48,14 @@ public void systemProperties() { System.setProperty(EnvironmentConfig.OPA_ENABLED, "true"); System.setProperty(EnvironmentConfig.PROPAGATION_FORMATS, "B3,TRACECONTEXT"); System.setProperty(EnvironmentConfig.CAPTURE_BODY_MAX_SIZE_BYTES, "512"); + System.setProperty(EnvironmentConfig.JAVAAGENT_FILTER_JAR_PATHS, "/path1.jar,/path/2/jar.jar"); + System.setProperty(EnvironmentConfig.ENABLED, "false"); AgentConfig.Builder configBuilder = AgentConfig.newBuilder(); configBuilder.setServiceName(StringValue.newBuilder().setValue("foo")); AgentConfig agentConfig = EnvironmentConfig.applyPropertiesAndEnvVars(configBuilder).build(); + Assertions.assertEquals(false, agentConfig.getEnabled().getValue()); Assertions.assertEquals("foo", agentConfig.getServiceName().getValue()); Assertions.assertEquals( Arrays.asList(PropagationFormat.B3, PropagationFormat.TRACECONTEXT), @@ -65,5 +70,12 @@ public void systemProperties() { Assertions.assertEquals(true, agentConfig.getReporting().getSecure().getValue()); Assertions.assertEquals( true, agentConfig.getDataCapture().getHttpBody().getRequest().getValue()); + Assertions.assertEquals(2, agentConfig.getJavaagent().getFilterJarPathsCount()); + Assertions.assertEquals( + StringValue.newBuilder().setValue("/path1.jar").build(), + agentConfig.getJavaagent().getFilterJarPaths(0)); + Assertions.assertEquals( + StringValue.newBuilder().setValue("/path/2/jar.jar").build(), + agentConfig.getJavaagent().getFilterJarPaths(1)); } } diff --git a/javaagent-core/src/test/java/org/hypertrace/agent/core/config/HypertraceConfigTest.java b/javaagent-core/src/test/java/org/hypertrace/agent/core/config/HypertraceConfigTest.java index 9eab918b6..936a55982 100644 --- a/javaagent-core/src/test/java/org/hypertrace/agent/core/config/HypertraceConfigTest.java +++ b/javaagent-core/src/test/java/org/hypertrace/agent/core/config/HypertraceConfigTest.java @@ -16,6 +16,7 @@ package org.hypertrace.agent.core.config; +import com.google.protobuf.StringValue; import com.google.protobuf.util.JsonFormat; import java.io.File; import java.io.FileOutputStream; @@ -35,6 +36,7 @@ public class HypertraceConfigTest { public void defaultValues() throws IOException { URL resource = getClass().getClassLoader().getResource("emptyconfig.yaml"); AgentConfig agentConfig = HypertraceConfig.load(resource.getPath()); + Assertions.assertTrue(agentConfig.getEnabled().getValue()); Assertions.assertEquals("unknown", agentConfig.getServiceName().getValue()); Assertions.assertEquals( HypertraceConfig.DEFAULT_REPORTING_ENDPOINT, @@ -67,6 +69,8 @@ public void defaultValues() throws IOException { true, agentConfig.getDataCapture().getRpcBody().getRequest().getValue()); Assertions.assertEquals( true, agentConfig.getDataCapture().getRpcBody().getResponse().getValue()); + Assertions.assertTrue(agentConfig.hasJavaagent()); + Assertions.assertEquals(0, agentConfig.getJavaagent().getFilterJarPathsCount()); } @Test @@ -93,6 +97,7 @@ public void jsonConfig(@TempDir File tempFolder) throws IOException { private void assertConfig(AgentConfig agentConfig) { Assertions.assertEquals("service", agentConfig.getServiceName().getValue()); + Assertions.assertEquals(false, agentConfig.getEnabled().getValue()); Assertions.assertEquals( Arrays.asList(PropagationFormat.B3), agentConfig.getPropagationFormatsList()); Assertions.assertEquals( @@ -111,6 +116,13 @@ private void assertConfig(AgentConfig agentConfig) { true, agentConfig.getDataCapture().getHttpBody().getRequest().getValue()); Assertions.assertEquals( true, agentConfig.getDataCapture().getRpcBody().getRequest().getValue()); + Assertions.assertEquals(2, agentConfig.getJavaagent().getFilterJarPathsCount()); + Assertions.assertEquals( + StringValue.newBuilder().setValue("/path1.jar").build(), + agentConfig.getJavaagent().getFilterJarPaths(0)); + Assertions.assertEquals( + StringValue.newBuilder().setValue("/path/2/jar.jar").build(), + agentConfig.getJavaagent().getFilterJarPaths(1)); } @Test diff --git a/javaagent-core/src/test/resources/config.yaml b/javaagent-core/src/test/resources/config.yaml index 8e068316a..ea1f5f8ef 100644 --- a/javaagent-core/src/test/resources/config.yaml +++ b/javaagent-core/src/test/resources/config.yaml @@ -1,5 +1,6 @@ # use snake case for newly added fields service_name: service +enabled: false propagationFormats: - B3 reporting: @@ -14,3 +15,7 @@ dataCapture: request: true response: false httpBody: +javaagent: + filter_jar_paths: + - /path1.jar + - /path/2/jar.jar diff --git a/javaagent-tooling/build.gradle.kts b/javaagent-tooling/build.gradle.kts index 6376f3cff..f817752e5 100644 --- a/javaagent-tooling/build.gradle.kts +++ b/javaagent-tooling/build.gradle.kts @@ -19,5 +19,5 @@ dependencies { instrumentationMuzzle("net.bytebuddy:byte-buddy-agent:1.10.18") instrumentationMuzzle("com.blogspot.mydailyjava:weak-lock-free:0.15") instrumentationMuzzle("com.google.auto.service:auto-service:1.0-rc7") - instrumentationMuzzle("org.slf4j:slf4j-api:1.7.30") + instrumentationMuzzle("org.slf4j:slf4j-api:${versions["slf4j"]}") } diff --git a/otel-extensions/build.gradle.kts b/otel-extensions/build.gradle.kts index bb3e60584..a8acec87c 100644 --- a/otel-extensions/build.gradle.kts +++ b/otel-extensions/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:${versions["opentelemetry"]}-alpha") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-spi:${versions["opentelemetry_java_agent"]}") - implementation("org.slf4j:slf4j-api:1.7.30") + implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") implementation("com.google.auto.service:auto-service:1.0-rc7") implementation("net.bytebuddy:byte-buddy:${versions["byte_buddy"]}") annotationProcessor("com.google.auto.service:auto-service:1.0-rc7") diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/CgroupsReader.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/CgroupsReader.java index 252199e78..afa20bcbd 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/CgroupsReader.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/CgroupsReader.java @@ -51,6 +51,9 @@ public String readContainerId() { try (BufferedReader br = new BufferedReader(new FileReader(cgroupsPath))) { String line; while ((line = br.readLine()) != null) { + if (line.endsWith(".scope")) { + line = line.substring(0, line.length() - ".scope".length()); + } if (line.length() > CONTAINER_ID_LENGTH) { String id = line.substring(line.length() - CONTAINER_ID_LENGTH); if (!id.contains("/")) { diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java index 82c0574c0..6651d1492 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/HypertraceAgentConfiguration.java @@ -41,11 +41,14 @@ public class HypertraceAgentConfiguration implements PropertySource { private static final String OTEL_DEFAULT_LOG_LEVEL = "io.opentelemetry.javaagent.slf4j.simpleLogger.defaultLogLevel"; + private static final String OTEL_ENABLED = "otel.javaagent.enabled"; + @Override public Map getProperties() { AgentConfig agentConfig = HypertraceConfig.get(); Map configProperties = new HashMap<>(); + configProperties.put(OTEL_ENABLED, String.valueOf(agentConfig.getEnabled().getValue())); configProperties.put(OTEL_TRACE_EXPORTER, "zipkin"); configProperties.put( OTEL_EXPORTER_ZIPKIN_SERVICE_NAME, agentConfig.getServiceName().getValue()); diff --git a/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/DockerCgroupsReaderTest.java b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/DockerCgroupsReaderTest.java index bbdbd40a3..f6251c5d4 100644 --- a/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/DockerCgroupsReaderTest.java +++ b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/DockerCgroupsReaderTest.java @@ -42,4 +42,16 @@ void readContainerId(@TempDir File tempFolder) throws IOException { CgroupsReader cgroupsReader = new CgroupsReader(file.getPath()); Assertions.assertEquals(expected, cgroupsReader.readContainerId()); } + + @Test + void readScopedContainerId(@TempDir File tempFolder) throws IOException { + File file = new File(tempFolder, "cgroup"); + String expected = "736665661f3cf3ec691b2feeb2a1ec78918c0ef65381160bbb04f4c298169679"; + String content = + "1:name=systemd:/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-podab2df320_6a91_4bc7_bd18_0d4328f04a8f.slice/crio-736665661f3cf3ec691b2feeb2a1ec78918c0ef65381160bbb04f4c298169679.scope"; + Files.write(content.getBytes(Charsets.UTF_8), file); + + CgroupsReader cgroupsReader = new CgroupsReader(file.getPath()); + Assertions.assertEquals(expected, cgroupsReader.readContainerId()); + } } diff --git a/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootDiabledAgentSmokeTest.java b/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootDiabledAgentSmokeTest.java new file mode 100644 index 000000000..8af24a34a --- /dev/null +++ b/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootDiabledAgentSmokeTest.java @@ -0,0 +1,75 @@ +/* + * Copyright The Hypertrace Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hypertrace.agent.smoketest; + +import java.io.IOException; +import okhttp3.Request; +import okhttp3.Response; +import org.awaitility.core.ConditionTimeoutException; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.utility.MountableFile; + +public class SpringBootDiabledAgentSmokeTest extends AbstractSmokeTest { + + @Override + protected String getTargetImage(int jdk) { + return "ghcr.io/open-telemetry/java-test-containers:smoke-springboot-jdk" + + jdk + + "-20210209.550405798"; + } + + private GenericContainer app; + + @BeforeEach + void beforeEach() { + app = createAppUnderTest(8); + app.addEnv("HT_ENABLED", "false"); + app.withCopyFileToContainer( + MountableFile.forClasspathResource("/ht-config-all-disabled.yaml"), + "/etc/ht-config-all-disabled.yaml"); + app.withEnv("HT_CONFIG_FILE", "/etc/ht-config-all-disabled.yaml"); + app.start(); + } + + @AfterEach + void afterEach() { + if (app != null) { + app.stop(); + } + } + + @Test() + public void get() throws IOException { + // TODO test with multiple JDK (11, 14) + String url = String.format("http://localhost:%d/greeting", app.getMappedPort(8080)); + Request request = new Request.Builder().url(url).get().build(); + + try (Response response = client.newCall(request).execute()) { + Assertions.assertEquals(response.body().string(), "Hi!"); + } + + Assertions.assertThrows( + ConditionTimeoutException.class, + () -> { + waitForTraces(); + }); + } +} diff --git a/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootDisabledBodyCaptureSmokeTest.java b/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootDisabledBodyCaptureSmokeTest.java index 2f6850402..49f2fdddf 100644 --- a/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootDisabledBodyCaptureSmokeTest.java +++ b/smoke-tests/src/test/java/org/hypertrace/agent/smoketest/SpringBootDisabledBodyCaptureSmokeTest.java @@ -36,7 +36,9 @@ public class SpringBootDisabledBodyCaptureSmokeTest extends AbstractSmokeTest { @Override protected String getTargetImage(int jdk) { - return "open-telemetry-docker-dev.bintray.io/java/smoke-springboot-jdk" + jdk + ":latest"; + return "ghcr.io/open-telemetry/java-test-containers:smoke-springboot-jdk" + + jdk + + "-20210209.550405798"; } private GenericContainer app; @@ -65,7 +67,9 @@ public void get() throws IOException { String url = String.format("http://localhost:%d/greeting", app.getMappedPort(8080)); Request request = new Request.Builder().url(url).get().build(); - Response response = client.newCall(request).execute(); + try (Response response = client.newCall(request).execute()) { + Assertions.assertEquals(response.body().string(), "Hi!"); + } Collection traces = waitForTraces(); Object currentAgentVersion = @@ -74,7 +78,6 @@ public void get() throws IOException { .getMainAttributes() .get(Attributes.Name.IMPLEMENTATION_VERSION); - Assertions.assertEquals(response.body().string(), "Hi!"); Assertions.assertEquals(1, countSpansByName(traces, "/greeting")); Assertions.assertEquals(1, countSpansByName(traces, "webcontroller.greeting")); Assertions.assertTrue( diff --git a/testing-bootstrap/build.gradle.kts b/testing-bootstrap/build.gradle.kts index 28314db94..85be77fd6 100644 --- a/testing-bootstrap/build.gradle.kts +++ b/testing-bootstrap/build.gradle.kts @@ -16,7 +16,7 @@ dependencies { implementation(project(":filter-api")) implementation("ch.qos.logback:logback-classic:1.2.3") - implementation("org.slf4j:slf4j-api:1.7.30") + implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") } tasks { diff --git a/testing-common/build.gradle.kts b/testing-common/build.gradle.kts index 8a9d89d51..4bc82931a 100644 --- a/testing-common/build.gradle.kts +++ b/testing-common/build.gradle.kts @@ -20,9 +20,9 @@ dependencies { implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-spi:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:${versions["opentelemetry_java_agent"]}") implementation("ch.qos.logback:logback-classic:1.2.3") - implementation("org.slf4j:log4j-over-slf4j:1.7.30") - implementation("org.slf4j:jcl-over-slf4j:1.7.30") - implementation("org.slf4j:jul-to-slf4j:1.7.30") + implementation("org.slf4j:log4j-over-slf4j:${versions["slf4j"]}") + implementation("org.slf4j:jcl-over-slf4j:${versions["slf4j"]}") + implementation("org.slf4j:jul-to-slf4j:${versions["slf4j"]}") implementation("net.bytebuddy:byte-buddy:${versions["byte_buddy"]}") implementation("net.bytebuddy:byte-buddy-agent:${versions["byte_buddy"]}") implementation("com.google.auto.service:auto-service:1.0-rc7")