Skip to content

Commit c545abb

Browse files
committed
Update configuration schema
1 parent 8fd18fb commit c545abb

File tree

11 files changed

+269
-221
lines changed

11 files changed

+269
-221
lines changed

agent/agent-bootstrap/src/main/java/com/microsoft/applicationinsights/agent/bootstrap/MainEntryPoint.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
import com.microsoft.applicationinsights.agent.bootstrap.configuration.Configuration;
2828
import com.microsoft.applicationinsights.agent.bootstrap.configuration.ConfigurationBuilder;
29+
import com.microsoft.applicationinsights.agent.bootstrap.configuration.InstrumentationSettings;
30+
import com.microsoft.applicationinsights.agent.bootstrap.configuration.InstrumentationSettings.SelfDiagnostics;
2931
import com.microsoft.applicationinsights.agent.bootstrap.diagnostics.DiagnosticsHelper;
3032
import com.microsoft.applicationinsights.agent.bootstrap.diagnostics.status.StatusFile;
3133
import io.opentelemetry.auto.bootstrap.Agent;
@@ -37,12 +39,12 @@
3739
// this class has one purpose, start diagnostics before passing control to opentelemetry-auto-instr-java
3840
public class MainEntryPoint {
3941

40-
private static Configuration configuration;
42+
private static InstrumentationSettings configuration;
4143

4244
private MainEntryPoint() {
4345
}
4446

45-
public static Configuration getConfiguration() {
47+
public static InstrumentationSettings getConfiguration() {
4648
return configuration;
4749
}
4850

@@ -53,8 +55,8 @@ public static void start(Instrumentation instrumentation, URL bootstrapURL) {
5355
File agentJarFile = new File(bootstrapURL.toURI());
5456
DiagnosticsHelper.setAgentJarFile(agentJarFile);
5557
// configuration is only read this early in order to extract logging configuration
56-
configuration = ConfigurationBuilder.create(agentJarFile.toPath());
57-
startupLogger = configureLogging(configuration);
58+
configuration = ConfigurationBuilder.create(agentJarFile.toPath()).instrumentationSettings;
59+
startupLogger = configureLogging(configuration.preview.selfDiagnostics);
5860
ConfigurationBuilder.logConfigurationMessages();
5961
MDC.put("microsoft.ai.operationName", "Startup");
6062
Agent.start(instrumentation, bootstrapURL);
@@ -79,9 +81,9 @@ public static void start(Instrumentation instrumentation, URL bootstrapURL) {
7981
}
8082
}
8183

82-
private static Logger configureLogging(Configuration configuration) {
84+
private static Logger configureLogging(SelfDiagnostics selfDiagnostics) {
8385
String logbackXml;
84-
String destination = configuration.preview.selfDiagnostics.destination;
86+
String destination = selfDiagnostics.destination;
8587
boolean logUnknownDestination = false;
8688
if (DiagnosticsHelper.isAppServiceCodeless()) {
8789
logbackXml = "applicationinsights.appsvc.logback.xml";
@@ -100,9 +102,9 @@ private static Logger configureLogging(Configuration configuration) {
100102
final URL configurationFile = cl.getResource(logbackXml);
101103
System.setProperty("applicationinsights.logback.configurationFile", configurationFile.toString());
102104

103-
String logbackDirectory = configuration.preview.selfDiagnostics.directory;
104-
String logbackLevel = configuration.preview.selfDiagnostics.level;
105-
int logbackMaxFileSizeMB = configuration.preview.selfDiagnostics.maxSizeMB;
105+
String logbackDirectory = selfDiagnostics.directory;
106+
String logbackLevel = selfDiagnostics.level;
107+
int logbackMaxFileSizeMB = selfDiagnostics.maxSizeMB;
106108

107109
if (logbackDirectory == null) {
108110
logbackDirectory = System.getProperty("java.io.tmpdir");

agent/agent-bootstrap/src/main/java/com/microsoft/applicationinsights/agent/bootstrap/configuration/Configuration.java

Lines changed: 1 addition & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -21,72 +21,7 @@
2121

2222
package com.microsoft.applicationinsights.agent.bootstrap.configuration;
2323

24-
import java.util.Collections;
25-
import java.util.List;
26-
import java.util.Map;
27-
import java.util.concurrent.TimeUnit;
28-
2924
public class Configuration {
3025

31-
public String connectionString;
32-
public String instrumentationKey;
33-
public PreviewConfiguration preview = new PreviewConfiguration();
34-
35-
public static class PreviewConfiguration {
36-
37-
public String roleName;
38-
public String roleInstance;
39-
public SelfDiagnostics selfDiagnostics = new SelfDiagnostics();
40-
public Sampling sampling = new Sampling();
41-
public Heartbeat heartbeat = new Heartbeat();
42-
public HttpProxy httpProxy = new HttpProxy();
43-
public LiveMetrics liveMetrics = new LiveMetrics();
44-
public boolean developerMode;
45-
46-
public List<JmxMetric> jmxMetrics = Collections.emptyList();
47-
48-
public Map<String, Map<String, Object>> instrumentation = Collections.emptyMap();
49-
}
50-
51-
public static class SelfDiagnostics {
52-
53-
public String destination;
54-
public String directory;
55-
public String level = "error";
56-
public int maxSizeMB = 10;
57-
}
58-
59-
public static class Sampling {
60-
61-
public FixedRateSampling fixedRate;
62-
}
63-
64-
public static class FixedRateSampling {
65-
66-
public Double percentage;
67-
}
68-
69-
public static class Heartbeat {
70-
71-
public boolean enabled = true;
72-
public long intervalSeconds = TimeUnit.MINUTES.toSeconds(15);
73-
}
74-
75-
public static class HttpProxy {
76-
77-
public String host;
78-
public int port = 80;
79-
}
80-
81-
public static class LiveMetrics {
82-
83-
public boolean enabled = true;
84-
}
85-
86-
public static class JmxMetric {
87-
88-
public String objectName;
89-
public String attribute;
90-
public String display;
91-
}
26+
public InstrumentationSettings instrumentationSettings = new InstrumentationSettings();
9227
}

agent/agent-bootstrap/src/main/java/com/microsoft/applicationinsights/agent/bootstrap/configuration/ConfigurationBuilder.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.Map;
3232
import java.util.concurrent.CopyOnWriteArrayList;
3333

34+
import com.microsoft.applicationinsights.agent.bootstrap.configuration.InstrumentationSettings.PreviewConfiguration;
3435
import com.microsoft.applicationinsights.agent.bootstrap.diagnostics.DiagnosticsHelper;
3536
import com.squareup.moshi.JsonAdapter;
3637
import com.squareup.moshi.Moshi;
@@ -55,10 +56,11 @@ public class ConfigurationBuilder {
5556
public static Configuration create(Path agentJarPath) throws IOException {
5657

5758
Configuration config = loadConfigurationFile(agentJarPath);
59+
PreviewConfiguration preview = config.instrumentationSettings.preview;
5860

59-
config.preview.roleName = overlayWithEnvVar(APPLICATIONINSIGHTS_ROLE_NAME, WEBSITE_SITE_NAME, config.preview.roleName);
60-
config.preview.roleInstance =
61-
overlayWithEnvVar(APPLICATIONINSIGHTS_ROLE_INSTANCE, WEBSITE_INSTANCE_ID, config.preview.roleInstance);
61+
preview.roleName = overlayWithEnvVar(APPLICATIONINSIGHTS_ROLE_NAME, WEBSITE_SITE_NAME, preview.roleName);
62+
preview.roleInstance =
63+
overlayWithEnvVar(APPLICATIONINSIGHTS_ROLE_INSTANCE, WEBSITE_INSTANCE_ID, preview.roleInstance);
6264

6365
return config;
6466
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/*
2+
* ApplicationInsights-Java
3+
* Copyright (c) Microsoft Corporation
4+
* All rights reserved.
5+
*
6+
* MIT License
7+
* Permission is hereby granted, free of charge, to any person obtaining a copy of this
8+
* software and associated documentation files (the ""Software""), to deal in the Software
9+
* without restriction, including without limitation the rights to use, copy, modify, merge,
10+
* publish, distribute, sublicense, and/or sell copies of the Software, and to permit
11+
* persons to whom the Software is furnished to do so, subject to the following conditions:
12+
* The above copyright notice and this permission notice shall be included in all copies or
13+
* substantial portions of the Software.
14+
* THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
15+
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
16+
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
17+
* FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
18+
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
19+
* DEALINGS IN THE SOFTWARE.
20+
*/
21+
22+
package com.microsoft.applicationinsights.agent.bootstrap.configuration;
23+
24+
import java.util.Collections;
25+
import java.util.List;
26+
import java.util.Map;
27+
import java.util.concurrent.TimeUnit;
28+
29+
public class InstrumentationSettings {
30+
31+
public String connectionString;
32+
public String instrumentationKey;
33+
public PreviewConfiguration preview = new PreviewConfiguration();
34+
35+
public static class PreviewConfiguration {
36+
37+
public String roleName;
38+
public String roleInstance;
39+
public SelfDiagnostics selfDiagnostics = new SelfDiagnostics();
40+
public Sampling sampling = new Sampling();
41+
public Heartbeat heartbeat = new Heartbeat();
42+
public HttpProxy httpProxy = new HttpProxy();
43+
public LiveMetrics liveMetrics = new LiveMetrics();
44+
public boolean developerMode;
45+
46+
public List<JmxMetric> jmxMetrics = Collections.emptyList();
47+
48+
public Map<String, Map<String, Object>> instrumentation = Collections.emptyMap();
49+
}
50+
51+
public static class SelfDiagnostics {
52+
53+
public String destination;
54+
public String directory;
55+
public String level = "error";
56+
public int maxSizeMB = 10;
57+
}
58+
59+
public static class Sampling {
60+
61+
public FixedRateSampling fixedRate;
62+
}
63+
64+
public static class FixedRateSampling {
65+
66+
public Double percentage;
67+
}
68+
69+
public static class Heartbeat {
70+
71+
public boolean enabled = true;
72+
public long intervalSeconds = TimeUnit.MINUTES.toSeconds(15);
73+
}
74+
75+
public static class HttpProxy {
76+
77+
public String host;
78+
public int port = 80;
79+
}
80+
81+
public static class LiveMetrics {
82+
83+
public boolean enabled = true;
84+
}
85+
86+
public static class JmxMetric {
87+
88+
public String objectName;
89+
public String attribute;
90+
public String display;
91+
}
92+
}

agent/agent-bootstrap/src/test/java/com/microsoft/applicationinsights/agent/bootstrap/configuration/ConfigurationTest.java

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.google.common.collect.ImmutableMap;
88
import com.google.common.io.CharSource;
99
import com.google.common.io.Resources;
10+
import com.microsoft.applicationinsights.agent.bootstrap.configuration.InstrumentationSettings.PreviewConfiguration;
1011
import com.squareup.moshi.JsonAdapter;
1112
import com.squareup.moshi.Moshi;
1213
import org.junit.*;
@@ -23,19 +24,22 @@ public void shouldParse() throws IOException {
2324
JsonAdapter<Configuration> jsonAdapter = moshi.adapter(Configuration.class);
2425
Configuration configuration = jsonAdapter.fromJson(json.read());
2526

26-
assertEquals("InstrumentationKey=00000000-0000-0000-0000-000000000000", configuration.connectionString);
27-
assertEquals("Something Good", configuration.preview.roleName);
28-
assertEquals("xyz123", configuration.preview.roleInstance);
29-
assertEquals((Double) 10.0, configuration.preview.sampling.fixedRate.percentage);
30-
assertEquals(false, configuration.preview.liveMetrics.enabled);
31-
assertEquals(3, configuration.preview.jmxMetrics.size());
32-
assertEquals("java.lang:type=Threading", configuration.preview.jmxMetrics.get(0).objectName);
33-
assertEquals("ThreadCount", configuration.preview.jmxMetrics.get(0).attribute);
34-
assertEquals("Thread Count", configuration.preview.jmxMetrics.get(0).display);
27+
InstrumentationSettings instrumentationSettings = configuration.instrumentationSettings;
28+
PreviewConfiguration preview = instrumentationSettings.preview;
29+
30+
assertEquals("InstrumentationKey=00000000-0000-0000-0000-000000000000", instrumentationSettings.connectionString);
31+
assertEquals("Something Good", preview.roleName);
32+
assertEquals("xyz123", preview.roleInstance);
33+
assertEquals((Double) 10.0, preview.sampling.fixedRate.percentage);
34+
assertEquals(false, preview.liveMetrics.enabled);
35+
assertEquals(3, preview.jmxMetrics.size());
36+
assertEquals("java.lang:type=Threading", preview.jmxMetrics.get(0).objectName);
37+
assertEquals("ThreadCount", preview.jmxMetrics.get(0).attribute);
38+
assertEquals("Thread Count", preview.jmxMetrics.get(0).display);
3539
assertEquals(ImmutableMap.of("__comment",
3640
Arrays.asList("this sets the explain plan threshold ...", "this is a multi-line comment"),
37-
"explainPlanThresholdInMS", 20000.0), configuration.preview.instrumentation.get("jdbc"));
38-
assertEquals(ImmutableMap.of("enabled", false), configuration.preview.instrumentation.get("logging"));
41+
"explainPlanThresholdInMS", 20000.0), preview.instrumentation.get("jdbc"));
42+
assertEquals(ImmutableMap.of("enabled", false), preview.instrumentation.get("logging"));
3943
}
4044

4145
@Test
@@ -45,11 +49,14 @@ public void shouldUseDefaults() throws IOException {
4549
JsonAdapter<Configuration> jsonAdapter = moshi.adapter(Configuration.class);
4650
Configuration configuration = jsonAdapter.fromJson("{}");
4751

48-
assertEquals(null, configuration.connectionString);
49-
assertEquals(null, configuration.preview.roleName);
50-
assertEquals(null, configuration.preview.roleInstance);
51-
assertEquals(true, configuration.preview.liveMetrics.enabled);
52-
assertEquals(0, configuration.preview.jmxMetrics.size());
53-
assertEquals(0, configuration.preview.instrumentation.size());
52+
InstrumentationSettings instrumentationSettings = configuration.instrumentationSettings;
53+
PreviewConfiguration preview = instrumentationSettings.preview;
54+
55+
assertEquals(null, instrumentationSettings.connectionString);
56+
assertEquals(null, preview.roleName);
57+
assertEquals(null, preview.roleInstance);
58+
assertEquals(true, preview.liveMetrics.enabled);
59+
assertEquals(0, preview.jmxMetrics.size());
60+
assertEquals(0, preview.instrumentation.size());
5461
}
5562
}

0 commit comments

Comments
 (0)