-
-
Notifications
You must be signed in to change notification settings - Fork 468
Expand file tree
/
Copy pathSentryHubRegistrar.java
More file actions
105 lines (90 loc) · 4.49 KB
/
SentryHubRegistrar.java
File metadata and controls
105 lines (90 loc) · 4.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package io.sentry.spring;
import com.jakewharton.nopen.annotation.Open;
import io.sentry.InitPriority;
import io.sentry.ScopesAdapter;
import io.sentry.SentryIntegrationPackageStorage;
import io.sentry.SentryOptions;
import io.sentry.protocol.SdkVersion;
import io.sentry.spring.tracing.SpringMvcTransactionNameProvider;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.type.AnnotationMetadata;
/** Registers beans required to use Sentry core features. */
@Configuration
@Open
public class SentryHubRegistrar implements ImportBeanDefinitionRegistrar {
static {
SentryIntegrationPackageStorage.getInstance()
.addPackage("maven:io.sentry:sentry-spring", BuildConfig.VERSION_NAME);
}
@Override
public void registerBeanDefinitions(
final @NotNull AnnotationMetadata importingClassMetadata,
final @NotNull BeanDefinitionRegistry registry) {
final AnnotationAttributes annotationAttributes =
AnnotationAttributes.fromMap(
importingClassMetadata.getAnnotationAttributes(EnableSentry.class.getName()));
if (annotationAttributes != null && annotationAttributes.containsKey("dsn")) {
registerSentryOptions(registry, annotationAttributes);
registerSentryHubBean(registry);
registerSentryExceptionResolver(registry, annotationAttributes);
}
}
private void registerSentryOptions(
final @NotNull BeanDefinitionRegistry registry,
final @NotNull AnnotationAttributes annotationAttributes) {
final BeanDefinitionBuilder builder =
BeanDefinitionBuilder.genericBeanDefinition(SentryOptions.class);
if (registry.containsBeanDefinition("mockTransportFactory")) {
builder.addPropertyReference("transportFactory", "mockTransportFactory");
}
builder.addPropertyValue("dsn", annotationAttributes.getString("dsn"));
builder.addPropertyValue("enableExternalConfiguration", true);
builder.addPropertyValue("sentryClientName", BuildConfig.SENTRY_SPRING_SDK_NAME);
builder.addPropertyValue("sdkVersion", createSdkVersion());
builder.addPropertyValue("initPriority", InitPriority.LOW);
addPackageAndIntegrationInfo();
if (annotationAttributes.containsKey("sendDefaultPii")) {
builder.addPropertyValue("sendDefaultPii", annotationAttributes.getBoolean("sendDefaultPii"));
}
if (annotationAttributes.containsKey("maxRequestBodySize")) {
builder.addPropertyValue(
"maxRequestBodySize", annotationAttributes.get("maxRequestBodySize"));
}
registry.registerBeanDefinition("sentryOptions", builder.getBeanDefinition());
}
private void registerSentryHubBean(final @NotNull BeanDefinitionRegistry registry) {
final BeanDefinitionBuilder builder =
BeanDefinitionBuilder.genericBeanDefinition(ScopesAdapter.class);
builder.setInitMethodName("getInstance");
registry.registerBeanDefinition("sentryHub", builder.getBeanDefinition());
}
private void registerSentryExceptionResolver(
final @NotNull BeanDefinitionRegistry registry,
final @NotNull AnnotationAttributes annotationAttributes) {
final BeanDefinitionBuilder builder =
BeanDefinitionBuilder.genericBeanDefinition(SentryExceptionResolver.class);
builder.addConstructorArgReference("sentryHub");
builder.addConstructorArgValue(new SpringMvcTransactionNameProvider());
int order = annotationAttributes.getNumber("exceptionResolverOrder");
builder.addConstructorArgValue(order);
registry.registerBeanDefinition("sentryExceptionResolver", builder.getBeanDefinition());
}
private static @NotNull SdkVersion createSdkVersion() {
final SentryOptions defaultOptions = new SentryOptions();
SdkVersion sdkVersion = defaultOptions.getSdkVersion();
final String name = BuildConfig.SENTRY_SPRING_SDK_NAME;
final String version = BuildConfig.VERSION_NAME;
sdkVersion = SdkVersion.updateSdkVersion(sdkVersion, name, version);
return sdkVersion;
}
private static void addPackageAndIntegrationInfo() {
SentryIntegrationPackageStorage.getInstance()
.addPackage("maven:io.sentry:sentry-spring", BuildConfig.VERSION_NAME);
SentryIntegrationPackageStorage.getInstance().addIntegration("Spring");
}
}