Skip to content

Commit

Permalink
Merge pull request #28 from wri/feat/TM-1526-sentry
Browse files Browse the repository at this point in the history
[TM-1526] Integrate Sentry reporting.
roguenet authored Dec 17, 2024
2 parents a413afb + 0bee62d commit 75566cc
Showing 14 changed files with 927 additions and 37 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -38,6 +38,12 @@ and main branches.
* Set up the new `main.ts` similarly to existing services.
* Make sure swagger docs and the `/health` endpoint are implemented
* Pick a default local port that is unique from other services
* Make sure the top of `main.ts` has these two lines:
```
// eslint-disable-next-line @nx/enforce-module-boundaries
import "../../../instrument-sentry";
```
* Add the `SentryModule` and `SentryGlobalFilter` to your main `app.module.ts`. See an existing service for an example.
* In your `.env` and `.env.local.sample`, add `_PORT` for the new service
* In `api-gateway-stack.ts`, add the new service and namespace to `V3_SERVICES`
* In your local web repo, follow directions in `README.md` for setting up a new service.
12 changes: 10 additions & 2 deletions apps/entity-service/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -4,10 +4,18 @@ import { CommonModule } from "@terramatch-microservices/common";
import { HealthModule } from "./health/health.module";
import { TreesController } from "./trees/trees.controller";
import { TreeService } from "./trees/tree.service";
import { SentryGlobalFilter, SentryModule } from "@sentry/nestjs/setup";
import { APP_FILTER } from "@nestjs/core";

@Module({
imports: [DatabaseModule, CommonModule, HealthModule],
imports: [SentryModule.forRoot(), DatabaseModule, CommonModule, HealthModule],
controllers: [TreesController],
providers: [TreeService]
providers: [
{
provide: APP_FILTER,
useClass: SentryGlobalFilter
},
TreeService
]
})
export class AppModule {}
3 changes: 3 additions & 0 deletions apps/entity-service/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// eslint-disable-next-line @nx/enforce-module-boundaries
import "../../../instrument-sentry";

import { Logger, ValidationPipe } from "@nestjs/common";
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
21 changes: 14 additions & 7 deletions apps/job-service/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
import { Module } from '@nestjs/common';
import { DatabaseModule } from '@terramatch-microservices/database';
import { CommonModule } from '@terramatch-microservices/common';
import { DelayedJobsController } from './jobs/delayed-jobs.controller';
import { HealthModule } from './health/health.module';
import { Module } from "@nestjs/common";
import { DatabaseModule } from "@terramatch-microservices/database";
import { CommonModule } from "@terramatch-microservices/common";
import { DelayedJobsController } from "./jobs/delayed-jobs.controller";
import { HealthModule } from "./health/health.module";
import { SentryGlobalFilter, SentryModule } from "@sentry/nestjs/setup";
import { APP_FILTER } from "@nestjs/core";

@Module({
imports: [DatabaseModule, CommonModule, HealthModule],
imports: [SentryModule.forRoot(), DatabaseModule, CommonModule, HealthModule],
controllers: [DelayedJobsController],
providers: [],
providers: [
{
provide: APP_FILTER,
useClass: SentryGlobalFilter
}
]
})
export class AppModule {}
3 changes: 3 additions & 0 deletions apps/job-service/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// eslint-disable-next-line @nx/enforce-module-boundaries
import "../../../instrument-sentry";

import { Logger, ValidationPipe } from "@nestjs/common";
import { NestFactory } from "@nestjs/core";

24 changes: 16 additions & 8 deletions apps/research-service/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
import { Module } from '@nestjs/common';
import { DatabaseModule } from '@terramatch-microservices/database';
import { CommonModule } from '@terramatch-microservices/common';
import { HealthModule } from './health/health.module';
import { SitePolygonsController } from './site-polygons/site-polygons.controller';
import { SitePolygonsService } from './site-polygons/site-polygons.service';
import { Module } from "@nestjs/common";
import { DatabaseModule } from "@terramatch-microservices/database";
import { CommonModule } from "@terramatch-microservices/common";
import { HealthModule } from "./health/health.module";
import { SitePolygonsController } from "./site-polygons/site-polygons.controller";
import { SitePolygonsService } from "./site-polygons/site-polygons.service";
import { APP_FILTER } from "@nestjs/core";
import { SentryGlobalFilter, SentryModule } from "@sentry/nestjs/setup";

