Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
d8729c3
feat: add Datadog RUM session tracking integration
jordane Jul 30, 2025
83666e0
ci: fix e2e workflow
asithade Jul 31, 2025
2bc9e94
ci: fix permissions for e2e flow
asithade Jul 31, 2025
bc2f0ed
ci: fix access to secret values
asithade Jul 31, 2025
dab38e0
ci: fix e2e folder
asithade Jul 31, 2025
7d54b63
ci: fix e2e folder
asithade Jul 31, 2025
5049a29
ci: hide secret values
asithade Jul 31, 2025
793a9b1
ci: hide secret values
asithade Jul 31, 2025
3997569
ci: add secrets
asithade Jul 31, 2025
ea29994
ci: add secrets
asithade Jul 31, 2025
a168d32
ci: fix permissions for comments
asithade Jul 31, 2025
1300c9e
ci: remove trace
asithade Jul 31, 2025
c67fc00
ci: update existing comment for test status
asithade Jul 31, 2025
15c967c
feat: add weekly E2E test workflow
asithade Jul 31, 2025
ae06656
feat: refactor participant management to add/edit flow
asithade Jul 31, 2025
ec11d8a
refactor: improve meeting card state management and refresh logic
asithade Jul 31, 2025
d6e9ddb
refactor: consolidate participant list initialization logic
asithade Jul 31, 2025
39b98d9
feat: add Docker build workflows and Helm chart for deployment
AlanSherman Jul 30, 2025
eda02a9
Update charts/lfx-v2-pcc-ui/values.yaml
AlanSherman Jul 31, 2025
e9e6e73
Clean up docs
AlanSherman Jul 31, 2025
51e3578
Merge branch 'main' into asherman/helm-chart
AlanSherman Jul 31, 2025
33af87c
Clean up docs
AlanSherman Jul 31, 2025
498f3f0
Merge pull request #19 from linuxfoundation/feat/playwright-tests
dealako Jul 31, 2025
d85ce85
Merge branch 'main' into feat/edit-participant
dealako Jul 31, 2025
140c026
Merge pull request #21 from linuxfoundation/feat/edit-participant
dealako Jul 31, 2025
5617ea6
Merge branch 'main' into asherman/helm-chart
dealako Jul 31, 2025
4d549ab
Merge pull request #18 from linuxfoundation/asherman/helm-chart
dealako Jul 31, 2025
5b3c076
Merge branch 'main' into jme/LFXV2-149
asithade Jul 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/lfx-pcc/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"@angular/platform-server": "^19.2.0",
"@angular/router": "^19.2.0",
"@angular/ssr": "^19.2.11",
"@datadog/browser-rum": "^6.16.0",
"@fullcalendar/angular": "^6.1.18",
"@fullcalendar/core": "^6.1.18",
"@fullcalendar/daygrid": "^6.1.18",
Expand Down
10 changes: 10 additions & 0 deletions apps/lfx-pcc/src/app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { AuthContext } from '@lfx-pcc/shared/interfaces';
import { ToastModule } from 'primeng/toast';

import { HeaderComponent } from './shared/components/header/header.component';
import { DatadogRumService } from './shared/services/datadog-rum.service';
import { UserService } from './shared/services/user.service';

