diff --git a/package.json b/package.json index bddf24a..97adc89 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.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 ", diff --git a/src/WebRTCIssueDetector.ts b/src/WebRTCIssueDetector.ts index 93ce396..3ba3cd3 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: 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 { 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..7f6e7d6 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(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 () => {