diff --git a/package-lock.json b/package-lock.json index cb95e143..65c493a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3522,6 +3522,136 @@ } } }, + "@sentry/angular": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/angular/-/angular-6.10.0.tgz", + "integrity": "sha512-SSnsz4sVu9LJh7RM+z9FopWytl2yYNZQ2nK/zv/6iQKIBOqvnCqUIPjVjq1rFYXOe0jOJKsn0QlQLKp4MajYMg==", + "requires": { + "@sentry/browser": "6.10.0", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", + "rxjs": "^6.6.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/browser": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.10.0.tgz", + "integrity": "sha512-H0Blgp8f8bomebkkGWIgxHVjabtQAlsKJDiFXBg7gIc75YcarRxwH0R3hMog1/h8mmv4CGGUsy5ljYW6jsNnvA==", + "requires": { + "@sentry/core": "6.10.0", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/core": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.10.0.tgz", + "integrity": "sha512-5KlxHJlbD7AMo+b9pMGkjxUOfMILtsqCtGgI7DMvZNfEkdohO8QgUY+hPqr540kmwArFS91ipQYWhqzGaOhM3Q==", + "requires": { + "@sentry/hub": "6.10.0", + "@sentry/minimal": "6.10.0", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/hub": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.10.0.tgz", + "integrity": "sha512-MV8wjhWiFAXZAhmj7Ef5QdBr2IF93u8xXiIo2J+dRZ7eVa4/ZszoUiDbhUcl/TPxczaw4oW2a6tINBNFLzXiig==", + "requires": { + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/minimal": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.10.0.tgz", + "integrity": "sha512-yarm046UgUFIBoxqnBan2+BEgaO9KZCrLzsIsmALiQvpfW92K1lHurSawl5W6SR7wCYBnNn7CPvPE/BHFdy4YA==", + "requires": { + "@sentry/hub": "6.10.0", + "@sentry/types": "6.10.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/tracing": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.10.0.tgz", + "integrity": "sha512-jZj6Aaf8kU5wgyNXbAJHosHn8OOFdK14lgwYPb/AIDsY35g9a9ncTOqIOBp8X3KkmSR8lcBzAEyiUzCxAis2jA==", + "requires": { + "@sentry/hub": "6.10.0", + "@sentry/minimal": "6.10.0", + "@sentry/types": "6.10.0", + "@sentry/utils": "6.10.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/types": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.10.0.tgz", + "integrity": "sha512-M7s0JFgG7/6/yNVYoPUbxzaXDhnzyIQYRRJJKRaTD77YO4MHvi4Ke8alBWqD5fer0cPIfcSkBqa9BLdqRqcMWw==" + }, + "@sentry/utils": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.10.0.tgz", + "integrity": "sha512-F9OczOcZMFtazYVZ6LfRIe65/eOfQbiAedIKS0li4npuMz0jKYRbxrjd/U7oLiNQkPAp4/BujU4m1ZIwq6a+tg==", + "requires": { + "@sentry/types": "6.10.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "@swimlane/ngx-charts": { "version": "18.0.1", "resolved": "https://registry.npmjs.org/@swimlane/ngx-charts/-/ngx-charts-18.0.1.tgz", diff --git a/package.json b/package.json index ce54b023..41396cbd 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,8 @@ "@fortawesome/fontawesome-free": "^5.15.3", "@ngx-translate/core": "^13.0.0", "@ngx-translate/http-loader": "^4.0.0", + "@sentry/angular": "^6.10.0", + "@sentry/tracing": "^6.10.0", "@swimlane/ngx-charts": "^18.0.1", "@types/mapbox-gl": "^1.13.1", "bulma": "^0.9.2", diff --git a/src/app/app.module.ts b/src/app/app.module.ts index caf0ed3e..b12bcfd2 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,8 +1,9 @@ import { BrowserModule } from '@angular/platform-browser'; -import { NgModule } from '@angular/core'; +import { APP_INITIALIZER, ErrorHandler, NgModule } from '@angular/core'; +import { Router } from "@angular/router"; import { CommonModule } from '@angular/common'; -import { HttpClientModule, HttpClient } from '@angular/common/http'; +import { HttpClientModule, HttpClient } from '@angular/common/http'; import { FormsModule,ReactiveFormsModule } from '@angular/forms'; import { AppRoutingModule } from './app-routing.module'; @@ -19,6 +20,7 @@ import { ThemeService } from './services/theme.service'; import { LOCALE_ID } from '@angular/core'; import { registerLocaleData } from '@angular/common'; +import * as Sentry from "@sentry/angular"; import localeDe from '@angular/common/locales/de'; registerLocaleData(localeDe, 'de-DE'); @@ -54,7 +56,23 @@ export function HttpLoaderFactory(http: HttpClient) { ], providers: [ ThemeService, - { provide: LOCALE_ID, useValue: "de-DE" } + { provide: LOCALE_ID, useValue: "de-DE" }, + { + provide: ErrorHandler, + useValue: Sentry.createErrorHandler({ + showDialog: false + }) + }, + { + provide: Sentry.TraceService, + deps: [Router] + }, + { + provide: APP_INITIALIZER, + useFactory: () => () => {}, + deps: [Sentry.TraceService], + multi: true + } ], bootstrap: [AppComponent] }) diff --git a/src/main.ts b/src/main.ts index 51cee45c..f1d4c375 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,25 @@ import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import * as Sentry from '@sentry/angular'; +import { Integrations } from "@sentry/tracing"; + +// Init Sentry as soon as possible during application load up and before initializing Angular +// https://docs.sentry.io/platforms/javascript/guides/angular/configuration/options/ +Sentry.init({ + environment: (environment.production) ? 'production' : 'development', + dsn: "https://3dca81a89894465e8cc92852c7c36db8@o507029.ingest.sentry.io/5891080", + integrations: [ + new Integrations.BrowserTracing({ + tracingOrigins: ["localhost"], + routingInstrumentation: Sentry.routingInstrumentation, + }), + ], + + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for performance monitoring. + // We recommend adjusting this value in production + tracesSampleRate: 1.0, +}); import { AppModule } from './app/app.module'; import { environment } from './environments/environment';