@Component({
Expand All @@ -19,12 +20,14 @@ import { UserService } from './shared/services/user.service';
})
export class AppComponent {
private readonly userService = inject(UserService);
private readonly datadogRumService = inject(DatadogRumService);

public auth: AuthContext | undefined;
public transferState = inject(TransferState);
public serverKey = makeStateKey<AuthContext>('auth');

public constructor() {
this.datadogRumService.initialize();
const reqContext = inject(REQUEST_CONTEXT, { optional: true }) as {
auth: AuthContext;
};
Expand All @@ -46,6 +49,13 @@ export class AppComponent {
if (this.auth?.authenticated) {
this.userService.authenticated.set(true);
this.userService.user.set(this.auth.user);

// Set user context in Datadog RUM
this.datadogRumService.setUser({
id: this.auth.user?.id,
name: this.auth.user?.name,
email: this.auth.user?.email,
});
}
}
}
87 changes: 87 additions & 0 deletions apps/lfx-pcc/src/app/shared/services/datadog-rum.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
// Copyright The Linux Foundation and each contributor to LFX.
// SPDX-License-Identifier: MIT

import { Injectable } from '@angular/core';
import { datadogRum } from '@datadog/browser-rum';
import { environment } from '../../../environments/environment';

@Injectable({
providedIn: 'root',
})
export class DatadogRumService {
private isInitialized = false;

public initialize(): void {
if (this.isInitialized || !environment.datadog.enabled) {
return;
}

if (!environment.datadog.applicationId || !environment.datadog.clientToken) {
console.warn('Datadog RUM: Missing applicationId or clientToken in environment configuration');
return;
}

try {
datadogRum.init({
applicationId: environment.datadog.applicationId,
clientToken: environment.datadog.clientToken,
site: environment.datadog.site as 'datadoghq.com',
Copy link

Copilot AI Jul 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The type assertion 'as "datadoghq.com"' is brittle and could break if the site value changes. Consider using proper typing or validation to ensure the site value is a valid Datadog site.

Copilot uses AI. Check for mistakes.
service: environment.datadog.service,
env: environment.datadog.env,
version: '1.0.0',
Copy link

Copilot AI Jul 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The version is hardcoded as '1.0.0'. Consider reading this from package.json or environment configuration to keep it synchronized with actual application versions.

Copilot uses AI. Check for mistakes.
sessionSampleRate: 100,
sessionReplaySampleRate: 20,
trackUserInteractions: true,
trackResources: true,
trackLongTasks: true,
defaultPrivacyLevel: 'mask-user-input',
});

this.isInitialized = true;
} catch (error) {
console.error('Failed to initialize Datadog RUM:', error);
}
}

public addAction(name: string, context?: object): void {
if (this.isInitialized) {
datadogRum.addAction(name, context);
}
}

public addError(error: Error, context?: object): void {
if (this.isInitialized) {
datadogRum.addError(error, context);
}
}

public setUser(user: { id?: string; name?: string; email?: string }): void {
if (this.isInitialized) {
datadogRum.setUser(user);
}
}

public setUserProperty(key: string, value: any): void {
if (this.isInitialized) {
datadogRum.setUserProperty(key, value);
}
}

public setGlobalContextProperty(key: string, value: any): void {
if (this.isInitialized) {
datadogRum.setGlobalContextProperty(key, value);
}
}

public removeGlobalContextProperty(key: string): void {
if (this.isInitialized) {
datadogRum.removeGlobalContextProperty(key);
}
}

public startView(name: string): void {
if (this.isInitialized) {
datadogRum.startView(name);
}
}
}
8 changes: 8 additions & 0 deletions apps/lfx-pcc/src/environments/environment.dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,12 @@ export const environment = {
urls: {
profile: 'https://myprofile.dev.platform.linuxfoundation.org/',
},
datadog: {
enabled: true,
applicationId: process.env['DD_APPLICATION_ID'] || '',
clientToken: process.env['DD_CLIENT_TOKEN'] || '',
site: 'datadoghq.com',
service: 'lfx-projects-self-service',
env: process.env['DD_ENV'] || 'dev',
Comment on lines +11 to +15
Copy link

Copilot AI Jul 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using process.env in browser environments exposes environment variables to client-side code. Consider using Angular's build-time environment replacement or a secure configuration service instead of runtime environment variables for sensitive tokens.

Suggested change
applicationId: process.env['DD_APPLICATION_ID'] || '',
clientToken: process.env['DD_CLIENT_TOKEN'] || '',
site: 'datadoghq.com',
service: 'lfx-projects-self-service',
env: process.env['DD_ENV'] || 'dev',
applicationId: 'dev-application-id', // Replace with actual dev value or placeholder
clientToken: 'dev-client-token', // Replace with actual dev value or placeholder
site: 'datadoghq.com',
service: 'lfx-projects-self-service',
env: 'dev', // Replace with actual dev value or placeholder

Copilot uses AI. Check for mistakes.
},
};
8 changes: 8 additions & 0 deletions apps/lfx-pcc/src/environments/environment.prod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,12 @@ export const environment = {
urls: {
profile: 'https://openprofile.dev',
},
datadog: {
enabled: true,
applicationId: process.env['DD_APPLICATION_ID'] || '',
clientToken: process.env['DD_CLIENT_TOKEN'] || '',
site: 'datadoghq.com',
service: 'lfx-projects-self-service',
env: process.env['DD_ENV'] || 'prod',
Comment on lines +11 to +15
Copy link

Copilot AI Jul 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using process.env in browser environments exposes environment variables to client-side code. Consider using Angular's build-time environment replacement or a secure configuration service instead of runtime environment variables for sensitive tokens.

Suggested change
applicationId: process.env['DD_APPLICATION_ID'] || '',
clientToken: process.env['DD_CLIENT_TOKEN'] || '',
site: 'datadoghq.com',
service: 'lfx-projects-self-service',
env: process.env['DD_ENV'] || 'prod',
applicationId: 'DD_APPLICATION_ID_PLACEHOLDER',
clientToken: 'DD_CLIENT_TOKEN_PLACEHOLDER',
site: 'datadoghq.com',
service: 'lfx-projects-self-service',
env: 'DD_ENV_PLACEHOLDER',

Copilot uses AI. Check for mistakes.
},
};
8 changes: 8 additions & 0 deletions apps/lfx-pcc/src/environments/environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,12 @@ export const environment = {
urls: {
profile: 'https://myprofile.dev.platform.linuxfoundation.org/',
},
datadog: {
enabled: false,
applicationId: '',
clientToken: '',
site: 'datadoghq.com',
service: 'lfx-projects-self-service',
env: 'local',
},
};
32 changes: 32 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1743,6 +1743,37 @@ __metadata:
languageName: node
linkType: hard

"@datadog/browser-core@npm:6.16.0":
version: 6.16.0
resolution: "@datadog/browser-core@npm:6.16.0"
checksum: 10c0/9438867b342f6d9db78575a632da3f97159cf2ffcec869a0e3a306261d01e3048b098155c75addbfae7909572a1ded46beed60ea2938eb166fc7a8250e683a66
languageName: node
linkType: hard

"@datadog/browser-rum-core@npm:6.16.0":
version: 6.16.0
resolution: "@datadog/browser-rum-core@npm:6.16.0"
dependencies:
"@datadog/browser-core": "npm:6.16.0"
checksum: 10c0/9bf9853e930d0630a209a14371140423569a5856d9586fdb5e0fd18fbaa953e24ad107abcad4c0349af9c694e007dea339b107d481fe29d6733993c4222c1e60
languageName: node
linkType: hard

"@datadog/browser-rum@npm:^6.16.0":
version: 6.16.0
resolution: "@datadog/browser-rum@npm:6.16.0"
dependencies:
"@datadog/browser-core": "npm:6.16.0"
"@datadog/browser-rum-core": "npm:6.16.0"
peerDependencies:
"@datadog/browser-logs": 6.16.0
peerDependenciesMeta:
"@datadog/browser-logs":
optional: true
checksum: 10c0/e2843a1b20267b2929f6a7a2fe457b60f8c3b3e83faaf1e8fad9264484bc574032b7d5ca6ae1faca9821fd35f5c576bf884da4e1258a04f7bf76624ff9ff0251
languageName: node
linkType: hard

"@discoveryjs/json-ext@npm:0.6.3":
version: 0.6.3
resolution: "@discoveryjs/json-ext@npm:0.6.3"
Expand Down Expand Up @@ -8074,6 +8105,7 @@ __metadata:
"@angular/platform-server": "npm:^19.2.0"
"@angular/router": "npm:^19.2.0"
"@angular/ssr": "npm:^19.2.11"
"@datadog/browser-rum": "npm:^6.16.0"
"@eslint/compat": "npm:^1.3.1"
"@eslint/eslintrc": "npm:^3.3.1"
"@eslint/js": "npm:^9.31.0"
Expand Down
Loading