From 7e1dd17331f5fdf42ea118ca6ad6796877aa1721 Mon Sep 17 00:00:00 2001 From: Roland Bewick Date: Wed, 11 Dec 2024 17:18:31 +0700 Subject: [PATCH] feat: add sentry --- java/app/build.gradle | 12 ++++++++++++ .../src/main/java/org/vss/api/DeleteObjectApi.java | 2 ++ java/app/src/main/java/org/vss/api/GetObjectApi.java | 2 ++ .../src/main/java/org/vss/api/HealthCheckApi.java | 2 ++ .../main/java/org/vss/api/ListKeyVersionsApi.java | 2 ++ .../app/src/main/java/org/vss/api/PutObjectsApi.java | 2 ++ java/app/src/main/java/org/vss/guice/BaseModule.java | 6 ++++++ 7 files changed, 28 insertions(+) diff --git a/java/app/build.gradle b/java/app/build.gradle index e55f506..98f3a74 100644 --- a/java/app/build.gradle +++ b/java/app/build.gradle @@ -15,6 +15,7 @@ plugins { id 'war' id 'idea' id 'nu.studer.jooq' version '8.0' + id "io.sentry.jvm.gradle" version "4.14.1" } repositories { @@ -34,6 +35,17 @@ sourceSets { } } +sentry { + // Generates a JVM (Java, Kotlin, etc.) source bundle and uploads your source code to Sentry. + // This enables source context, allowing you to see your source + // code as part of your stack traces in Sentry. + includeSourceContext = true + + org = "getalby" + projectName = "albyhub-vss" + authToken = System.getenv("SENTRY_AUTH_TOKEN") +} + group 'org.vss' version '1.0' diff --git a/java/app/src/main/java/org/vss/api/DeleteObjectApi.java b/java/app/src/main/java/org/vss/api/DeleteObjectApi.java index c803a90..eb56b9e 100644 --- a/java/app/src/main/java/org/vss/api/DeleteObjectApi.java +++ b/java/app/src/main/java/org/vss/api/DeleteObjectApi.java @@ -14,6 +14,7 @@ import org.vss.KVStore; import org.vss.auth.AuthResponse; import org.vss.auth.Authorizer; +import io.sentry.Sentry; @Path(VssApiEndpoint.DELETE_OBJECT) @Slf4j @@ -33,6 +34,7 @@ public Response execute(byte[] payload, @Context HttpHeaders headers) { return toResponse(response); } catch (Exception e) { log.error("Exception in DeleteObjectApi: ", e); + Sentry.captureException(e); return toErrorResponse(e); } } diff --git a/java/app/src/main/java/org/vss/api/GetObjectApi.java b/java/app/src/main/java/org/vss/api/GetObjectApi.java index cdc5bdd..626869b 100644 --- a/java/app/src/main/java/org/vss/api/GetObjectApi.java +++ b/java/app/src/main/java/org/vss/api/GetObjectApi.java @@ -14,6 +14,7 @@ import org.vss.KVStore; import org.vss.auth.AuthResponse; import org.vss.auth.Authorizer; +import io.sentry.Sentry; @Path(VssApiEndpoint.GET_OBJECT) @Slf4j @@ -34,6 +35,7 @@ public Response execute(byte[] payload, @Context HttpHeaders headers) { return toResponse(response); } catch (Exception e) { log.error("Exception in GetObjectApi: ", e); + Sentry.captureException(e); return toErrorResponse(e); } } diff --git a/java/app/src/main/java/org/vss/api/HealthCheckApi.java b/java/app/src/main/java/org/vss/api/HealthCheckApi.java index 6b29116..3a3194a 100644 --- a/java/app/src/main/java/org/vss/api/HealthCheckApi.java +++ b/java/app/src/main/java/org/vss/api/HealthCheckApi.java @@ -14,6 +14,7 @@ import org.vss.KVStore; import org.vss.auth.AuthResponse; import org.vss.auth.Authorizer; +import io.sentry.Sentry; @Path(VssApiEndpoint.HEALTHCHECK) @Slf4j @@ -37,6 +38,7 @@ public Response execute(@Context HttpHeaders headers) { .build(); } catch (Exception e) { log.error("Exception in HealthCheckApi: ", e); + Sentry.captureException(e); return Response.status(500) .entity("an unexpected error occurred: " + e.getMessage()) .build(); diff --git a/java/app/src/main/java/org/vss/api/ListKeyVersionsApi.java b/java/app/src/main/java/org/vss/api/ListKeyVersionsApi.java index 3ac8ba7..02dbe6d 100644 --- a/java/app/src/main/java/org/vss/api/ListKeyVersionsApi.java +++ b/java/app/src/main/java/org/vss/api/ListKeyVersionsApi.java @@ -14,6 +14,7 @@ import org.vss.ListKeyVersionsResponse; import org.vss.auth.AuthResponse; import org.vss.auth.Authorizer; +import io.sentry.Sentry; @Path(VssApiEndpoint.LIST_KEY_VERSIONS) @Slf4j @@ -34,6 +35,7 @@ public Response execute(byte[] payload, @Context HttpHeaders headers) { return toResponse(response); } catch (Exception e) { log.error("Exception in ListKeyVersionsApi: ", e); + Sentry.captureException(e); return toErrorResponse(e); } } diff --git a/java/app/src/main/java/org/vss/api/PutObjectsApi.java b/java/app/src/main/java/org/vss/api/PutObjectsApi.java index 8fedc0e..87cc189 100644 --- a/java/app/src/main/java/org/vss/api/PutObjectsApi.java +++ b/java/app/src/main/java/org/vss/api/PutObjectsApi.java @@ -14,6 +14,7 @@ import org.vss.PutObjectResponse; import org.vss.auth.AuthResponse; import org.vss.auth.Authorizer; +import io.sentry.Sentry; @Path(VssApiEndpoint.PUT_OBJECTS) @Slf4j @@ -34,6 +35,7 @@ public Response execute(byte[] payload, @Context HttpHeaders headers) { return toResponse(response); } catch (Exception e) { log.error("Exception in PutObjectsApi: ", e); + Sentry.captureException(e); return toErrorResponse(e); } } diff --git a/java/app/src/main/java/org/vss/guice/BaseModule.java b/java/app/src/main/java/org/vss/guice/BaseModule.java index 0dbc2c3..c8ba5de 100644 --- a/java/app/src/main/java/org/vss/guice/BaseModule.java +++ b/java/app/src/main/java/org/vss/guice/BaseModule.java @@ -17,11 +17,17 @@ import org.vss.auth.NoopAuthorizer; import org.vss.impl.postgres.PostgresBackendImpl; import org.vss.auth.JwtAuthorizer; +import io.sentry.Sentry; public class BaseModule extends AbstractModule { @Override protected void configure() { + Sentry.init(options -> { + options.setDsn(System.getenv("vss.sentry.dsn")); + // options.setDebug(true); + }); + // Provide PostgresBackend as default implementation for KVStore. bind(KVStore.class).to(PostgresBackendImpl.class).in(Singleton.class);