From 35954bae7a85e9690e3211a6beff063f06e7aa9a Mon Sep 17 00:00:00 2001 From: "ilgam.gabdullin" Date: Wed, 8 May 2024 16:03:17 +0300 Subject: [PATCH 1/4] feat: added ability to specify id for pc --- src/NetworkScoresCalculator.ts | 4 +++- src/WebRTCIssueDetector.ts | 20 +++++++++----------- src/types.ts | 8 +++++++- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/NetworkScoresCalculator.ts b/src/NetworkScoresCalculator.ts index 39681ae..d44ae97 100644 --- a/src/NetworkScoresCalculator.ts +++ b/src/NetworkScoresCalculator.ts @@ -5,6 +5,7 @@ import { INetworkScoresCalculator, WebRTCStatsParsed, NetworkQualityStatsSample, + NetworkScoresPayload, } from './types'; import { scheduleTask } from './utils/tasks'; import { CLEANUP_PREV_STATS_TTL_MS } from './utils/constants'; @@ -17,7 +18,7 @@ type MosCalculatorResult = { class NetworkScoresCalculator implements INetworkScoresCalculator { #lastProcessedStats: { [connectionId: string]: WebRTCStatsParsed } = {}; - calculate(data: WebRTCStatsParsed): NetworkScores { + calculate({ data, id }: NetworkScoresPayload): NetworkScores { const { connection: { id: connectionId } } = data; const { mos: outbound, stats: outboundStatsSample } = this.calculateOutboundScore(data) || {}; const { mos: inbound, stats: inboundStatsSample } = this.calculateInboundScore(data) || {}; @@ -32,6 +33,7 @@ class NetworkScoresCalculator implements INetworkScoresCalculator { return { outbound, inbound, + id, statsSamples: { inboundStatsSample, outboundStatsSample, diff --git a/src/WebRTCIssueDetector.ts b/src/WebRTCIssueDetector.ts index 261f440..f029c02 100644 --- a/src/WebRTCIssueDetector.ts +++ b/src/WebRTCIssueDetector.ts @@ -9,7 +9,7 @@ import { Logger, StatsReportItem, WebRTCIssueDetectorConstructorParams, - WebRTCStatsParsed, + NetworkScoresPayload, WIDWindow, } from './types'; import PeriodicWebRTCStatsReporter from './parser/PeriodicWebRTCStatsReporter'; @@ -85,12 +85,10 @@ class WebRTCIssueDetector { this.wrapRTCPeerConnection(); } - this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORT_READY_EVENT, (report: StatsReportItem) => { - this.detectIssues({ - data: report.stats, - }); + this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORT_READY_EVENT, ({ stats, id }: StatsReportItem) => { + this.detectIssues({ data: stats }); - this.calculateNetworkScores(report.stats); + this.calculateNetworkScores({ data: stats, id }); }); this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORTS_PARSED, (data: { timeTaken: number }) => { @@ -131,7 +129,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; @@ -143,9 +141,9 @@ class WebRTCIssueDetector { this.statsReporter.startReporting(); } - this.logger.debug('Handling new peer connection', pc); + this.logger.debug(`Handling new peer connection with id ${id}`, pc); - this.compositeStatsParser.addPeerConnection({ pc }); + this.compositeStatsParser.addPeerConnection({ pc, id }); } private emitIssues(issues: IssuePayload[]): void { @@ -159,8 +157,8 @@ class WebRTCIssueDetector { } } - private calculateNetworkScores(data: WebRTCStatsParsed): void { - const networkScores = this.networkScoresCalculator.calculate(data); + private calculateNetworkScores(payload: NetworkScoresPayload): void { + const networkScores = this.networkScoresCalculator.calculate(payload); this.eventEmitter.emit(EventType.NetworkScoresUpdated, networkScores); } diff --git a/src/types.ts b/src/types.ts index 3b89d8c..4dcbbbf 100644 --- a/src/types.ts +++ b/src/types.ts @@ -15,7 +15,7 @@ export interface IssueDetector { } export interface INetworkScoresCalculator { - calculate(data: WebRTCStatsParsed): NetworkScores; + calculate(data: NetworkScoresPayload): NetworkScores; } export enum EventType { @@ -105,9 +105,15 @@ export type NetworkQualityStatsSample = { packetsLoss: number; }; +export type NetworkScoresPayload = { + data: WebRTCStatsParsed, + id?: string; +}; + export type NetworkScores = { outbound?: NetworkScore, inbound?: NetworkScore, + id?: string; statsSamples: { outboundStatsSample?: NetworkQualityStatsSample, inboundStatsSample?: NetworkQualityStatsSample, From 210cff3393c5ab7458fbef5e4b93d369f5d61855 Mon Sep 17 00:00:00 2001 From: "ilgam.gabdullin" Date: Wed, 15 May 2024 15:34:11 +0300 Subject: [PATCH 2/4] fixes after review: used candidate pair id --- src/NetworkScoresCalculator.ts | 5 ++--- src/WebRTCIssueDetector.ts | 18 ++++++++++-------- src/types.ts | 9 ++------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/NetworkScoresCalculator.ts b/src/NetworkScoresCalculator.ts index d44ae97..da8a797 100644 --- a/src/NetworkScoresCalculator.ts +++ b/src/NetworkScoresCalculator.ts @@ -5,7 +5,6 @@ import { INetworkScoresCalculator, WebRTCStatsParsed, NetworkQualityStatsSample, - NetworkScoresPayload, } from './types'; import { scheduleTask } from './utils/tasks'; import { CLEANUP_PREV_STATS_TTL_MS } from './utils/constants'; @@ -18,7 +17,7 @@ type MosCalculatorResult = { class NetworkScoresCalculator implements INetworkScoresCalculator { #lastProcessedStats: { [connectionId: string]: WebRTCStatsParsed } = {}; - calculate({ data, id }: NetworkScoresPayload): NetworkScores { + calculate(data: WebRTCStatsParsed): NetworkScores { const { connection: { id: connectionId } } = data; const { mos: outbound, stats: outboundStatsSample } = this.calculateOutboundScore(data) || {}; const { mos: inbound, stats: inboundStatsSample } = this.calculateInboundScore(data) || {}; @@ -33,7 +32,7 @@ class NetworkScoresCalculator implements INetworkScoresCalculator { return { outbound, inbound, - id, + pc: connectionId, statsSamples: { inboundStatsSample, outboundStatsSample, diff --git a/src/WebRTCIssueDetector.ts b/src/WebRTCIssueDetector.ts index f029c02..00ae670 100644 --- a/src/WebRTCIssueDetector.ts +++ b/src/WebRTCIssueDetector.ts @@ -9,7 +9,7 @@ import { Logger, StatsReportItem, WebRTCIssueDetectorConstructorParams, - NetworkScoresPayload, + WebRTCStatsParsed, WIDWindow, } from './types'; import PeriodicWebRTCStatsReporter from './parser/PeriodicWebRTCStatsReporter'; @@ -85,10 +85,12 @@ class WebRTCIssueDetector { this.wrapRTCPeerConnection(); } - this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORT_READY_EVENT, ({ stats, id }: StatsReportItem) => { - this.detectIssues({ data: stats }); + this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORT_READY_EVENT, (report : StatsReportItem) => { + this.detectIssues({ + data: report.stats, + }); - this.calculateNetworkScores({ data: stats, id }); + this.calculateNetworkScores(report.stats); }); this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORTS_PARSED, (data: { timeTaken: number }) => { @@ -129,7 +131,7 @@ class WebRTCIssueDetector { this.statsReporter.stopReporting(); } - public handleNewPeerConnection(pc: RTCPeerConnection, id?: string): void { + public handleNewPeerConnection(pc: RTCPeerConnection): void { if (!this.#running && this.autoAddPeerConnections) { this.logger.debug('Skip handling new peer connection. Detector is not running', pc); return; @@ -141,9 +143,9 @@ class WebRTCIssueDetector { this.statsReporter.startReporting(); } - this.logger.debug(`Handling new peer connection with id ${id}`, pc); + this.logger.debug('Handling new peer connection', pc); - this.compositeStatsParser.addPeerConnection({ pc, id }); + this.compositeStatsParser.addPeerConnection({ pc }); } private emitIssues(issues: IssuePayload[]): void { @@ -157,7 +159,7 @@ class WebRTCIssueDetector { } } - private calculateNetworkScores(payload: NetworkScoresPayload): void { + private calculateNetworkScores(payload: WebRTCStatsParsed): void { const networkScores = this.networkScoresCalculator.calculate(payload); this.eventEmitter.emit(EventType.NetworkScoresUpdated, networkScores); } diff --git a/src/types.ts b/src/types.ts index 4dcbbbf..695b295 100644 --- a/src/types.ts +++ b/src/types.ts @@ -15,7 +15,7 @@ export interface IssueDetector { } export interface INetworkScoresCalculator { - calculate(data: NetworkScoresPayload): NetworkScores; + calculate(data: WebRTCStatsParsed): NetworkScores; } export enum EventType { @@ -105,15 +105,10 @@ export type NetworkQualityStatsSample = { packetsLoss: number; }; -export type NetworkScoresPayload = { - data: WebRTCStatsParsed, - id?: string; -}; - export type NetworkScores = { outbound?: NetworkScore, inbound?: NetworkScore, - id?: string; + pc?: string, statsSamples: { outboundStatsSample?: NetworkQualityStatsSample, inboundStatsSample?: NetworkQualityStatsSample, From b6744f76b0468fdbb980c37cd3a79a8df5aace2a Mon Sep 17 00:00:00 2001 From: "ilgam.gabdullin" Date: Wed, 15 May 2024 15:35:37 +0300 Subject: [PATCH 3/4] renamed parameter back --- src/WebRTCIssueDetector.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/WebRTCIssueDetector.ts b/src/WebRTCIssueDetector.ts index 00ae670..261f440 100644 --- a/src/WebRTCIssueDetector.ts +++ b/src/WebRTCIssueDetector.ts @@ -85,7 +85,7 @@ class WebRTCIssueDetector { this.wrapRTCPeerConnection(); } - this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORT_READY_EVENT, (report : StatsReportItem) => { + this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORT_READY_EVENT, (report: StatsReportItem) => { this.detectIssues({ data: report.stats, }); @@ -159,8 +159,8 @@ class WebRTCIssueDetector { } } - private calculateNetworkScores(payload: WebRTCStatsParsed): void { - const networkScores = this.networkScoresCalculator.calculate(payload); + private calculateNetworkScores(data: WebRTCStatsParsed): void { + const networkScores = this.networkScoresCalculator.calculate(data); this.eventEmitter.emit(EventType.NetworkScoresUpdated, networkScores); } From 103fe94cb9ca912bec4ae4d6b24c3c1931e82bf7 Mon Sep 17 00:00:00 2001 From: "ilgam.gabdullin" Date: Thu, 16 May 2024 08:23:51 +0300 Subject: [PATCH 4/4] renamed pc -> connectionId --- src/NetworkScoresCalculator.ts | 2 +- src/types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NetworkScoresCalculator.ts b/src/NetworkScoresCalculator.ts index da8a797..49f96b4 100644 --- a/src/NetworkScoresCalculator.ts +++ b/src/NetworkScoresCalculator.ts @@ -32,7 +32,7 @@ class NetworkScoresCalculator implements INetworkScoresCalculator { return { outbound, inbound, - pc: connectionId, + connectionId, statsSamples: { inboundStatsSample, outboundStatsSample, diff --git a/src/types.ts b/src/types.ts index 695b295..741cd63 100644 --- a/src/types.ts +++ b/src/types.ts @@ -108,7 +108,7 @@ export type NetworkQualityStatsSample = { export type NetworkScores = { outbound?: NetworkScore, inbound?: NetworkScore, - pc?: string, + connectionId?: string, statsSamples: { outboundStatsSample?: NetworkQualityStatsSample, inboundStatsSample?: NetworkQualityStatsSample,