From de8ddffaef98efaec3db3363eec8f5052a3fa2f5 Mon Sep 17 00:00:00 2001 From: panov-va Date: Tue, 26 Nov 2024 09:26:49 +0500 Subject: [PATCH 1/4] feat: on stats parsed callback --- src/WebRTCIssueDetector.ts | 15 +++++++++++---- src/parser/PeriodicWebRTCStatsReporter.ts | 2 +- src/types.ts | 5 ++++- test/parser/PeriodicWebRTCStatsReporter.spec.ts | 2 +- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/WebRTCIssueDetector.ts b/src/WebRTCIssueDetector.ts index 93ce396..969b0a3 100644 --- a/src/WebRTCIssueDetector.ts +++ b/src/WebRTCIssueDetector.ts @@ -95,12 +95,19 @@ class WebRTCIssueDetector { this.calculateNetworkScores(report.stats); }); - this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORTS_PARSED, (data: { timeTaken: number }) => { + this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORTS_PARSED, (data: { + timeTaken: number, + reportItems: StatsReportItem[], + }) => { const payload = { timeTaken: data.timeTaken, ts: Date.now(), }; + if (params.onStats) { + params.onStats(data.reportItems); + } + this.eventEmitter.emit(EventType.StatsParsingFinished, payload); }); } @@ -133,7 +140,7 @@ class WebRTCIssueDetector { this.statsReporter.stopReporting(); } - public handleNewPeerConnection(pc: RTCPeerConnection): void { + public handleNewPeerConnection({ pc, id }: { pc: RTCPeerConnection, id?: string }): void { if (!this.#running && this.autoAddPeerConnections) { this.logger.debug('Skip handling new peer connection. Detector is not running', pc); return; @@ -147,7 +154,7 @@ class WebRTCIssueDetector { this.logger.debug('Handling new peer connection', pc); - this.compositeStatsParser.addPeerConnection({ pc }); + this.compositeStatsParser.addPeerConnection({ pc, id }); } private emitIssues(issues: IssuePayload[]): void { @@ -173,7 +180,7 @@ class WebRTCIssueDetector { } const OriginalRTCPeerConnection = window.RTCPeerConnection; - const onConnectionCreated = (pc: RTCPeerConnection) => this.handleNewPeerConnection(pc); + const onConnectionCreated = (pc: RTCPeerConnection) => this.handleNewPeerConnection({ pc }); function WIDRTCPeerConnection(rtcConfig?: RTCConfiguration) { const connection = new OriginalRTCPeerConnection(rtcConfig); diff --git a/src/parser/PeriodicWebRTCStatsReporter.ts b/src/parser/PeriodicWebRTCStatsReporter.ts index 1aafe6b..f37fb99 100644 --- a/src/parser/PeriodicWebRTCStatsReporter.ts +++ b/src/parser/PeriodicWebRTCStatsReporter.ts @@ -64,7 +64,7 @@ class PeriodicWebRTCStatsReporter extends EventEmitter { const reportItems = await this.compositeStatsParser.parse(); const timeTaken = Date.now() - startTime; - this.emit(PeriodicWebRTCStatsReporter.STATS_REPORTS_PARSED, { timeTaken }); + this.emit(PeriodicWebRTCStatsReporter.STATS_REPORTS_PARSED, { timeTaken, reportItems }); reportItems.forEach((item: StatsReportItem) => { this.emit(PeriodicWebRTCStatsReporter.STATS_REPORT_READY_EVENT, item); diff --git a/src/types.ts b/src/types.ts index ae6a625..5e717be 100644 --- a/src/types.ts +++ b/src/types.ts @@ -4,7 +4,7 @@ import { WebRTCIssueEmitter } from './WebRTCIssueEmitter'; export interface WIDWindow { wid: { - handleNewPeerConnection(pc: RTCPeerConnection): void; + handleNewPeerConnection(params: { pc: RTCPeerConnection, id?: string }): void; }, } @@ -55,6 +55,7 @@ export type WebRTCIssueDetectorConstructorParams = { logger?: Logger, onIssues?: (payload: IssueDetectorResult) => void, onNetworkScoresUpdated?: (payload: NetworkScores) => void, + onStats?: (payload: StatsReportItem[]) => void, ignoreSSRCList?: number[], getStatsInterval?: number, autoAddPeerConnections?: boolean, @@ -177,6 +178,7 @@ export type ParsedInboundAudioStreamStats = { }, trackId: string, transportId: string, + trackIdentifier: string, }; export type ParsedOutboundAudioStreamStats = { @@ -268,6 +270,7 @@ export type ParsedInboundVideoStreamStats = { } trackId: string, transportId: string, + trackIdentifier: string, }; export type ParsedOutboundVideoStreamStats = { diff --git a/test/parser/PeriodicWebRTCStatsReporter.spec.ts b/test/parser/PeriodicWebRTCStatsReporter.spec.ts index 675528e..9fac52f 100644 --- a/test/parser/PeriodicWebRTCStatsReporter.spec.ts +++ b/test/parser/PeriodicWebRTCStatsReporter.spec.ts @@ -102,7 +102,7 @@ describe('wid/lib/PeriodicWebRTCStatsReporter', () => { reporter.startReporting(); await clock.tickAsync(getStatsInterval); - expect(emitSpy).to.be.calledWith(PeriodicWebRTCStatsReporter.STATS_REPORTS_PARSED, { timeTaken: 0 }); + expect(emitSpy).to.be.calledWith(PeriodicWebRTCStatsReporter.STATS_REPORTS_PARSED, { timeTaken: 0, reportItems: undefined }); }); it('should emit stats report ready event for each stats report item', async () => { From c016bfb61e1f2e0da52232c2951e2605bbd7539e Mon Sep 17 00:00:00 2001 From: vlprojects-bot Date: Tue, 26 Nov 2024 04:39:18 +0000 Subject: [PATCH 2/4] chore(release): 1.13.0-tt-212-on-parsed-stats.1 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bddf24a..c231587 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webrtc-issue-detector", - "version": "1.12.0", + "version": "1.13.0-tt-212-on-parsed-stats.1", "description": "WebRTC diagnostic tool that detects issues with network or user devices", "repository": "git@github.com:VLprojects/webrtc-issue-detector.git", "author": "Roman Kuzakov ", From 8f791028e837dda84ab55ee0aaa3c5686d3124cf Mon Sep 17 00:00:00 2001 From: panov-va Date: Wed, 27 Nov 2024 14:05:03 +0500 Subject: [PATCH 3/4] fix: change handleNewPeerConnection args --- src/WebRTCIssueDetector.ts | 4 ++-- src/types.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/WebRTCIssueDetector.ts b/src/WebRTCIssueDetector.ts index 969b0a3..3ba3cd3 100644 --- a/src/WebRTCIssueDetector.ts +++ b/src/WebRTCIssueDetector.ts @@ -140,7 +140,7 @@ class WebRTCIssueDetector { this.statsReporter.stopReporting(); } - public handleNewPeerConnection({ pc, id }: { pc: RTCPeerConnection, id?: string }): void { + public handleNewPeerConnection(pc: RTCPeerConnection, id?: string): void { if (!this.#running && this.autoAddPeerConnections) { this.logger.debug('Skip handling new peer connection. Detector is not running', pc); return; @@ -180,7 +180,7 @@ class WebRTCIssueDetector { } const OriginalRTCPeerConnection = window.RTCPeerConnection; - const onConnectionCreated = (pc: RTCPeerConnection) => this.handleNewPeerConnection({ pc }); + const onConnectionCreated = (pc: RTCPeerConnection) => this.handleNewPeerConnection(pc); function WIDRTCPeerConnection(rtcConfig?: RTCConfiguration) { const connection = new OriginalRTCPeerConnection(rtcConfig); diff --git a/src/types.ts b/src/types.ts index 5e717be..7f6e7d6 100644 --- a/src/types.ts +++ b/src/types.ts @@ -4,7 +4,7 @@ import { WebRTCIssueEmitter } from './WebRTCIssueEmitter'; export interface WIDWindow { wid: { - handleNewPeerConnection(params: { pc: RTCPeerConnection, id?: string }): void; + handleNewPeerConnection(pc: RTCPeerConnection, id?: string): void; }, } From 40234566c014673367059bad580b4d19d8b3ee8a Mon Sep 17 00:00:00 2001 From: vlprojects-bot Date: Thu, 28 Nov 2024 10:33:48 +0000 Subject: [PATCH 4/4] chore(release): 1.13.0-tt-212-on-parsed-stats.2 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c231587..97adc89 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webrtc-issue-detector", - "version": "1.13.0-tt-212-on-parsed-stats.1", + "version": "1.13.0-tt-212-on-parsed-stats.2", "description": "WebRTC diagnostic tool that detects issues with network or user devices", "repository": "git@github.com:VLprojects/webrtc-issue-detector.git", "author": "Roman Kuzakov ",