@Module({
imports: [DatabaseModule, CommonModule, HealthModule],
imports: [SentryModule.forRoot(), DatabaseModule, CommonModule, HealthModule],
controllers: [SitePolygonsController],
providers: [SitePolygonsService],
providers: [
{
provide: APP_FILTER,
useClass: SentryGlobalFilter
},
SitePolygonsService
]
})
export class AppModule {}
3 changes: 3 additions & 0 deletions apps/research-service/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// eslint-disable-next-line @nx/enforce-module-boundaries
import "../../../instrument-sentry";

import { Logger, ValidationPipe } from "@nestjs/common";
import { NestFactory } from "@nestjs/core";

13 changes: 11 additions & 2 deletions apps/unified-database-service/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -2,9 +2,18 @@ import { Module } from "@nestjs/common";
import { HealthModule } from "./health/health.module";
import { WebhookController } from "./webhook/webhook.controller";
import { AirtableModule } from "./airtable/airtable.module";
import { SentryGlobalFilter, SentryModule } from "@sentry/nestjs/setup";
import { DatabaseModule } from "@terramatch-microservices/database";
import { APP_FILTER } from "@nestjs/core";

@Module({
imports: [HealthModule, AirtableModule],
controllers: [WebhookController]
imports: [SentryModule.forRoot(), DatabaseModule, HealthModule, AirtableModule],
controllers: [WebhookController],
providers: [
{
provide: APP_FILTER,
useClass: SentryGlobalFilter
}
]
})
export class AppModule {}
3 changes: 3 additions & 0 deletions apps/unified-database-service/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// eslint-disable-next-line @nx/enforce-module-boundaries
import "../../../instrument-sentry";

import { Logger, ValidationPipe } from "@nestjs/common";
import { NestFactory } from "@nestjs/core";

26 changes: 17 additions & 9 deletions apps/user-service/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
import { Module } from '@nestjs/common';
import { LoginController } from './auth/login.controller';
import { AuthService } from './auth/auth.service';
import { DatabaseModule } from '@terramatch-microservices/database';
import { UsersController } from './users/users.controller';
import { CommonModule } from '@terramatch-microservices/common';
import { HealthModule } from './health/health.module';
import { Module } from "@nestjs/common";
import { LoginController } from "./auth/login.controller";
import { AuthService } from "./auth/auth.service";
import { DatabaseModule } from "@terramatch-microservices/database";
import { UsersController } from "./users/users.controller";
import { CommonModule } from "@terramatch-microservices/common";
import { HealthModule } from "./health/health.module";
import { SentryGlobalFilter, SentryModule } from "@sentry/nestjs/setup";
import { APP_FILTER } from "@nestjs/core";

@Module({
imports: [DatabaseModule, CommonModule, HealthModule],
imports: [SentryModule.forRoot(), DatabaseModule, CommonModule, HealthModule],
controllers: [LoginController, UsersController],
providers: [AuthService],
providers: [
{
provide: APP_FILTER,
useClass: SentryGlobalFilter
},
AuthService
]
})
export class AppModule {}
3 changes: 3 additions & 0 deletions apps/user-service/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// eslint-disable-next-line @nx/enforce-module-boundaries
import "../../../instrument-sentry";

import { Logger, ValidationPipe } from "@nestjs/common";
import { NestFactory } from "@nestjs/core";

11 changes: 11 additions & 0 deletions instrument-sentry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import * as Sentry from "@sentry/nestjs";
import { nodeProfilingIntegration } from "@sentry/profiling-node";

if (process.env.SENTRY_DSN != null) {
Sentry.init({
dsn: process.env.SENTRY_DSN,
integrations: [nodeProfilingIntegration()],
tracesSampleRate: 1.0,
profilesSampleRate: 1.0
});
}
834 changes: 825 additions & 9 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -21,6 +21,8 @@
"@nestjs/sequelize": "^10.0.1",
"@nestjs/swagger": "^7.4.0",
"@nestjs/terminus": "^10.2.3",
"@sentry/nestjs": "^8.45.0",
"@sentry/profiling-node": "^8.45.0",
"airtable": "^0.12.2",
"axios": "^1.6.0",
"bcryptjs": "^2.4.3",

0 comments on commit 75566cc

Please sign in to comment.