Skip to content

Commit 8e5bf8b

Browse files
author
Andrea Barbasso
committed
[DSC-1570] create DatadogRumService
1 parent d67f421 commit 8e5bf8b

3 files changed

Lines changed: 57 additions & 10 deletions

File tree

src/app/app.component.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ import { distinctNext } from './core/shared/distinct-next';
2929
import { RouteService } from './core/services/route.service';
3030
import { getEditItemPageRoute, getWorkflowItemModuleRoute, getWorkspaceItemModuleRoute } from './app-routing-paths';
3131
import { SocialService } from './social/social.service';
32-
import { datadogRum } from '@datadog/browser-rum';
33-
import { KlaroService } from './shared/cookies/klaro.service';
32+
import { DatadogRumService } from './shared/datadog-rum/datadog-rum.service';
3433

3534
@Component({
3635
selector: 'ds-app',
@@ -76,7 +75,7 @@ export class AppComponent implements OnInit, AfterViewInit {
7675
private modalService: NgbModal,
7776
private modalConfig: NgbModalConfig,
7877
private socialService: SocialService,
79-
private klaroService: KlaroService
78+
private datadogRumService: DatadogRumService
8079
) {
8180
this.notificationOptions = environment.notifications;
8281

@@ -112,13 +111,7 @@ export class AppComponent implements OnInit, AfterViewInit {
112111

113112
this.dispatchWindowSize(this._window.nativeWindow.innerWidth, this._window.nativeWindow.innerHeight);
114113

115-
this.klaroService.getSavedPreferences().subscribe(savedPreferences => {
116-
if (savedPreferences?.datadog &&
117-
environment.datadogRum?.clientToken && environment.datadogRum?.applicationId &&
118-
environment.datadogRum?.service && environment.datadogRum?.env) {
119-
datadogRum.init(environment.datadogRum);
120-
}
121-
});
114+
this.datadogRumService.initDatadogRum();
122115
}
123116

124117
private storeCSSVariables() {
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { TestBed } from '@angular/core/testing';
2+
3+
import { DatadogRumService } from './datadog-rum.service';
4+
5+
describe('DatadogRumService', () => {
6+
let service: DatadogRumService;
7+
8+
beforeEach(() => {
9+
TestBed.configureTestingModule({});
10+
service = TestBed.inject(DatadogRumService);
11+
});
12+
13+
it('should be created', () => {
14+
expect(service).toBeTruthy();
15+
});
16+
});
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { Injectable } from '@angular/core';
2+
import { environment } from '../../../environments/environment';
3+
import { datadogRum } from '@datadog/browser-rum';
4+
import { CookieConsents, KlaroService } from '../cookies/klaro.service';
5+
import { BehaviorSubject } from 'rxjs';
6+
7+
@Injectable({
8+
providedIn: 'root'
9+
})
10+
export class DatadogRumService {
11+
12+
consentUpdates$: BehaviorSubject<CookieConsents>;
13+
isDatadogInitialized = false;
14+
15+
constructor(
16+
private klaroService: KlaroService
17+
) {
18+
}
19+
20+
initDatadogRum() {
21+
this.klaroService.watchConsentUpdates();
22+
this.consentUpdates$ = this.klaroService.consentsUpdates$;
23+
this.consentUpdates$.subscribe(savedPreferences => {
24+
if (savedPreferences?.datadog &&
25+
environment.datadogRum?.clientToken && environment.datadogRum?.applicationId &&
26+
environment.datadogRum?.service && environment.datadogRum?.env) {
27+
if (!this.isDatadogInitialized) {
28+
this.isDatadogInitialized = true;
29+
datadogRum.init(environment.datadogRum);
30+
}
31+
} else {
32+
// TODO: if a session starts then stops then starts again an error is thrown. Is there an alternative to the .init method?
33+
datadogRum.stopSession();
34+
this.isDatadogInitialized = false;
35+
}
36+
});
37+
}
38+
}

0 commit comments

Comments
 (0)