Skip to content

Commit

Permalink
Merge pull request #4 from getAlby/feat/sentry
Browse files Browse the repository at this point in the history
Feat: add sentry
  • Loading branch information
rolznz authored Dec 16, 2024
2 parents ab8c1ee + bf42dba commit 6b55bc7
Show file tree
Hide file tree
Showing 10 changed files with 91 additions and 0 deletions.
13 changes: 13 additions & 0 deletions java/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -34,6 +35,18 @@ sourceSets {
}
}

if(System.getenv("SENTRY_AUTH_TOKEN") != null) {
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'

Expand Down
2 changes: 2 additions & 0 deletions java/app/src/main/java/org/vss/KVStore.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@ public interface KVStore {
DeleteObjectResponse delete(String userToken, DeleteObjectRequest request);

ListKeyVersionsResponse listKeyVersions(String userToken, ListKeyVersionsRequest request);

void checkHealth();
}
2 changes: 2 additions & 0 deletions java/app/src/main/java/org/vss/api/DeleteObjectApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}
}
Expand Down
2 changes: 2 additions & 0 deletions java/app/src/main/java/org/vss/api/GetObjectApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}
}
Expand Down
47 changes: 47 additions & 0 deletions java/app/src/main/java/org/vss/api/HealthCheckApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.vss.api;

import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.HttpHeaders;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import lombok.extern.slf4j.Slf4j;
import org.vss.GetObjectRequest;
import org.vss.GetObjectResponse;
import org.vss.KVStore;
import org.vss.auth.AuthResponse;
import org.vss.auth.Authorizer;
import io.sentry.Sentry;

@Path(VssApiEndpoint.HEALTHCHECK)
@Slf4j
public class HealthCheckApi {
KVStore kvStore;

@Inject
public HealthCheckApi(KVStore kvstore) {
this.kvStore = kvstore;
}

@GET
public Response execute(@Context HttpHeaders headers) {
try {
log.info("Healthcheck requested");
kvStore.checkHealth();
log.info("Healthcheck passed");

return Response
.status(Response.Status.OK)
.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();
}
}
}
2 changes: 2 additions & 0 deletions java/app/src/main/java/org/vss/api/ListKeyVersionsApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}
}
Expand Down
2 changes: 2 additions & 0 deletions java/app/src/main/java/org/vss/api/PutObjectsApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}
}
Expand Down
1 change: 1 addition & 0 deletions java/app/src/main/java/org/vss/api/VssApiEndpoint.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.vss.api;

public class VssApiEndpoint {
public static final String HEALTHCHECK = "/health";
public static final String GET_OBJECT = "/getObject";
public static final String PUT_OBJECTS = "/putObjects";
public static final String DELETE_OBJECT = "/deleteObject";
Expand Down
6 changes: 6 additions & 0 deletions java/app/src/main/java/org/vss/guice/BaseModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,20 @@ public PostgresBackendImpl(DSLContext context) {
this.context = context;
}

@Override
public void checkHealth() {
OffsetDateTime yesterday = OffsetDateTime.now().minusDays(1);

VssDbRecord vssDbRecord = context.selectFrom(VSS_DB)
.where(VSS_DB.LAST_UPDATED_AT.gt(yesterday))
.limit(1)
.fetchOne();

if (vssDbRecord == null) {
throw new IllegalStateException("No recent records found");
}
}

@Override
public GetObjectResponse get(String userToken, GetObjectRequest request) {

Expand Down

0 comments on commit 6b55bc7

Please sign in to comment.