Skip to content

Commit b890a57

Browse files
authored
Improve startup time (#1667)
1 parent 54992a5 commit b890a57

File tree

25 files changed

+453
-271
lines changed

25 files changed

+453
-271
lines changed

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

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,7 @@
2929
import io.opentelemetry.instrumentation.api.aisdk.MicrometerUtil;
3030
import io.opentelemetry.instrumentation.api.aisdk.MicrometerUtil.MicrometerUtilDelegate;
3131

32-
import static java.util.concurrent.TimeUnit.DAYS;
33-
import static java.util.concurrent.TimeUnit.HOURS;
34-
import static java.util.concurrent.TimeUnit.MINUTES;
35-
import static java.util.concurrent.TimeUnit.SECONDS;
32+
import static java.util.concurrent.TimeUnit.*;
3633

3734
// supporting all properties of event, metric, remote dependency and page view telemetry
3835
public class BytecodeUtil {
@@ -146,6 +143,28 @@ public static void copy(Map<String, String> source, Map<String, String> target,
146143
}
147144
}
148145

146+
// this exists only to support -Dapplicationinsights.debug.signedJarAccess=true
147+
private static final ThreadLocal<Long> startNanosHolder = new ThreadLocal<>();
148+
149+
public static void onEnter() {
150+
startNanosHolder.set(System.nanoTime());
151+
}
152+
153+
public static void onExit() {
154+
Long startNanos = startNanosHolder.get();
155+
if (startNanos == null) {
156+
System.out.println("Signed jar access (no timing available)");
157+
Thread.dumpStack();
158+
} else {
159+
long durationNanos = System.nanoTime() - startNanos;
160+
if (durationNanos > MILLISECONDS.toNanos(1)) {
161+
System.out.println("Signed jar access (" + NANOSECONDS.toMillis(durationNanos) + " milliseconds)");
162+
Thread.dumpStack();
163+
}
164+
}
165+
startNanosHolder.remove();
166+
}
167+
149168
public interface BytecodeUtilDelegate {
150169

151170
void trackEvent(String name, Map<String, String> properties, Map<String, String> tags, Map<String, Double> metrics,

agent/agent-bootstrap/src/main/java/com/microsoft/applicationinsights/agent/bootstrap/diagnostics/SdkVersionFinder.java

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,48 @@
22

33
import java.io.IOException;
44
import java.io.InputStream;
5+
import java.nio.file.Path;
56
import java.util.Properties;
7+
import java.util.jar.JarEntry;
8+
import java.util.jar.JarFile;
69

710
public class SdkVersionFinder extends CachedDiagnosticsValueFinder {
811

12+
private static volatile String value;
13+
914
@Override
1015
public String getName() {
1116
return "sdkVersion";
1217
}
1318

1419
@Override
1520
protected String populateValue() {
16-
return readVersion();
21+
return value;
22+
}
23+
24+
public static String getTheValue() {
25+
return value;
26+
}
27+
28+
public static String initVersion(Path agentPath) {
29+
value = readVersion(agentPath);
30+
return value;
1731
}
1832

19-
public static String readVersion() {
20-
Properties props = new Properties();
21-
InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream("ai.sdk-version.properties");
22-
if (in != null) {
23-
try {
24-
props.load(in);
25-
} catch (IOException e) {
26-
e.printStackTrace();
27-
} finally {
28-
try {
29-
in.close();
30-
} catch (IOException e) {
31-
e.printStackTrace();
33+
private static String readVersion(Path agentPath) {
34+
try {
35+
// reading from file instead of from classpath, in order to avoid triggering jar file signature verification
36+
try (JarFile jarFile = new JarFile(agentPath.toFile(), false)) {
37+
JarEntry entry = jarFile.getJarEntry("ai.sdk-version.properties");
38+
try (InputStream in = jarFile.getInputStream(entry)) {
39+
Properties props = new Properties();
40+
props.load(in);
41+
return props.getProperty("version");
3242
}
3343
}
44+
} catch (IOException e) {
45+
e.printStackTrace();
3446
}
35-
return props.getProperty("version");
47+
return "unknown";
3648
}
3749
}

agent/agent-bootstrap/src/main/resources/applicationinsights.appsvc.logback.xml

Lines changed: 0 additions & 30 deletions
This file was deleted.

agent/agent-bootstrap/src/main/resources/applicationinsights.console.logback.xml

Lines changed: 0 additions & 6 deletions
This file was deleted.

agent/agent-bootstrap/src/main/resources/applicationinsights.file-and-console.logback.xml

Lines changed: 0 additions & 7 deletions
This file was deleted.

agent/agent-bootstrap/src/main/resources/applicationinsights.file.logback.xml

Lines changed: 0 additions & 6 deletions
This file was deleted.

agent/agent-bootstrap/src/main/resources/logger-config/common.xml

Lines changed: 0 additions & 13 deletions
This file was deleted.

agent/agent-bootstrap/src/main/resources/logger-config/console.appender.xml

Lines changed: 0 additions & 11 deletions
This file was deleted.

agent/agent-bootstrap/src/main/resources/logger-config/file.appender.xml

Lines changed: 0 additions & 20 deletions
This file was deleted.

agent/agent-bootstrap/src/main/resources/rp-logger-config/diagnostics.appender.xml

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)