Skip to content

Commit 39225ff

Browse files
committed
use InitUtil to initialize profiler and converter
1 parent a4ce01a commit 39225ff

File tree

4 files changed

+89
-91
lines changed

4 files changed

+89
-91
lines changed

sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/SentryProfilerConfiguration.java

Lines changed: 9 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
import io.sentry.NoOpContinuousProfiler;
77
import io.sentry.NoOpProfileConverter;
88
import io.sentry.Sentry;
9-
import io.sentry.SentryLevel;
109
import io.sentry.SentryOptions;
11-
import io.sentry.profiling.ProfilingServiceLoader;
10+
import io.sentry.util.InitUtil;
1211
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
1312
import org.springframework.context.annotation.Bean;
1413
import org.springframework.context.annotation.Configuration;
@@ -29,36 +28,11 @@ public IContinuousProfiler sentryOpenTelemetryProfilerConfiguration() {
2928
SentryOptions options = Sentry.getGlobalScope().getOptions();
3029
IContinuousProfiler profiler = NoOpContinuousProfiler.getInstance();
3130

32-
if (Sentry.isEnabled()
33-
&& options.isContinuousProfilingEnabled()
34-
&& options.getContinuousProfiler() instanceof NoOpContinuousProfiler) {
35-
36-
options
37-
.getLogger()
38-
.log(
39-
SentryLevel.DEBUG,
40-
"Continuous profiler is NoOp, attempting to reload with Spring Boot classloader");
41-
42-
String path = options.getProfilingTracesDirPath();
43-
44-
profiler =
45-
ProfilingServiceLoader.loadContinuousProfiler(
46-
options.getLogger(),
47-
path != null ? path : "",
48-
options.getProfilingTracesHz(),
49-
options.getExecutorService());
50-
51-
options.setContinuousProfiler(profiler);
52-
53-
if (!(profiler instanceof NoOpContinuousProfiler)) {
54-
options
55-
.getLogger()
56-
.log(
57-
SentryLevel.INFO,
58-
"Successfully loaded continuous profiler via Spring Boot classloader");
59-
}
31+
if (Sentry.isEnabled()) {
32+
return InitUtil.initializeProfiler(options);
33+
} else {
34+
return profiler;
6035
}
61-
return profiler;
6236
}
6337

6438
@Bean
@@ -67,28 +41,10 @@ public IProfileConverter sentryOpenTelemetryProfilerConverterConfiguration() {
6741
SentryOptions options = Sentry.getGlobalScope().getOptions();
6842
IProfileConverter converter = NoOpProfileConverter.getInstance();
6943

70-
if (Sentry.isEnabled()
71-
&& options.isContinuousProfilingEnabled()
72-
&& options.getProfilerConverter() instanceof NoOpProfileConverter) {
73-
74-
options
75-
.getLogger()
76-
.log(
77-
SentryLevel.DEBUG,
78-
"Profile converter is NoOp, attempting to reload with Spring Boot classloader");
79-
80-
converter = ProfilingServiceLoader.loadProfileConverter();
81-
82-
options.setProfilerConverter(converter);
83-
84-
if (!(converter instanceof NoOpProfileConverter)) {
85-
options
86-
.getLogger()
87-
.log(
88-
SentryLevel.INFO,
89-
"Successfully loaded profile converter via Spring Boot classloader");
90-
}
44+
if (Sentry.isEnabled()) {
45+
return InitUtil.initializeProfileConverter(options);
46+
} else {
47+
return converter;
9148
}
92-
return converter;
9349
}
9450
}

sentry/api/sentry.api

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7052,6 +7052,8 @@ public final class io/sentry/util/HttpUtils {
70527052

70537053
public final class io/sentry/util/InitUtil {
70547054
public fun <init> ()V
7055+
public static fun initializeProfileConverter (Lio/sentry/SentryOptions;)Lio/sentry/IProfileConverter;
7056+
public static fun initializeProfiler (Lio/sentry/SentryOptions;)Lio/sentry/IContinuousProfiler;
70557057
public static fun shouldInit (Lio/sentry/SentryOptions;Lio/sentry/SentryOptions;Z)Z
70567058
}
70577059

sentry/src/main/java/io/sentry/Sentry.java

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import io.sentry.internal.modules.ResourcesModulesLoader;
1616
import io.sentry.logger.ILoggerApi;
1717
import io.sentry.opentelemetry.OpenTelemetryUtil;
18-
import io.sentry.profiling.ProfilingServiceLoader;
1918
import io.sentry.protocol.Feedback;
2019
import io.sentry.protocol.SentryId;
2120
import io.sentry.protocol.User;
@@ -691,43 +690,8 @@ private static void initConfigurations(final @NotNull SentryOptions options) {
691690
}
692691

693692
private static void initJvmContinuousProfiling(@NotNull SentryOptions options) {
694-
695-
if (options.isContinuousProfilingEnabled()
696-
&& options.getContinuousProfiler() == NoOpContinuousProfiler.getInstance()) {
697-
try {
698-
String profilingTracesDirPath = options.getProfilingTracesDirPath();
699-
if (profilingTracesDirPath == null) {
700-
File tempDir = new File(System.getProperty("java.io.tmpdir"), "sentry_profiling_traces");
701-
boolean createDirectorySuccess = tempDir.mkdirs() || tempDir.exists();
702-
703-
if (!createDirectorySuccess) {
704-
throw new IllegalArgumentException(
705-
"Creating a fallback directory for profiling failed in "
706-
+ tempDir.getAbsolutePath());
707-
}
708-
profilingTracesDirPath = tempDir.getAbsolutePath();
709-
options.setProfilingTracesDirPath(profilingTracesDirPath);
710-
}
711-
712-
final IContinuousProfiler continuousProfiler =
713-
ProfilingServiceLoader.loadContinuousProfiler(
714-
options.getLogger(),
715-
profilingTracesDirPath,
716-
options.getProfilingTracesHz(),
717-
options.getExecutorService());
718-
719-
options.setContinuousProfiler(continuousProfiler);
720-
721-
final IProfileConverter profileConverter = ProfilingServiceLoader.loadProfileConverter();
722-
if (profileConverter != null) {
723-
options.setProfilerConverter(profileConverter);
724-
}
725-
} catch (Exception e) {
726-
options
727-
.getLogger()
728-
.log(SentryLevel.ERROR, "Failed to create default profiling traces directory", e);
729-
}
730-
}
693+
InitUtil.initializeProfiler(options);
694+
InitUtil.initializeProfileConverter(options);
731695
}
732696

733697
/** Close the SDK */

sentry/src/main/java/io/sentry/util/InitUtil.java

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
package io.sentry.util;
22

3+
import io.sentry.IContinuousProfiler;
4+
import io.sentry.IProfileConverter;
35
import io.sentry.ManifestVersionDetector;
6+
import io.sentry.NoOpContinuousProfiler;
7+
import io.sentry.NoOpProfileConverter;
48
import io.sentry.NoopVersionDetector;
59
import io.sentry.SentryLevel;
610
import io.sentry.SentryOptions;
11+
import io.sentry.profiling.ProfilingServiceLoader;
12+
import java.io.File;
713
import org.jetbrains.annotations.ApiStatus;
814
import org.jetbrains.annotations.NotNull;
915
import org.jetbrains.annotations.Nullable;
@@ -46,4 +52,74 @@ public static boolean shouldInit(
4652

4753
return previousOptions.getInitPriority().ordinal() <= newOptions.getInitPriority().ordinal();
4854
}
55+
56+
public static IContinuousProfiler initializeProfiler(@NotNull SentryOptions options) {
57+
IContinuousProfiler continuousProfiler = NoOpContinuousProfiler.getInstance();
58+
59+
if (options.isContinuousProfilingEnabled()
60+
&& options.getContinuousProfiler() == NoOpContinuousProfiler.getInstance()) {
61+
try {
62+
String profilingTracesDirPath = options.getProfilingTracesDirPath();
63+
if (profilingTracesDirPath == null) {
64+
File tempDir = new File(System.getProperty("java.io.tmpdir"), "sentry_profiling_traces");
65+
boolean createDirectorySuccess = tempDir.mkdirs() || tempDir.exists();
66+
67+
if (!createDirectorySuccess) {
68+
throw new IllegalArgumentException(
69+
"Creating a fallback directory for profiling failed in "
70+
+ tempDir.getAbsolutePath());
71+
}
72+
profilingTracesDirPath = tempDir.getAbsolutePath();
73+
options.setProfilingTracesDirPath(profilingTracesDirPath);
74+
}
75+
76+
continuousProfiler =
77+
ProfilingServiceLoader.loadContinuousProfiler(
78+
options.getLogger(),
79+
profilingTracesDirPath,
80+
options.getProfilingTracesHz(),
81+
options.getExecutorService());
82+
83+
if (!(continuousProfiler instanceof NoOpContinuousProfiler)) {
84+
options.setContinuousProfiler(continuousProfiler);
85+
}
86+
87+
return continuousProfiler;
88+
89+
} catch (Exception e) {
90+
options
91+
.getLogger()
92+
.log(SentryLevel.ERROR, "Failed to create default profiling traces directory", e);
93+
}
94+
}
95+
return continuousProfiler;
96+
}
97+
98+
public static IProfileConverter initializeProfileConverter(@NotNull SentryOptions options) {
99+
IProfileConverter converter = NoOpProfileConverter.getInstance();
100+
101+
if (options.isContinuousProfilingEnabled()
102+
&& options.getProfilerConverter() instanceof NoOpProfileConverter) {
103+
104+
options
105+
.getLogger()
106+
.log(
107+
SentryLevel.DEBUG,
108+
"Profile converter is NoOp, attempting to reload with Spring Boot classloader");
109+
110+
converter = ProfilingServiceLoader.loadProfileConverter();
111+
112+
options.setProfilerConverter(converter);
113+
114+
if (!(converter instanceof NoOpProfileConverter)) {
115+
options
116+
.getLogger()
117+
.log(
118+
SentryLevel.INFO,
119+
"Successfully loaded profile converter via Spring Boot classloader");
120+
}
121+
}
122+
return converter;
123+
}
124+
// TODO: Add initialization of profiler here
49125
}

0 commit comments

Comments
 (0)