Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
package io.quarkus.logging.sentry.deployment;

import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationTransformation;
import org.jboss.jandex.DotName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.arc.deployment.AnnotationsTransformerBuildItem;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.ExecutionTime;
import io.quarkus.deployment.annotations.Record;
Expand All @@ -8,6 +16,8 @@
import io.quarkus.deployment.builditem.LogHandlerBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import io.quarkus.logging.sentry.SentryHandlerValueFactory;
import io.quarkus.logging.sentry.SentryInterceptor;
import io.quarkus.logging.sentry.SentryHttp;
import io.sentry.Breadcrumb;
import io.sentry.SentryBaseEvent;
import io.sentry.SentryEvent;
Expand All @@ -20,6 +30,7 @@
class SentryProcessor {

private static final String FEATURE = "logging-sentry";
private static final Logger log = LoggerFactory.getLogger(SentryProcessor.class);

@BuildStep
FeatureBuildItem feature() {
Expand All @@ -37,6 +48,28 @@ ExtensionSslNativeSupportBuildItem activateSslNativeSupport() {
return new ExtensionSslNativeSupportBuildItem(FEATURE);
}

@BuildStep
AnnotationsTransformerBuildItem registerInterceptors() {
DotName path = DotName.createSimple("jakarta.ws.rs.Path");

return new AnnotationsTransformerBuildItem(AnnotationTransformation.forClasses()
.when(transformationContext -> transformationContext
.hasAnnotation(DotName.createSimple("jakarta.ws.rs.Path")))
.transform(
transformationContext -> {
String string = transformationContext.declaration().asClass().annotation(path).value()
.asString();
transformationContext.add(
AnnotationInstance.builder(SentryHttp.class)
.value(string).build());
}));
}

@BuildStep
AdditionalBeanBuildItem loggingInterceptor() {
return AdditionalBeanBuildItem.unremovableOf(SentryInterceptor.class);
}

@BuildStep
ReflectiveClassBuildItem addReflection() {
return ReflectiveClassBuildItem.builder(
Expand Down
128 changes: 66 additions & 62 deletions runtime/pom.xml
Original file line number Diff line number Diff line change
@@ -1,62 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.quarkiverse.loggingsentry</groupId>
<artifactId>quarkus-logging-sentry-parent</artifactId>
<version>999-SNAPSHOT</version>
</parent>
<artifactId>quarkus-logging-sentry</artifactId>
<name>Quarkus Logging Sentry - Runtime</name>
<description>Use Sentry, a self-hosted or cloud-based error monitoring solution</description>

<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-jul</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-extension-maven-plugin</artifactId>
<version>${quarkus.version}</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>extension-descriptor</goal>
</goals>
<configuration>
<deployment>${project.groupId}:${project.artifactId}-deployment:${project.version}</deployment>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-extension-processor</artifactId>
<version>${quarkus.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.quarkiverse.loggingsentry</groupId>
<artifactId>quarkus-logging-sentry-parent</artifactId>
<version>999-SNAPSHOT</version>
</parent>
<artifactId>quarkus-logging-sentry</artifactId>
<name>Quarkus Logging Sentry - Runtime</name>
<description>Use Sentry, a self-hosted or cloud-based error monitoring solution</description>

<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-jul</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-extension-maven-plugin</artifactId>
<version>${quarkus.version}</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>extension-descriptor</goal>
</goals>
<configuration>
<deployment>${project.groupId}:${project.artifactId}-deployment:${project.version}</deployment>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-extension-processor</artifactId>
<version>${quarkus.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
15 changes: 15 additions & 0 deletions runtime/src/main/java/io/quarkus/logging/sentry/SentryHttp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.quarkus.logging.sentry;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import jakarta.interceptor.InterceptorBinding;

@InterceptorBinding
@Retention(RUNTIME)
@Target({ ElementType.TYPE })
public @interface SentryHttp {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package io.quarkus.logging.sentry;

import io.quarkus.logging.Log;
import jakarta.annotation.Priority;
import jakarta.inject.Inject;
import jakarta.interceptor.AroundInvoke;
import jakarta.interceptor.Interceptor;
import jakarta.interceptor.InvocationContext;

import io.sentry.ITransaction;
import io.sentry.Sentry;
import io.vertx.core.http.HttpServerRequest;

@SentryHttp()
@Interceptor
@Priority(Interceptor.Priority.APPLICATION)
public class SentryInterceptor {

@Inject
HttpServerRequest request;

@AroundInvoke
Object intercept(InvocationContext ctx) throws Exception {
ITransaction iTransaction = Sentry.startTransaction(request.path(), request.path());
Object proceed = ctx.proceed();
Log.debug("Intercepted "+request.path()+" "+request.path());
iTransaction.finish();
return proceed;
}
}
Loading