Skip to content

Commit 1bf2002

Browse files
authored
New - remove JDK v1.8.252 requirement (#408)
2 parents dc9aa27 + c78b98a commit 1bf2002

8 files changed

Lines changed: 265 additions & 70 deletions

File tree

custom/src/main/java/com/solarwinds/opentelemetry/extensions/SolarwindsAgentListener.java

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,19 @@
2020
import static com.solarwinds.opentelemetry.extensions.config.provider.AutoConfigurationCustomizerProviderImpl.setAgentEnabled;
2121

2222
import com.google.auto.service.AutoService;
23-
import com.solarwinds.joboe.config.ConfigGroup;
2423
import com.solarwinds.joboe.config.ConfigManager;
2524
import com.solarwinds.joboe.config.ConfigProperty;
26-
import com.solarwinds.joboe.config.InvalidConfigException;
25+
import com.solarwinds.joboe.config.JavaRuntimeVersionChecker;
2726
import com.solarwinds.joboe.core.ReporterFactory;
2827
import com.solarwinds.joboe.core.profiler.Profiler;
2928
import com.solarwinds.joboe.core.profiler.ProfilerSetting;
30-
import com.solarwinds.joboe.core.rpc.ClientException;
3129
import com.solarwinds.joboe.core.rpc.ClientManagerProvider;
3230
import com.solarwinds.joboe.core.rpc.RpcClientManager;
3331
import com.solarwinds.joboe.core.util.DaemonThreadFactory;
3432
import com.solarwinds.joboe.core.util.HostInfoUtils;
3533
import com.solarwinds.joboe.logging.Logger;
3634
import com.solarwinds.joboe.logging.LoggerFactory;
37-
import com.solarwinds.joboe.metrics.MetricsCollector;
38-
import com.solarwinds.joboe.metrics.MetricsMonitor;
3935
import com.solarwinds.joboe.metrics.SystemMonitorController;
40-
import com.solarwinds.joboe.metrics.SystemMonitorFactoryImpl;
4136
import com.solarwinds.joboe.sampling.SettingsManager;
4237
import com.solarwinds.opentelemetry.core.AgentState;
4338
import com.solarwinds.opentelemetry.extensions.config.HttpSettingsFetcher;
@@ -117,29 +112,11 @@ private void executeStartupTasks() {
117112
SamplingConfigProvider.getSamplingConfiguration());
118113
logger.debug("Initialized HostUtils");
119114

120-
logger.info("Starting System monitor");
121-
SystemMonitorController.startWithBuilder(
122-
() ->
123-
new SystemMonitorFactoryImpl(
124-
ConfigManager.getConfigs(ConfigGroup.MONITOR)) {
125-
@Override
126-
protected MetricsMonitor buildMetricsMonitor() {
127-
try {
128-
MetricsCollector metricsCollector =
129-
new MetricsCollector(configs, null);
130-
131-
return MetricsMonitor.buildInstance(configs, metricsCollector);
132-
} catch (InvalidConfigException | ClientException e) {
133-
logger.debug(String.format("Error creating MetricsCollector: %s", e));
134-
}
135-
return null;
136-
}
137-
}.buildMonitors());
138-
logger.debug("Started System monitor");
139-
140115
ProfilerSetting profilerSetting =
141116
(ProfilerSetting) ConfigManager.getConfig(ConfigProperty.PROFILER);
142-
if (profilerSetting != null && profilerSetting.isEnabled()) {
117+
if (JavaRuntimeVersionChecker.isJdkVersionSupported()
118+
&& profilerSetting != null
119+
&& profilerSetting.isEnabled()) {
143120
logger.debug("Profiler is enabled, local settings : " + profilerSetting);
144121
Profiler.initialize(
145122
profilerSetting,
@@ -148,7 +125,7 @@ protected MetricsMonitor buildMetricsMonitor() {
148125
RpcClientManager.getClient(
149126
RpcClientManager.OperationType.PROFILING)));
150127
} else {
151-
logger.debug("Profiler is disabled, local settings : " + profilerSetting);
128+
logger.info("Profiler is disabled, local settings : " + profilerSetting);
152129
}
153130

154131
// now wait for all the latches (for now there's only one for settings)

custom/src/main/java/com/solarwinds/opentelemetry/extensions/SolarwindsTracerProviderCustomizer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import static com.solarwinds.opentelemetry.extensions.config.provider.AutoConfigurationCustomizerProviderImpl.isAgentEnabled;
2020

21+
import com.solarwinds.joboe.config.JavaRuntimeVersionChecker;
2122
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
2223
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
2324
import java.util.function.BiFunction;
@@ -29,9 +30,12 @@ public class SolarwindsTracerProviderCustomizer
2930
public SdkTracerProviderBuilder apply(
3031
SdkTracerProviderBuilder tracerProvider, ConfigProperties config) {
3132
if (isAgentEnabled()) {
33+
if (JavaRuntimeVersionChecker.isJdkVersionSupported()) {
34+
tracerProvider.addSpanProcessor(new SolarwindsProfilingSpanProcessor());
35+
}
36+
3237
tracerProvider
3338
.setSampler(new SolarwindsSampler())
34-
.addSpanProcessor(new SolarwindsProfilingSpanProcessor())
3539
.addSpanProcessor(new InboundMeasurementMetricsGenerator());
3640
}
3741

custom/src/main/java/com/solarwinds/opentelemetry/extensions/config/DeclarativeLoader.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,9 @@ public void beforeAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemet
4141
AutoConfigureUtil.getConfigProvider(autoConfiguredOpenTelemetrySdk);
4242

4343
if (configProvider != null) {
44-
boolean jdkVersionSupported = JavaRuntimeVersionChecker.isJdkVersionSupported();
4544
DeclarativeConfigProperties instrumentationConfig = configProvider.getInstrumentationConfig();
4645

47-
if (instrumentationConfig != null && jdkVersionSupported) {
46+
if (instrumentationConfig != null) {
4847
DeclarativeConfigProperties solarwinds =
4948
instrumentationConfig
5049
.getStructured("java", DeclarativeConfigProperties.empty())
@@ -64,13 +63,11 @@ public void beforeAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemet
6463
}
6564
}
6665

67-
if (!jdkVersionSupported) {
66+
if (!JavaRuntimeVersionChecker.isJdkVersionSupported()) {
6867
logger.warn(
6968
String.format(
70-
"Unsupported Java runtime version: %s. The lowest Java version supported is %s.",
69+
"Profiling is not supported for Java runtime version: %s . The lowest Java version supported for profiling is %s.",
7170
System.getProperty("java.version"), JavaRuntimeVersionChecker.minVersionSupported));
72-
73-
logger.warn("Solarwinds' extension is disabled");
7471
}
7572
}
7673
}

custom/src/main/java/com/solarwinds/opentelemetry/extensions/config/provider/AutoConfigurationCustomizerProviderImpl.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,12 @@ public static void setAgentEnabled(boolean agentEnabled) {
5656
@Override
5757
public void customize(@Nonnull AutoConfigurationCustomizer autoConfiguration) {
5858
try {
59-
agentEnabled = JavaRuntimeVersionChecker.isJdkVersionSupported();
60-
if (agentEnabled) {
61-
ConfigurationLoader.load();
62-
logger.debug("Loaded via normal config");
63-
} else {
59+
ConfigurationLoader.load();
60+
logger.debug("Loaded via normal config");
61+
if (!JavaRuntimeVersionChecker.isJdkVersionSupported()) {
6462
logger.warn(
6563
String.format(
66-
"Unsupported Java runtime version: %s. The lowest Java version supported is %s.",
64+
"Profiling is not supported for Java runtime version: %s . The lowest Java version supported for profiling is %s.",
6765
System.getProperty("java.version"), JavaRuntimeVersionChecker.minVersionSupported));
6866
}
6967

custom/src/main/java/com/solarwinds/opentelemetry/extensions/config/provider/CustomConfigCustomizerProvider.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.solarwinds.opentelemetry.extensions.config.provider;
1818

1919
import com.google.auto.service.AutoService;
20+
import com.solarwinds.joboe.config.JavaRuntimeVersionChecker;
2021
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizer;
2122
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizerProvider;
2223
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalResourceDetectionModel;
@@ -80,15 +81,17 @@ private void addResourceDetector(ResourceModel resourceModel) {
8081
}
8182

8283
private void addProcessors(TracerProviderModel model) {
83-
List<SpanProcessorModel> processors =
84-
Collections.singletonList(
85-
new SpanProcessorModel()
86-
.withAdditionalProperty(
87-
ProfilingSpanProcessorComponentProvider.COMPONENT_NAME,
88-
Collections.emptyMap()));
84+
if (JavaRuntimeVersionChecker.isJdkVersionSupported()) {
85+
List<SpanProcessorModel> processors =
86+
Collections.singletonList(
87+
new SpanProcessorModel()
88+
.withAdditionalProperty(
89+
ProfilingSpanProcessorComponentProvider.COMPONENT_NAME,
90+
Collections.emptyMap()));
8991

90-
ArrayList<SpanProcessorModel> allProcessors = new ArrayList<>(model.getProcessors());
91-
allProcessors.addAll(processors);
92-
model.withProcessors(allProcessors);
92+
ArrayList<SpanProcessorModel> allProcessors = new ArrayList<>(model.getProcessors());
93+
allProcessors.addAll(processors);
94+
model.withProcessors(allProcessors);
95+
}
9396
}
9497
}
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
/*
2+
* © SolarWinds Worldwide, LLC. All rights reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.solarwinds.opentelemetry.extensions;
18+
19+
import static org.mockito.ArgumentMatchers.any;
20+
import static org.mockito.Mockito.mockStatic;
21+
import static org.mockito.Mockito.never;
22+
import static org.mockito.Mockito.times;
23+
import static org.mockito.Mockito.verify;
24+
import static org.mockito.Mockito.when;
25+
26+
import com.solarwinds.joboe.config.JavaRuntimeVersionChecker;
27+
import com.solarwinds.opentelemetry.extensions.config.provider.AutoConfigurationCustomizerProviderImpl;
28+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
29+
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
30+
import io.opentelemetry.sdk.trace.SpanProcessor;
31+
import io.opentelemetry.sdk.trace.samplers.Sampler;
32+
import org.junit.jupiter.api.AfterEach;
33+
import org.junit.jupiter.api.BeforeEach;
34+
import org.junit.jupiter.api.Test;
35+
import org.junit.jupiter.api.extension.ExtendWith;
36+
import org.mockito.InjectMocks;
37+
import org.mockito.Mock;
38+
import org.mockito.MockedStatic;
39+
import org.mockito.junit.jupiter.MockitoExtension;
40+
41+
@ExtendWith(MockitoExtension.class)
42+
class SolarwindsTracerProviderCustomizerTest {
43+
44+
@InjectMocks private SolarwindsTracerProviderCustomizer tested;
45+
46+
@Mock private SdkTracerProviderBuilder tracerProviderBuilderMock;
47+
48+
@Mock private ConfigProperties configPropertiesMock;
49+
50+
private MockedStatic<AutoConfigurationCustomizerProviderImpl>
51+
autoConfigurationCustomizerProviderImplMockedStatic;
52+
53+
@BeforeEach
54+
void setUp() {
55+
autoConfigurationCustomizerProviderImplMockedStatic =
56+
mockStatic(AutoConfigurationCustomizerProviderImpl.class);
57+
}
58+
59+
@AfterEach
60+
void tearDown() {
61+
autoConfigurationCustomizerProviderImplMockedStatic.close();
62+
}
63+
64+
@Test
65+
void verifyThatProfilingSpanProcessorIsAddedWhenAgentEnabledAndJdkVersionSupported() {
66+
try (MockedStatic<JavaRuntimeVersionChecker> javaRuntimeVersionCheckerMockedStatic =
67+
mockStatic(JavaRuntimeVersionChecker.class)) {
68+
69+
autoConfigurationCustomizerProviderImplMockedStatic
70+
.when(AutoConfigurationCustomizerProviderImpl::isAgentEnabled)
71+
.thenReturn(true);
72+
73+
javaRuntimeVersionCheckerMockedStatic
74+
.when(JavaRuntimeVersionChecker::isJdkVersionSupported)
75+
.thenReturn(true);
76+
77+
when(tracerProviderBuilderMock.addSpanProcessor(any(SpanProcessor.class)))
78+
.thenReturn(tracerProviderBuilderMock);
79+
when(tracerProviderBuilderMock.setSampler(any(Sampler.class)))
80+
.thenReturn(tracerProviderBuilderMock);
81+
82+
tested.apply(tracerProviderBuilderMock, configPropertiesMock);
83+
84+
// Should add SolarwindsProfilingSpanProcessor and InboundMeasurementMetricsGenerator
85+
verify(tracerProviderBuilderMock, times(2)).addSpanProcessor(any(SpanProcessor.class));
86+
verify(tracerProviderBuilderMock).setSampler(any(Sampler.class));
87+
}
88+
}
89+
90+
@Test
91+
void verifyThatProfilingSpanProcessorIsNotAddedWhenJdkVersionNotSupported() {
92+
try (MockedStatic<JavaRuntimeVersionChecker> javaRuntimeVersionCheckerMockedStatic =
93+
mockStatic(JavaRuntimeVersionChecker.class)) {
94+
95+
autoConfigurationCustomizerProviderImplMockedStatic
96+
.when(AutoConfigurationCustomizerProviderImpl::isAgentEnabled)
97+
.thenReturn(true);
98+
99+
javaRuntimeVersionCheckerMockedStatic
100+
.when(JavaRuntimeVersionChecker::isJdkVersionSupported)
101+
.thenReturn(false);
102+
103+
when(tracerProviderBuilderMock.addSpanProcessor(any(SpanProcessor.class)))
104+
.thenReturn(tracerProviderBuilderMock);
105+
when(tracerProviderBuilderMock.setSampler(any(Sampler.class)))
106+
.thenReturn(tracerProviderBuilderMock);
107+
108+
tested.apply(tracerProviderBuilderMock, configPropertiesMock);
109+
110+
// Should only add InboundMeasurementMetricsGenerator, not SolarwindsProfilingSpanProcessor
111+
verify(tracerProviderBuilderMock, times(1)).addSpanProcessor(any(SpanProcessor.class));
112+
verify(tracerProviderBuilderMock).setSampler(any(Sampler.class));
113+
}
114+
}
115+
116+
@Test
117+
void verifyThatNoProcessorsAddedWhenAgentDisabled() {
118+
autoConfigurationCustomizerProviderImplMockedStatic
119+
.when(AutoConfigurationCustomizerProviderImpl::isAgentEnabled)
120+
.thenReturn(false);
121+
122+
tested.apply(tracerProviderBuilderMock, configPropertiesMock);
123+
124+
verify(tracerProviderBuilderMock, never()).addSpanProcessor(any(SpanProcessor.class));
125+
verify(tracerProviderBuilderMock, never()).setSampler(any(Sampler.class));
126+
}
127+
}

0 commit comments

Comments
 (0)