diff --git a/pom.xml b/pom.xml index f130cfda..cf4c1f10 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ quarkus-bom io.quarkus.platform - 3.5.3 + 3.8.2 3.3.1 3.4.0 3.11.0 @@ -49,7 +49,7 @@ 1.0.5 - 1.7.27 + 7.6.0 8.0.3 1.1.7 2.70.0 @@ -210,7 +210,7 @@ org.wiremock - wiremock + wiremock-standalone ${wiremock.version} test diff --git a/src/main/java/com/redhat/exhort/integration/backend/ExhortIntegration.java b/src/main/java/com/redhat/exhort/integration/backend/ExhortIntegration.java index e4b1ebe8..12976ad3 100644 --- a/src/main/java/com/redhat/exhort/integration/backend/ExhortIntegration.java +++ b/src/main/java/com/redhat/exhort/integration/backend/ExhortIntegration.java @@ -197,7 +197,7 @@ public void configure() { .when(header(Exchange.CONTENT_ENCODING).isEqualToIgnoreCase(GZIP_ENCODING)).unmarshal().gzipDeflater() .setProperty(Constants.GZIP_RESPONSE_PROPERTY, constant(Boolean.TRUE)) .end() - .to(seda("analyticsIdentify")) + .to(direct("analyticsIdentify")) .setProperty(PROVIDERS_PARAM, method(vulnerabilityProvider, "getProvidersFromQueryParam")) .setProperty(REQUEST_CONTENT_PROPERTY, method(BackendUtils.class, "getResponseMediaType")) .setProperty(VERBOSE_MODE_HEADER, header(VERBOSE_MODE_HEADER)); @@ -221,7 +221,7 @@ public void configure() { from(direct("validateToken")) .routeId("validateToken") .setProperty(Constants.EXHORT_REQUEST_ID_HEADER, method(BackendUtils.class,"generateRequestId")) - .to(seda("analyticsIdentify")) + .to(direct("analyticsIdentify")) .choice() .when(header(Constants.SNYK_TOKEN_HEADER).isNotNull()) .setProperty(PROVIDERS_PARAM, constant(Arrays.asList(Constants.SNYK_PROVIDER))) @@ -239,7 +239,7 @@ public void configure() { .setHeader(Constants.EXHORT_REQUEST_ID_HEADER, exchangeProperty(Constants.EXHORT_REQUEST_ID_HEADER)) .process(this::cleanUpHeaders); - from(seda("analyticsIdentify")) + from(direct("analyticsIdentify")) .routeId("analyticsIdentify") .process(monitoringProcessor::processOriginalRequest) .to(seda("analyticsAsyncIdentify").waitForTaskToComplete(WaitForTaskToComplete.Never)); diff --git a/src/main/java/com/redhat/exhort/monitoring/SentryMonitoringClientFactory.java b/src/main/java/com/redhat/exhort/monitoring/SentryMonitoringClientFactory.java index bf877e11..4c9caff8 100644 --- a/src/main/java/com/redhat/exhort/monitoring/SentryMonitoringClientFactory.java +++ b/src/main/java/com/redhat/exhort/monitoring/SentryMonitoringClientFactory.java @@ -25,7 +25,7 @@ import com.redhat.exhort.monitoring.impl.SentryMonitoringClient; import io.quarkus.runtime.annotations.RegisterForReflection; -import io.sentry.SentryClientFactory; +import io.sentry.SentryOptions; import jakarta.enterprise.context.ApplicationScoped; @@ -43,9 +43,10 @@ public class SentryMonitoringClientFactory { String environment; public MonitoringClient newInstance() { - var client = SentryClientFactory.sentryClient(dsn.get()); - client.addTag("server_name", serverName.get()); - client.addTag("environment", environment); - return new SentryMonitoringClient(client); + SentryOptions opt = new SentryOptions(); + opt.setDsn(dsn.get()); + opt.setEnvironment(environment); + opt.setTag("server_name", serverName.get()); + return new SentryMonitoringClient(opt); } } diff --git a/src/main/java/com/redhat/exhort/monitoring/impl/SentryMonitoringClient.java b/src/main/java/com/redhat/exhort/monitoring/impl/SentryMonitoringClient.java index fb3e10fb..164996f6 100644 --- a/src/main/java/com/redhat/exhort/monitoring/impl/SentryMonitoringClient.java +++ b/src/main/java/com/redhat/exhort/monitoring/impl/SentryMonitoringClient.java @@ -18,58 +18,50 @@ package com.redhat.exhort.monitoring.impl; -import java.util.Base64; import java.util.Map; import com.redhat.exhort.monitoring.MonitoringClient; import com.redhat.exhort.monitoring.MonitoringContext; import io.quarkus.runtime.annotations.RegisterForReflection; -import io.sentry.SentryClient; -import io.sentry.event.BreadcrumbBuilder; -import io.sentry.event.UserBuilder; +import io.sentry.Hub; +import io.sentry.SentryOptions; +import io.sentry.protocol.User; @RegisterForReflection public class SentryMonitoringClient implements MonitoringClient { - private final SentryClient client; + private final SentryOptions options; - public SentryMonitoringClient(SentryClient client) { - this.client = client; + public SentryMonitoringClient(SentryOptions options) { + this.options = options; } @Override public void reportException(Throwable exception, MonitoringContext context) { + var hub = new Hub(options); if (!context.breadcrumbs().isEmpty()) { - context - .breadcrumbs() - .forEach( - b -> - this.client - .getContext() - .recordBreadcrumb( - new BreadcrumbBuilder() - .setMessage(new String(Base64.getEncoder().encode(b.getBytes()))) - .setType(null) - .build())); + context.breadcrumbs().forEach(b -> hub.addBreadcrumb(b)); } if (context.userId() != null) { - this.client.getContext().setUser(new UserBuilder().setId(context.userId()).build()); + var user = new User(); + user.setId(context.userId()); + hub.setUser(user); } - addAdditionalData(context.metadata(), context.tags()); - this.client.sendException(exception); + addAdditionalData(hub, context.metadata(), context.tags()); + hub.captureException(exception); } - private void addAdditionalData(Map metadata, Map tags) { + private void addAdditionalData(Hub hub, Map metadata, Map tags) { if (metadata != null) { metadata.entrySet().stream() .filter(e -> e.getValue() != null) - .forEach(e -> this.client.getContext().addExtra(e.getKey(), e.getValue())); + .forEach(e -> hub.setExtra(e.getKey(), e.getValue())); } if (tags != null) { tags.entrySet().stream() .filter(e -> e.getValue() != null) - .forEach(t -> this.client.getContext().addTag(t.getKey(), t.getValue())); + .forEach(t -> hub.setTag(t.getKey(), t.getValue())); } } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 58f88cb6..1cd67c54 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -31,6 +31,7 @@ quarkus.rest-client.segment-api.url=https://api.segment.io/ # monitoring.sentry.dsn=https://@app.glitchtip.com/ # monitoring.sentry.servername=local # monitoring.sentry.environment=development +sentry.stacktrace.app.packages= quarkus.management.enabled=true quarkus.http.limits.max-body-size=4G diff --git a/src/test/java/com/redhat/exhort/extensions/InjectWireMock.java b/src/test/java/com/redhat/exhort/extensions/InjectWireMock.java index 7bf832a7..72eee7d7 100644 --- a/src/test/java/com/redhat/exhort/extensions/InjectWireMock.java +++ b/src/test/java/com/redhat/exhort/extensions/InjectWireMock.java @@ -23,6 +23,6 @@ import io.quarkus.test.common.QuarkusTestResource; -@QuarkusTestResource(WiremockV3Extension.class) +@QuarkusTestResource(WiremockExtension.class) @Retention(RetentionPolicy.RUNTIME) public @interface InjectWireMock {} diff --git a/src/test/java/com/redhat/exhort/extensions/WiremockV3Extension.java b/src/test/java/com/redhat/exhort/extensions/WiremockExtension.java similarity index 95% rename from src/test/java/com/redhat/exhort/extensions/WiremockV3Extension.java rename to src/test/java/com/redhat/exhort/extensions/WiremockExtension.java index aebafdaa..043c5225 100644 --- a/src/test/java/com/redhat/exhort/extensions/WiremockV3Extension.java +++ b/src/test/java/com/redhat/exhort/extensions/WiremockExtension.java @@ -26,7 +26,7 @@ import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; -public class WiremockV3Extension implements QuarkusTestResourceLifecycleManager { +public class WiremockExtension implements QuarkusTestResourceLifecycleManager { public static final String SNYK_TOKEN = "snyk-token-xyz"; diff --git a/src/test/java/com/redhat/exhort/integration/AbstractAnalysisTest.java b/src/test/java/com/redhat/exhort/integration/AbstractAnalysisTest.java index c30b2d88..88d56627 100644 --- a/src/test/java/com/redhat/exhort/integration/AbstractAnalysisTest.java +++ b/src/test/java/com/redhat/exhort/integration/AbstractAnalysisTest.java @@ -28,7 +28,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; -import static com.redhat.exhort.extensions.WiremockV3Extension.SNYK_TOKEN; +import static com.redhat.exhort.extensions.WiremockExtension.SNYK_TOKEN; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -51,7 +51,7 @@ import com.github.tomakehurst.wiremock.client.BasicCredentials; import com.google.common.base.Charsets; import com.redhat.exhort.extensions.InjectWireMock; -import com.redhat.exhort.extensions.WiremockV3Extension; +import com.redhat.exhort.extensions.WiremockExtension; import com.redhat.exhort.integration.providers.snyk.SnykRequestBuilder; import io.quarkus.test.common.QuarkusTestResource; @@ -63,7 +63,7 @@ import jakarta.ws.rs.core.MediaType; @QuarkusTest -@QuarkusTestResource(WiremockV3Extension.class) +@QuarkusTestResource(WiremockExtension.class) public abstract class AbstractAnalysisTest { private static final String SNYK_UA_PATTERN = "redhat-snyk-exhort-.*";