@observertc/observer-js 0.9.27-beta → 0.30.0-e12fcb4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/ObservedCall.d.ts +54 -0
- package/lib/ObservedCall.d.ts.map +1 -0
- package/lib/ObservedCall.js +166 -0
- package/lib/ObservedClient.d.ts +73 -0
- package/lib/ObservedClient.d.ts.map +1 -0
- package/lib/ObservedClient.js +487 -0
- package/lib/ObservedInboundTrack.d.ts +65 -0
- package/lib/ObservedInboundTrack.d.ts.map +1 -0
- package/lib/ObservedInboundTrack.js +192 -0
- package/lib/ObservedOutboundTrack.d.ts +55 -0
- package/lib/ObservedOutboundTrack.d.ts.map +1 -0
- package/lib/ObservedOutboundTrack.js +166 -0
- package/lib/ObservedPeerConnection.d.ts +57 -0
- package/lib/ObservedPeerConnection.d.ts.map +1 -0
- package/lib/ObservedPeerConnection.js +217 -0
- package/lib/Observer.d.ts +26 -1465
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +53 -605
- package/lib/{sinks/ObserverSink.d.ts → ReportsCollector.d.ts} +7 -23
- package/lib/ReportsCollector.d.ts.map +1 -0
- package/lib/{sinks/ObserverSink.js → ReportsCollector.js} +27 -85
- package/lib/common/ReportsCollector.d.ts +21 -24
- package/lib/common/ReportsCollector.d.ts.map +1 -1
- package/lib/common/ReportsCollector.js +24 -0
- package/lib/common/SingleExecutor.d.ts +3 -0
- package/lib/common/SingleExecutor.d.ts.map +1 -0
- package/lib/common/SingleExecutor.js +31 -0
- package/lib/common/TypedEventEmitter.d.ts +22 -0
- package/lib/common/TypedEventEmitter.d.ts.map +1 -0
- package/lib/common/TypedEventEmitter.js +11 -0
- package/lib/common/callEventReports.d.ts.map +1 -0
- package/lib/common/logger.d.ts +3 -9
- package/lib/common/logger.d.ts.map +1 -1
- package/lib/common/logger.js +58 -141
- package/lib/common/types.d.ts +2 -14
- package/lib/common/types.d.ts.map +1 -1
- package/lib/common/utils.d.ts +1 -0
- package/lib/common/utils.d.ts.map +1 -1
- package/lib/common/utils.js +6 -1
- package/lib/index.d.ts +8 -19
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -2
- package/package.json +1 -1
- package/src/ObservedCall.ts +201 -0
- package/src/ObservedClient.ts +681 -0
- package/src/ObservedInboundTrack.ts +238 -0
- package/src/ObservedOutboundTrack.ts +205 -0
- package/src/ObservedPeerConnection.ts +249 -0
- package/src/Observer.ts +86 -442
- package/src/{sinks/ObserverSink.ts → ReportsCollector.ts} +29 -94
- package/src/common/ReportsCollector.ts +48 -23
- package/src/common/SingleExecutor.ts +36 -0
- package/src/common/TypedEventEmitter.ts +32 -0
- package/src/common/logger.ts +58 -161
- package/src/common/types.ts +4 -24
- package/src/common/utils.ts +6 -0
- package/src/index.ts +12 -23
- package/lib/Evaluator.d.ts +0 -43
- package/lib/Evaluator.d.ts.map +0 -1
- package/lib/Evaluator.js +0 -171
- package/lib/common/Semaphore.d.ts +0 -31
- package/lib/common/Semaphore.d.ts.map +0 -1
- package/lib/common/Semaphore.js +0 -16
- package/lib/entries/CallEntry.d.ts +0 -619
- package/lib/entries/CallEntry.d.ts.map +0 -1
- package/lib/entries/CallEntry.js +0 -75
- package/lib/entries/ClientEntry.d.ts +0 -478
- package/lib/entries/ClientEntry.d.ts.map +0 -1
- package/lib/entries/ClientEntry.js +0 -114
- package/lib/entries/InboundTrackEntry.d.ts +0 -682
- package/lib/entries/InboundTrackEntry.d.ts.map +0 -1
- package/lib/entries/InboundTrackEntry.js +0 -76
- package/lib/entries/OutboundTrackEntry.d.ts +0 -682
- package/lib/entries/OutboundTrackEntry.d.ts.map +0 -1
- package/lib/entries/OutboundTrackEntry.js +0 -73
- package/lib/entries/PeerConnectionEntry.d.ts +0 -505
- package/lib/entries/PeerConnectionEntry.d.ts.map +0 -1
- package/lib/entries/PeerConnectionEntry.js +0 -144
- package/lib/entries/SfuEntry.d.ts +0 -150
- package/lib/entries/SfuEntry.d.ts.map +0 -1
- package/lib/entries/SfuEntry.js +0 -77
- package/lib/entries/SfuInboundRtpPadEntry.d.ts +0 -14
- package/lib/entries/SfuInboundRtpPadEntry.d.ts.map +0 -1
- package/lib/entries/SfuInboundRtpPadEntry.js +0 -49
- package/lib/entries/SfuOutboundRtpPadEntry.d.ts +0 -14
- package/lib/entries/SfuOutboundRtpPadEntry.d.ts.map +0 -1
- package/lib/entries/SfuOutboundRtpPadEntry.js +0 -47
- package/lib/entries/SfuSctpChannelEntry.d.ts +0 -12
- package/lib/entries/SfuSctpChannelEntry.d.ts.map +0 -1
- package/lib/entries/SfuSctpChannelEntry.js +0 -43
- package/lib/entries/SfuTransportEntry.d.ts +0 -82
- package/lib/entries/SfuTransportEntry.d.ts.map +0 -1
- package/lib/entries/SfuTransportEntry.js +0 -122
- package/lib/evaluators/SetClientsCoordinateEvaluator.d.ts +0 -9
- package/lib/evaluators/SetClientsCoordinateEvaluator.d.ts.map +0 -1
- package/lib/evaluators/SetClientsCoordinateEvaluator.js +0 -95
- package/lib/middlewares/CallOperationsContext.d.ts +0 -18
- package/lib/middlewares/CallOperationsContext.d.ts.map +0 -1
- package/lib/middlewares/CallOperationsContext.js +0 -27
- package/lib/middlewares/CallProcessor.d.ts +0 -6
- package/lib/middlewares/CallProcessor.d.ts.map +0 -1
- package/lib/middlewares/CallProcessor.js +0 -36
- package/lib/middlewares/CommitTransactionMiddleware.d.ts +0 -6
- package/lib/middlewares/CommitTransactionMiddleware.d.ts.map +0 -1
- package/lib/middlewares/CommitTransactionMiddleware.js +0 -179
- package/lib/middlewares/DeleteOutdatedCallEntries.d.ts +0 -6
- package/lib/middlewares/DeleteOutdatedCallEntries.d.ts.map +0 -1
- package/lib/middlewares/DeleteOutdatedCallEntries.js +0 -121
- package/lib/middlewares/DeleteOutdatedSfuEntries.d.ts +0 -6
- package/lib/middlewares/DeleteOutdatedSfuEntries.d.ts.map +0 -1
- package/lib/middlewares/DeleteOutdatedSfuEntries.js +0 -127
- package/lib/middlewares/Middleware.d.ts +0 -3
- package/lib/middlewares/Middleware.d.ts.map +0 -1
- package/lib/middlewares/Middleware.js +0 -21
- package/lib/middlewares/Processor.d.ts +0 -9
- package/lib/middlewares/Processor.d.ts.map +0 -1
- package/lib/middlewares/Processor.js +0 -54
- package/lib/middlewares/TransactionContext.d.ts +0 -35
- package/lib/middlewares/TransactionContext.d.ts.map +0 -1
- package/lib/middlewares/TransactionContext.js +0 -90
- package/lib/middlewares/TransactoinProcessor.d.ts +0 -6
- package/lib/middlewares/TransactoinProcessor.d.ts.map +0 -1
- package/lib/middlewares/TransactoinProcessor.js +0 -17
- package/lib/middlewares/VisitObservedCallsMiddleware.d.ts +0 -7
- package/lib/middlewares/VisitObservedCallsMiddleware.d.ts.map +0 -1
- package/lib/middlewares/VisitObservedCallsMiddleware.js +0 -96
- package/lib/middlewares/VisitObservedSfusMiddleware.d.ts +0 -6
- package/lib/middlewares/VisitObservedSfusMiddleware.d.ts.map +0 -1
- package/lib/middlewares/VisitObservedSfusMiddleware.js +0 -151
- package/lib/middlewares/visitors/visitClient.d.ts +0 -5
- package/lib/middlewares/visitors/visitClient.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitClient.js +0 -174
- package/lib/middlewares/visitors/visitInboundAudioTrack.d.ts +0 -5
- package/lib/middlewares/visitors/visitInboundAudioTrack.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitInboundAudioTrack.js +0 -93
- package/lib/middlewares/visitors/visitInboundVideoTrack.d.ts +0 -5
- package/lib/middlewares/visitors/visitInboundVideoTrack.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitInboundVideoTrack.js +0 -94
- package/lib/middlewares/visitors/visitOutboundAudioTrack.d.ts +0 -5
- package/lib/middlewares/visitors/visitOutboundAudioTrack.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitOutboundAudioTrack.js +0 -90
- package/lib/middlewares/visitors/visitOutboundVideoTarck.d.ts +0 -5
- package/lib/middlewares/visitors/visitOutboundVideoTarck.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitOutboundVideoTarck.js +0 -90
- package/lib/middlewares/visitors/visitPeerConnection.d.ts +0 -5
- package/lib/middlewares/visitors/visitPeerConnection.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitPeerConnection.js +0 -111
- package/lib/middlewares/visitors/visitSfu.d.ts +0 -5
- package/lib/middlewares/visitors/visitSfu.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitSfu.js +0 -78
- package/lib/middlewares/visitors/visitSfuInboundRtpPad.d.ts +0 -5
- package/lib/middlewares/visitors/visitSfuInboundRtpPad.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitSfuInboundRtpPad.js +0 -56
- package/lib/middlewares/visitors/visitSfuOutboundRtpPad.d.ts +0 -5
- package/lib/middlewares/visitors/visitSfuOutboundRtpPad.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitSfuOutboundRtpPad.js +0 -56
- package/lib/middlewares/visitors/visitSfuSctpChannel.d.ts +0 -5
- package/lib/middlewares/visitors/visitSfuSctpChannel.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitSfuSctpChannel.js +0 -55
- package/lib/middlewares/visitors/visitSfuTransport.d.ts +0 -5
- package/lib/middlewares/visitors/visitSfuTransport.d.ts.map +0 -1
- package/lib/middlewares/visitors/visitSfuTransport.js +0 -56
- package/lib/processes/closePeerConnectionProcess.d.ts +0 -10
- package/lib/processes/closePeerConnectionProcess.d.ts.map +0 -1
- package/lib/processes/closePeerConnectionProcess.js +0 -51
- package/lib/processes/detachClientProcess.d.ts +0 -14
- package/lib/processes/detachClientProcess.d.ts.map +0 -1
- package/lib/processes/detachClientProcess.js +0 -106
- package/lib/processes/findRemoteMatches.d.ts +0 -9
- package/lib/processes/findRemoteMatches.d.ts.map +0 -1
- package/lib/processes/findRemoteMatches.js +0 -96
- package/lib/processes/inboundTrackRemoved.d.ts +0 -9
- package/lib/processes/inboundTrackRemoved.d.ts.map +0 -1
- package/lib/processes/inboundTrackRemoved.js +0 -22
- package/lib/processes/joinClientProcess.d.ts +0 -11
- package/lib/processes/joinClientProcess.d.ts.map +0 -1
- package/lib/processes/joinClientProcess.js +0 -120
- package/lib/processes/outboundTrackRemoved.d.ts +0 -9
- package/lib/processes/outboundTrackRemoved.d.ts.map +0 -1
- package/lib/processes/outboundTrackRemoved.js +0 -22
- package/lib/samples/ObservedCall.d.ts +0 -17
- package/lib/samples/ObservedCall.d.ts.map +0 -1
- package/lib/samples/ObservedCall.js +0 -29
- package/lib/samples/ObservedCalls.d.ts +0 -19
- package/lib/samples/ObservedCalls.d.ts.map +0 -1
- package/lib/samples/ObservedCalls.js +0 -113
- package/lib/samples/ObservedClient.d.ts +0 -28
- package/lib/samples/ObservedClient.d.ts.map +0 -1
- package/lib/samples/ObservedClient.js +0 -110
- package/lib/samples/ObservedInboundAudioTrack.d.ts +0 -17
- package/lib/samples/ObservedInboundAudioTrack.d.ts.map +0 -1
- package/lib/samples/ObservedInboundAudioTrack.js +0 -17
- package/lib/samples/ObservedInboundVideoTrack.d.ts +0 -17
- package/lib/samples/ObservedInboundVideoTrack.d.ts.map +0 -1
- package/lib/samples/ObservedInboundVideoTrack.js +0 -17
- package/lib/samples/ObservedOutboundAudioTrack.d.ts +0 -16
- package/lib/samples/ObservedOutboundAudioTrack.d.ts.map +0 -1
- package/lib/samples/ObservedOutboundAudioTrack.js +0 -17
- package/lib/samples/ObservedOutboundVideoTrack.d.ts +0 -16
- package/lib/samples/ObservedOutboundVideoTrack.d.ts.map +0 -1
- package/lib/samples/ObservedOutboundVideoTrack.js +0 -17
- package/lib/samples/ObservedPeerConnection.d.ts +0 -47
- package/lib/samples/ObservedPeerConnection.d.ts.map +0 -1
- package/lib/samples/ObservedPeerConnection.js +0 -130
- package/lib/samples/ObservedSfu.d.ts +0 -27
- package/lib/samples/ObservedSfu.d.ts.map +0 -1
- package/lib/samples/ObservedSfu.js +0 -65
- package/lib/samples/ObservedSfuInboundRtpPad.d.ts +0 -15
- package/lib/samples/ObservedSfuInboundRtpPad.d.ts.map +0 -1
- package/lib/samples/ObservedSfuInboundRtpPad.js +0 -17
- package/lib/samples/ObservedSfuOutboundRtpPad.d.ts +0 -15
- package/lib/samples/ObservedSfuOutboundRtpPad.d.ts.map +0 -1
- package/lib/samples/ObservedSfuOutboundRtpPad.js +0 -17
- package/lib/samples/ObservedSfuSctpChannel.d.ts +0 -15
- package/lib/samples/ObservedSfuSctpChannel.d.ts.map +0 -1
- package/lib/samples/ObservedSfuSctpChannel.js +0 -17
- package/lib/samples/ObservedSfuTransport.d.ts +0 -30
- package/lib/samples/ObservedSfuTransport.d.ts.map +0 -1
- package/lib/samples/ObservedSfuTransport.js +0 -86
- package/lib/samples/ObservedSfus.d.ts +0 -16
- package/lib/samples/ObservedSfus.d.ts.map +0 -1
- package/lib/samples/ObservedSfus.js +0 -72
- package/lib/sinks/ObserverSink.d.ts.map +0 -1
- package/lib/sinks/callEventReports.d.ts.map +0 -1
- package/lib/sources/ObservedCallSource.d.ts +0 -18
- package/lib/sources/ObservedCallSource.d.ts.map +0 -1
- package/lib/sources/ObservedCallSource.js +0 -2
- package/lib/sources/ObservedClientSource.d.ts +0 -19
- package/lib/sources/ObservedClientSource.d.ts.map +0 -1
- package/lib/sources/ObservedClientSource.js +0 -2
- package/lib/sources/ObservedSfuSource.d.ts +0 -15
- package/lib/sources/ObservedSfuSource.d.ts.map +0 -1
- package/lib/sources/ObservedSfuSource.js +0 -2
- package/lib/sources/Sources.d.ts +0 -49
- package/lib/sources/Sources.d.ts.map +0 -1
- package/lib/sources/Sources.js +0 -213
- package/src/Evaluator.ts +0 -229
- package/src/common/Semaphore.ts +0 -45
- package/src/entries/CallEntry.ts +0 -62
- package/src/entries/ClientEntry.ts +0 -106
- package/src/entries/InboundTrackEntry.ts +0 -74
- package/src/entries/OutboundTrackEntry.ts +0 -72
- package/src/entries/PeerConnectionEntry.ts +0 -133
- package/src/entries/SfuEntry.ts +0 -62
- package/src/entries/SfuInboundRtpPadEntry.ts +0 -46
- package/src/entries/SfuOutboundRtpPadEntry.ts +0 -44
- package/src/entries/SfuSctpChannelEntry.ts +0 -39
- package/src/entries/SfuTransportEntry.ts +0 -109
- package/src/evaluators/SetClientsCoordinateEvaluator.ts +0 -78
- package/src/middlewares/CallOperationsContext.ts +0 -56
- package/src/middlewares/CallProcessor.ts +0 -38
- package/src/middlewares/CommitTransactionMiddleware.ts +0 -328
- package/src/middlewares/DeleteOutdatedCallEntries.ts +0 -159
- package/src/middlewares/DeleteOutdatedSfuEntries.ts +0 -168
- package/src/middlewares/Middleware.ts +0 -10
- package/src/middlewares/Processor.ts +0 -59
- package/src/middlewares/TransactionContext.ts +0 -176
- package/src/middlewares/TransactoinProcessor.ts +0 -28
- package/src/middlewares/VisitObservedCallsMiddleware.ts +0 -172
- package/src/middlewares/VisitObservedSfusMiddleware.ts +0 -203
- package/src/middlewares/visitors/visitClient.ts +0 -239
- package/src/middlewares/visitors/visitInboundAudioTrack.ts +0 -113
- package/src/middlewares/visitors/visitInboundVideoTrack.ts +0 -117
- package/src/middlewares/visitors/visitOutboundAudioTrack.ts +0 -100
- package/src/middlewares/visitors/visitOutboundVideoTarck.ts +0 -102
- package/src/middlewares/visitors/visitPeerConnection.ts +0 -151
- package/src/middlewares/visitors/visitSfu.ts +0 -70
- package/src/middlewares/visitors/visitSfuInboundRtpPad.ts +0 -52
- package/src/middlewares/visitors/visitSfuOutboundRtpPad.ts +0 -53
- package/src/middlewares/visitors/visitSfuSctpChannel.ts +0 -50
- package/src/middlewares/visitors/visitSfuTransport.ts +0 -50
- package/src/processes/closePeerConnectionProcess.ts +0 -54
- package/src/processes/detachClientProcess.ts +0 -136
- package/src/processes/findRemoteMatches.ts +0 -104
- package/src/processes/inboundTrackRemoved.ts +0 -22
- package/src/processes/joinClientProcess.ts +0 -138
- package/src/processes/outboundTrackRemoved.ts +0 -22
- package/src/samples/ObservedCall.ts +0 -49
- package/src/samples/ObservedCalls.ts +0 -143
- package/src/samples/ObservedClient.ts +0 -172
- package/src/samples/ObservedInboundAudioTrack.ts +0 -35
- package/src/samples/ObservedInboundVideoTrack.ts +0 -36
- package/src/samples/ObservedOutboundAudioTrack.ts +0 -35
- package/src/samples/ObservedOutboundVideoTrack.ts +0 -35
- package/src/samples/ObservedPeerConnection.ts +0 -227
- package/src/samples/ObservedSfu.ts +0 -115
- package/src/samples/ObservedSfuInboundRtpPad.ts +0 -35
- package/src/samples/ObservedSfuOutboundRtpPad.ts +0 -35
- package/src/samples/ObservedSfuSctpChannel.ts +0 -35
- package/src/samples/ObservedSfuTransport.ts +0 -142
- package/src/samples/ObservedSfus.ts +0 -95
- package/src/sources/ObservedCallSource.ts +0 -26
- package/src/sources/ObservedClientSource.ts +0 -28
- package/src/sources/ObservedSfuSource.ts +0 -19
- package/src/sources/Sources.ts +0 -301
- /package/lib/{sinks → common}/callEventReports.d.ts +0 -0
- /package/lib/{sinks → common}/callEventReports.js +0 -0
- /package/src/{sinks → common}/callEventReports.ts +0 -0
|
@@ -19,11 +19,7 @@ import {
|
|
|
19
19
|
SFUTransportReport,
|
|
20
20
|
} from '@observertc/report-schemas-js';
|
|
21
21
|
import { EventEmitter } from 'events';
|
|
22
|
-
import {
|
|
23
|
-
import { ObserverSinkContext } from '../common/types';
|
|
24
|
-
import { Middleware } from '../middlewares/Middleware';
|
|
25
|
-
import { createProcessor, Processor } from '../middlewares/Processor';
|
|
26
|
-
import { logger } from '../middlewares/VisitObservedCallsMiddleware';
|
|
22
|
+
import { ObserverSinkContext } from './common/types';
|
|
27
23
|
|
|
28
24
|
export type SinkEventsMap = {
|
|
29
25
|
'call-event': {
|
|
@@ -80,23 +76,14 @@ export type SinkEventsMap = {
|
|
|
80
76
|
'sfu-meta': {
|
|
81
77
|
reports: SfuMetaReport[];
|
|
82
78
|
};
|
|
79
|
+
'reports': ObserverSinkContext;
|
|
80
|
+
'newreport': number;
|
|
83
81
|
};
|
|
84
82
|
|
|
85
|
-
export type SinkConfig = Record<string, unknown>;
|
|
86
83
|
export type ObserverSinkProcess = (observerSinkContext: ObserverSinkContext) => Promise<void>;
|
|
87
84
|
|
|
88
|
-
export
|
|
89
|
-
|
|
90
|
-
off<K extends keyof SinkEventsMap>(event: K, listener: (reports: SinkEventsMap[K]) => void): this;
|
|
91
|
-
once<K extends keyof SinkEventsMap>(event: K, listener: (reports: SinkEventsMap[K]) => void): this;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export class SinkImpl implements ReportsCollector, ObserverReportsEmitter {
|
|
95
|
-
private _index = 0;
|
|
96
|
-
private _processes = new Map<number, Promise<void>>();
|
|
97
|
-
private _customProcesses = new Map<ObserverSinkProcess, Middleware<ObserverSinkContext>>();
|
|
98
|
-
private readonly _processor: Processor<ObserverSinkContext>;
|
|
99
|
-
|
|
85
|
+
export class ReportsCollector {
|
|
86
|
+
private _collectedReports = 0;
|
|
100
87
|
private _emitter = new EventEmitter();
|
|
101
88
|
private _callEventReports: CallEventReport[] = [];
|
|
102
89
|
private _callMetaReports: CallMetaReport[] = [];
|
|
@@ -117,8 +104,8 @@ export class SinkImpl implements ReportsCollector, ObserverReportsEmitter {
|
|
|
117
104
|
private _sfuTransportReports: SFUTransportReport[] = [];
|
|
118
105
|
private _sfuMetaReports: SfuMetaReport[] = [];
|
|
119
106
|
|
|
120
|
-
public constructor(
|
|
121
|
-
|
|
107
|
+
public constructor() {
|
|
108
|
+
// empty
|
|
122
109
|
}
|
|
123
110
|
|
|
124
111
|
public on<K extends keyof SinkEventsMap>(event: K, listener: (reports: SinkEventsMap[K]) => void): this {
|
|
@@ -141,150 +128,99 @@ export class SinkImpl implements ReportsCollector, ObserverReportsEmitter {
|
|
|
141
128
|
|
|
142
129
|
public addCallEventReport(report: CallEventReport) {
|
|
143
130
|
this._callEventReports.push(report);
|
|
131
|
+
this._emit('newreport', ++this._collectedReports);
|
|
144
132
|
}
|
|
145
133
|
|
|
146
134
|
public addCallMetaReport(report: CallMetaReport) {
|
|
147
135
|
this._callMetaReports.push(report);
|
|
136
|
+
this._emit('newreport', ++this._collectedReports);
|
|
148
137
|
}
|
|
149
138
|
|
|
150
139
|
public addClientDataChannelReport(report: ClientDataChannelReport) {
|
|
151
140
|
this._clientDataChannelReports.push(report);
|
|
141
|
+
this._emit('newreport', ++this._collectedReports);
|
|
152
142
|
}
|
|
153
143
|
|
|
154
144
|
public addClientExtensionReport(report: ClientExtensionReport) {
|
|
155
145
|
this._clientExtensionReports.push(report);
|
|
146
|
+
this._emit('newreport', ++this._collectedReports);
|
|
156
147
|
}
|
|
157
148
|
|
|
158
149
|
public addIceCandidatePairReport(report: IceCandidatePairReport) {
|
|
159
150
|
this._iceCandidatePairReports.push(report);
|
|
151
|
+
this._emit('newreport', ++this._collectedReports);
|
|
160
152
|
}
|
|
161
153
|
|
|
162
154
|
public addInboundAudioTrackReport(report: InboundAudioTrackReport) {
|
|
163
155
|
this._inboundAudioTrackReports.push(report);
|
|
156
|
+
this._emit('newreport', ++this._collectedReports);
|
|
164
157
|
}
|
|
165
158
|
|
|
166
159
|
public addInboundVideoTrackReport(report: InboundVideoTrackReport) {
|
|
167
160
|
this._inboundVideoTrackReports.push(report);
|
|
161
|
+
this._emit('newreport', ++this._collectedReports);
|
|
168
162
|
}
|
|
169
163
|
|
|
170
164
|
public addPeerConnectionTransportReports(report: PeerConnectionTransportReport) {
|
|
171
165
|
this._peerConnectionTransportReports.push(report);
|
|
166
|
+
this._emit('newreport', ++this._collectedReports);
|
|
172
167
|
}
|
|
173
168
|
|
|
174
169
|
public addObserverEventReport(report: ObserverEventReport) {
|
|
175
170
|
this._observerEventReports.push(report);
|
|
171
|
+
this._emit('newreport', ++this._collectedReports);
|
|
176
172
|
}
|
|
177
173
|
|
|
178
174
|
public addOutboundAudioTrackReport(report: OutboundAudioTrackReport) {
|
|
179
175
|
this._outboundAudioTrackReports.push(report);
|
|
176
|
+
this._emit('newreport', ++this._collectedReports);
|
|
180
177
|
}
|
|
181
178
|
|
|
182
179
|
public addOutboundVideoTrackReport(report: OutboundVideoTrackReport) {
|
|
183
180
|
this._outboundVideoTrackReports.push(report);
|
|
181
|
+
this._emit('newreport', ++this._collectedReports);
|
|
184
182
|
}
|
|
185
183
|
|
|
186
184
|
public addSfuEventReport(report: SfuEventReport) {
|
|
187
185
|
this._sfuEventReports.push(report);
|
|
186
|
+
this._emit('newreport', ++this._collectedReports);
|
|
188
187
|
}
|
|
189
188
|
|
|
190
189
|
public addSfuExtensionReport(report: SfuExtensionReport) {
|
|
191
190
|
this._sfuExtensionReports.push(report);
|
|
191
|
+
this._emit('newreport', ++this._collectedReports);
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
public addSfuInboundRtpPadReport(report: SfuInboundRtpPadReport) {
|
|
195
195
|
this._sfuInboundRtpPadReports.push(report);
|
|
196
|
+
this._emit('newreport', ++this._collectedReports);
|
|
196
197
|
}
|
|
197
198
|
|
|
198
199
|
public addSfuOutboundRtpPadReport(report: SfuOutboundRtpPadReport) {
|
|
199
200
|
this._sfuOutboundRtpPadReports.push(report);
|
|
201
|
+
this._emit('newreport', ++this._collectedReports);
|
|
200
202
|
}
|
|
201
203
|
|
|
202
204
|
public addSfuSctpStreamReport(report: SfuSctpStreamReport) {
|
|
203
205
|
this._sfuSctpStreamReports.push(report);
|
|
206
|
+
this._emit('newreport', ++this._collectedReports);
|
|
204
207
|
}
|
|
205
208
|
|
|
206
209
|
public addSfuTransportReport(report: SFUTransportReport) {
|
|
207
210
|
this._sfuTransportReports.push(report);
|
|
211
|
+
this._emit('newreport', ++this._collectedReports);
|
|
208
212
|
}
|
|
209
213
|
|
|
210
214
|
public addSfuMetaReport(report: SfuMetaReport) {
|
|
211
215
|
this._sfuMetaReports.push(report);
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
public getCallEventReports(): CallEventReport[] {
|
|
215
|
-
return this._callEventReports;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
public getClientExtensionReports(): ClientExtensionReport[] {
|
|
219
|
-
return this._clientExtensionReports;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
public getSfuEventReports(): SfuEventReport[] {
|
|
223
|
-
return this._sfuEventReports;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
public getSfuExtensionReports(): SfuExtensionReport[] {
|
|
227
|
-
return this._sfuExtensionReports;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
public addProcess(process: ObserverSinkProcess) {
|
|
231
|
-
const middleware: Middleware<ObserverSinkContext> = async (context, next) => {
|
|
232
|
-
await process(context);
|
|
233
|
-
if (next) await next(context);
|
|
234
|
-
};
|
|
235
|
-
|
|
236
|
-
this._customProcesses.set(process, middleware);
|
|
237
|
-
this._processor.addMiddleware(middleware);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
public removeProcess(process: ObserverSinkProcess) {
|
|
241
|
-
const middleware = this._customProcesses.get(process);
|
|
242
|
-
|
|
243
|
-
if (!middleware) {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
this._customProcesses.delete(process);
|
|
247
|
-
this._processor.removeMiddleware(middleware);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
private async _process(context: ObserverSinkContext): Promise<void> {
|
|
251
|
-
if (this._processor.getSize() < 1) {
|
|
252
|
-
// no process to execute
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
if (this._processes.has(this._index)) {
|
|
256
|
-
logger.warn('The sink process has been called while the previous process has not yet completed. This may indicate that the observer is attempting to process more reports than it can handle.');
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
const actualBlockingPoint = this._processes.get(this._index) ?? Promise.resolve();
|
|
260
|
-
const index = ++this._index;
|
|
261
|
-
const result = new Promise<void>((resolve, reject) => {
|
|
262
|
-
actualBlockingPoint.then(() => {
|
|
263
|
-
this._processor.use(context)
|
|
264
|
-
.then(() => resolve())
|
|
265
|
-
.catch((err) => reject(err));
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
const nextBlockingPoint = new Promise<void>((resolve) => {
|
|
269
|
-
result.then(() => {
|
|
270
|
-
this._processes.delete(index);
|
|
271
|
-
resolve();
|
|
272
|
-
}).catch(() => {
|
|
273
|
-
this._processes.delete(index);
|
|
274
|
-
resolve();
|
|
275
|
-
});
|
|
276
|
-
});
|
|
277
|
-
|
|
278
|
-
this._processes.set(index, nextBlockingPoint);
|
|
279
|
-
|
|
280
|
-
return result;
|
|
216
|
+
this._emit('newreport', ++this._collectedReports);
|
|
281
217
|
}
|
|
282
218
|
|
|
283
219
|
public emit(): number {
|
|
284
220
|
let result = 0;
|
|
285
221
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
286
222
|
const checkAndEmit = (eventName: keyof SinkEventsMap, reports: any[]) => {
|
|
287
|
-
if (reports.length
|
|
223
|
+
if (0 < reports.length) {
|
|
288
224
|
this._emit(eventName, { reports });
|
|
289
225
|
result += reports.length;
|
|
290
226
|
}
|
|
@@ -292,10 +228,6 @@ export class SinkImpl implements ReportsCollector, ObserverReportsEmitter {
|
|
|
292
228
|
|
|
293
229
|
const context = this._createObserverSinkContext();
|
|
294
230
|
|
|
295
|
-
this._process(context).catch((err) => {
|
|
296
|
-
logger.error('Error occurred while processing reports', err);
|
|
297
|
-
});
|
|
298
|
-
|
|
299
231
|
checkAndEmit('call-event', this._callEventReports);
|
|
300
232
|
this._callEventReports = [];
|
|
301
233
|
|
|
@@ -350,6 +282,9 @@ export class SinkImpl implements ReportsCollector, ObserverReportsEmitter {
|
|
|
350
282
|
checkAndEmit('sfu-meta', this._sfuMetaReports);
|
|
351
283
|
this._sfuMetaReports = [];
|
|
352
284
|
|
|
285
|
+
this._emit('reports', context);
|
|
286
|
+
this._collectedReports = 0;
|
|
287
|
+
|
|
353
288
|
return result;
|
|
354
289
|
}
|
|
355
290
|
|
|
@@ -19,28 +19,53 @@ import {
|
|
|
19
19
|
SFUTransportReport,
|
|
20
20
|
} from '@observertc/report-schemas-js';
|
|
21
21
|
|
|
22
|
-
export interface ReportsCollector {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
22
|
+
// export interface ReportsCollector {
|
|
23
|
+
// addCallEventReport(report: CallEventReport): void;
|
|
24
|
+
// addCallMetaReport(report: CallMetaReport): void;
|
|
25
|
+
// addClientDataChannelReport(report: ClientDataChannelReport): void;
|
|
26
|
+
// addClientExtensionReport(report: ClientExtensionReport): void;
|
|
27
|
+
// addIceCandidatePairReport(report: IceCandidatePairReport): void;
|
|
28
|
+
// addInboundAudioTrackReport(report: InboundAudioTrackReport): void;
|
|
29
|
+
// addInboundVideoTrackReport(report: InboundVideoTrackReport): void;
|
|
30
|
+
// addPeerConnectionTransportReports(report: PeerConnectionTransportReport): void;
|
|
31
|
+
// addObserverEventReport(report: ObserverEventReport): void;
|
|
32
|
+
// addOutboundAudioTrackReport(report: OutboundAudioTrackReport): void;
|
|
33
|
+
// addOutboundVideoTrackReport(report: OutboundVideoTrackReport): void;
|
|
34
|
+
// addSfuEventReport(report: SfuEventReport): void;
|
|
35
|
+
// addSfuExtensionReport(report: SfuExtensionReport): void;
|
|
36
|
+
// addSfuInboundRtpPadReport(report: SfuInboundRtpPadReport): void;
|
|
37
|
+
// addSfuOutboundRtpPadReport(report: SfuOutboundRtpPadReport): void;
|
|
38
|
+
// addSfuSctpStreamReport(report: SfuSctpStreamReport): void;
|
|
39
|
+
// addSfuTransportReport(report: SFUTransportReport): void;
|
|
40
|
+
// addSfuMetaReport(report: SfuMetaReport): void;
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
// getCallEventReports(): CallEventReport[];
|
|
43
|
+
// getClientExtensionReports(): ClientExtensionReport[];
|
|
44
|
+
// getSfuEventReports(): SfuEventReport[];
|
|
45
|
+
// getSfuExtensionReports(): SfuExtensionReport[];
|
|
46
|
+
// }
|
|
47
|
+
|
|
48
|
+
export type ObservedReports = ReturnType<typeof createObservedReports>;
|
|
49
|
+
|
|
50
|
+
export function createObservedReports() {
|
|
51
|
+
return {
|
|
52
|
+
callEventReports: [] as CallEventReport[],
|
|
53
|
+
callMetaReports: [] as CallMetaReport[],
|
|
54
|
+
clientDataChannelReports: [] as ClientDataChannelReport[],
|
|
55
|
+
clientExtensionReports: [] as ClientExtensionReport[],
|
|
56
|
+
iceCandidatePairReports: [] as IceCandidatePairReport[],
|
|
57
|
+
inboundAudioTrackReports: [] as InboundAudioTrackReport[],
|
|
58
|
+
inboundVideoTrackReports: [] as InboundVideoTrackReport[],
|
|
59
|
+
observerEventReports: [] as ObserverEventReport[],
|
|
60
|
+
outboundAudioTrackReports: [] as OutboundAudioTrackReport[],
|
|
61
|
+
outboundVideoTrackReports: [] as OutboundVideoTrackReport[],
|
|
62
|
+
peerConnectionTransportReports: [] as PeerConnectionTransportReport[],
|
|
63
|
+
sfuEventReports: [] as SfuEventReport[],
|
|
64
|
+
sfuExtensionReports: [] as SfuExtensionReport[],
|
|
65
|
+
sfuInboundRtpPadReports: [] as SfuInboundRtpPadReport[],
|
|
66
|
+
sfuMetaReports: [] as SfuMetaReport[],
|
|
67
|
+
sfuOutboundRtpPadReports: [] as SfuOutboundRtpPadReport[],
|
|
68
|
+
sfuSctpStreamReports: [] as SfuSctpStreamReport[],
|
|
69
|
+
sfuTransportReports: [] as SFUTransportReport[],
|
|
70
|
+
};
|
|
46
71
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type SingleExecutor = ReturnType<typeof createSingleExecutor>;
|
|
2
|
+
|
|
3
|
+
export function createSingleExecutor() {
|
|
4
|
+
let semaphore = 1;
|
|
5
|
+
const tasks: (() => Promise<unknown>)[] = [];
|
|
6
|
+
|
|
7
|
+
const execute = <T = unknown>(task: () => Promise<T>) => {
|
|
8
|
+
return new Promise<T>((resolve, reject) => {
|
|
9
|
+
tasks.push(() => task().then(resolve)
|
|
10
|
+
.catch(reject));
|
|
11
|
+
run();
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const run = () => {
|
|
16
|
+
if (semaphore < 1) return;
|
|
17
|
+
|
|
18
|
+
const task = tasks.shift();
|
|
19
|
+
|
|
20
|
+
if (!task) return;
|
|
21
|
+
|
|
22
|
+
const postProcess = () => {
|
|
23
|
+
++semaphore;
|
|
24
|
+
run();
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
--semaphore;
|
|
28
|
+
|
|
29
|
+
task()
|
|
30
|
+
.then(postProcess)
|
|
31
|
+
.catch(postProcess);
|
|
32
|
+
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return execute;
|
|
36
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import EventEmitter from 'events';
|
|
2
|
+
|
|
3
|
+
export type EventMap = {
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
|
+
[key: string]: [...unknown[]]
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function createTypedEventEmitter<Events extends EventMap>() {
|
|
9
|
+
return new EventEmitter() as TypedEventEmitter<Events>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface TypedEventEmitter<Events extends EventMap> {
|
|
13
|
+
addListener<E extends keyof Events> (event: E, listener: (...data: Events[E]) => void): this
|
|
14
|
+
on<E extends keyof Events> (event: E, listener: (...data: Events[E]) => void): this
|
|
15
|
+
once<E extends keyof Events> (event: E, listener: (...data: Events[E]) => void): this
|
|
16
|
+
prependListener<E extends keyof Events> (event: E, listener: (...data: Events[E]) => void): this
|
|
17
|
+
prependOnceListener<E extends keyof Events> (event: E, listener: (...data: Events[E]) => void): this
|
|
18
|
+
|
|
19
|
+
off<E extends keyof Events>(event: E, listener: (...data: Events[E]) => void): this
|
|
20
|
+
removeAllListeners<E extends keyof Events> (event?: E): this
|
|
21
|
+
removeListener<E extends keyof Events> (event: E, listener: (...data: Events[E]) => void): this
|
|
22
|
+
|
|
23
|
+
emit<E extends keyof Events> (event: E, ...args: Events[E]): boolean
|
|
24
|
+
// The sloppy `eventNames()` return type is to mitigate type incompatibilities - see #5
|
|
25
|
+
eventNames(): (keyof Events | string | symbol)[]
|
|
26
|
+
rawListeners<E extends keyof Events> (event: E): ((...data: Events[E]) => void)[]
|
|
27
|
+
listeners<E extends keyof Events> (event: E): ((...data: Events[E]) => void)[]
|
|
28
|
+
listenerCount<E extends keyof Events> (event: E): number
|
|
29
|
+
|
|
30
|
+
getMaxListeners (): number
|
|
31
|
+
setMaxListeners (maxListeners: number): this
|
|
32
|
+
}
|
package/src/common/logger.ts
CHANGED
|
@@ -13,13 +13,37 @@ export interface Logger {
|
|
|
13
13
|
error(...args: any[]): void;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
let logLevel: LogLevel = 'error';
|
|
17
|
+
const loggers = new Map<string, Logger>();
|
|
18
|
+
let target: Logger | null = {
|
|
19
|
+
// eslint-disable-next-line no-console
|
|
20
|
+
trace: (...args: any[]) => console.log(...args),
|
|
21
|
+
// eslint-disable-next-line no-console
|
|
22
|
+
debug: (...args: any[]) => console.log(...args),
|
|
23
|
+
// eslint-disable-next-line no-console
|
|
24
|
+
info: (...args: any[]) => console.log(...args),
|
|
25
|
+
// eslint-disable-next-line no-console
|
|
26
|
+
warn: (...args: any[]) => console.warn(...args),
|
|
27
|
+
// eslint-disable-next-line no-console
|
|
28
|
+
error: (...args: any[]) => console.error(...args),
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export function setLogLevel(level: LogLevel) {
|
|
32
|
+
logLevel = level;
|
|
33
|
+
const moduleNames = Array.from(loggers.keys());
|
|
34
|
+
|
|
35
|
+
loggers.clear();
|
|
36
|
+
|
|
37
|
+
moduleNames.forEach((moduleName) => createLogger(moduleName));
|
|
20
38
|
}
|
|
21
39
|
|
|
22
|
-
export
|
|
40
|
+
export const getLogLevel = () => {
|
|
41
|
+
return logLevel;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export function forwardLogsTo(logger: Logger | null) {
|
|
45
|
+
target = logger;
|
|
46
|
+
}
|
|
23
47
|
|
|
24
48
|
const COLORS = {
|
|
25
49
|
black: '\x1b[30m',
|
|
@@ -33,162 +57,35 @@ const COLORS = {
|
|
|
33
57
|
default: '\x1b[39m',
|
|
34
58
|
};
|
|
35
59
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const error = (...args: any[]) => {
|
|
63
|
-
/* eslint-disable no-debugger, no-console */
|
|
64
|
-
console.error(...args);
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
return {
|
|
68
|
-
trace,
|
|
69
|
-
debug,
|
|
70
|
-
info,
|
|
71
|
-
warn,
|
|
72
|
-
error,
|
|
73
|
-
};
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const wrapLogger = (logger: Logger, moduleName: string, logLevel?: LogLevel) => {
|
|
78
|
-
|
|
79
|
-
let isTrace = false;
|
|
80
|
-
let isDebug = false;
|
|
81
|
-
let isInfo = false;
|
|
82
|
-
let isWarning = false;
|
|
83
|
-
let isError = false;
|
|
84
|
-
|
|
85
|
-
let _level = logLevel;
|
|
86
|
-
let _logger = logger;
|
|
87
|
-
const tracePrefix = `${COLORS.magenta}[TRACE]${COLORS.default} ${moduleName}`;
|
|
88
|
-
const debugPrefix = `${COLORS.cyan}[DEBUG]${COLORS.default} ${moduleName}`;
|
|
89
|
-
const infoPrefix = `${COLORS.green}[INFO]${COLORS.default} ${moduleName}`;
|
|
90
|
-
const warnPrefix = `${COLORS.yellow}[WARN]${COLORS.default} ${moduleName}`;
|
|
91
|
-
const errorPrefix = `${COLORS.red}[ERROR]${COLORS.default} ${moduleName}`;
|
|
92
|
-
|
|
93
|
-
const result = new class implements WrappedLogger {
|
|
94
|
-
public init() {
|
|
95
|
-
isTrace = [ 'trace' ].includes(_level ?? defaultLevel);
|
|
96
|
-
isDebug = [ 'trace', 'debug' ].includes(_level ?? defaultLevel);
|
|
97
|
-
isInfo = [ 'trace', 'debug', 'info' ].includes(_level ?? defaultLevel);
|
|
98
|
-
isWarning = [ 'trace', 'debug', 'info', 'warn' ].includes(_level ?? defaultLevel);
|
|
99
|
-
isError = [ 'trace', 'debug', 'info', 'warn', 'error' ].includes(_level ?? defaultLevel);
|
|
100
|
-
}
|
|
101
|
-
public get logger() {
|
|
102
|
-
return _logger;
|
|
103
|
-
}
|
|
104
|
-
public set logger(value: Logger) {
|
|
105
|
-
_logger = value;
|
|
106
|
-
}
|
|
107
|
-
public get level(): LogLevel | undefined {
|
|
108
|
-
return _level;
|
|
109
|
-
}
|
|
110
|
-
public set level(value: LogLevel | undefined) {
|
|
111
|
-
_level = value;
|
|
112
|
-
}
|
|
113
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
114
|
-
trace(...args: any[]): void {
|
|
115
|
-
if (isTrace) {
|
|
116
|
-
const elapsedInMs = `${COLORS.magenta}+${Date.now() - created}ms${COLORS.default}`;
|
|
117
|
-
|
|
118
|
-
logger.trace(tracePrefix, ...args, elapsedInMs);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
122
|
-
debug(...args: any[]): void {
|
|
123
|
-
if (isDebug) {
|
|
124
|
-
const elapsedInMs = `${COLORS.magenta}+${Date.now() - created}ms${COLORS.default}`;
|
|
125
|
-
|
|
126
|
-
logger.debug(debugPrefix, ...args, elapsedInMs);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
130
|
-
info(...args: any[]): void {
|
|
131
|
-
if (isInfo) {
|
|
132
|
-
const elapsedInMs = `${COLORS.magenta}+${Date.now() - created}ms${COLORS.default}`;
|
|
133
|
-
|
|
134
|
-
logger.info(infoPrefix, ...args, elapsedInMs);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
138
|
-
warn(...args: any[]): void {
|
|
139
|
-
if (isWarning) {
|
|
140
|
-
const elapsedInMs = `${COLORS.magenta}+${Date.now() - created}ms${COLORS.default}`;
|
|
141
|
-
|
|
142
|
-
logger.warn(warnPrefix, ...args, elapsedInMs);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
146
|
-
error(...args: any[]): void {
|
|
147
|
-
if (isError) {
|
|
148
|
-
const elapsedInMs = `${COLORS.magenta}+${Date.now() - created}ms${COLORS.default}`;
|
|
149
|
-
|
|
150
|
-
logger.error(errorPrefix, ...args, elapsedInMs);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
}
|
|
60
|
+
export function createLogger(moduleName: string): Logger {
|
|
61
|
+
if (loggers.has(moduleName)) {
|
|
62
|
+
// eslint-disable-next-line no-console
|
|
63
|
+
console.warn(`Logger for module ${moduleName} already exists`);
|
|
64
|
+
}
|
|
65
|
+
const trace = logLevel === 'trace' ? (message: string, ...args: any[]) => {
|
|
66
|
+
target?.trace(`${COLORS.magenta}[TRACE]${COLORS.default} ${moduleName} ${message}`, ...args);
|
|
67
|
+
} : () => void 0;
|
|
68
|
+
const debug = logLevel === 'trace' || logLevel === 'debug' ? (message: string, ...args: any[]) => {
|
|
69
|
+
target?.debug(`${COLORS.cyan}[DEBUG]${COLORS.default} ${moduleName} ${message}`, ...args);
|
|
70
|
+
} : () => void 0;
|
|
71
|
+
const info = logLevel === 'trace' || logLevel === 'debug' || logLevel === 'info' ? (message: string, ...args: any[]) => {
|
|
72
|
+
target?.info(`${COLORS.green}[INFO]${COLORS.default} ${moduleName} ${message}`, ...args);
|
|
73
|
+
} : () => void 0;
|
|
74
|
+
const warn = logLevel === 'trace' || logLevel === 'debug' || logLevel === 'info' || logLevel === 'warn' ? (message: string, ...args: any[]) => {
|
|
75
|
+
target?.warn(`${COLORS.yellow}[WARN]${COLORS.default} ${moduleName} ${message}`, ...args);
|
|
76
|
+
} : () => void 0;
|
|
77
|
+
const error = logLevel === 'trace' || logLevel === 'debug' || logLevel === 'info' || logLevel === 'warn' || logLevel === 'error' ? (message: string, ...args: any[]) => {
|
|
78
|
+
target?.error(`${COLORS.red}[ERROR]${COLORS.default} ${moduleName} ${message}`, ...args);
|
|
79
|
+
} : () => void 0;
|
|
80
|
+
const logger = {
|
|
81
|
+
trace,
|
|
82
|
+
debug,
|
|
83
|
+
info,
|
|
84
|
+
warn,
|
|
85
|
+
error,
|
|
154
86
|
};
|
|
155
|
-
|
|
156
|
-
return result;
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
let actualLoggerFactory: LoggerFactory = createDefaultLoggerFactory();
|
|
160
|
-
const loggers = new Map<string, WrappedLogger>();
|
|
161
87
|
|
|
162
|
-
|
|
163
|
-
let wrappedLogger = loggers.get(moduleName);
|
|
164
|
-
|
|
165
|
-
if (!wrappedLogger) {
|
|
166
|
-
const logger = actualLoggerFactory();
|
|
167
|
-
|
|
168
|
-
wrappedLogger = wrapLogger(logger, moduleName, logLevel ?? defaultLevel);
|
|
169
|
-
loggers.set(moduleName, wrappedLogger);
|
|
170
|
-
} else {
|
|
171
|
-
wrappedLogger.level = logLevel ?? defaultLevel;
|
|
172
|
-
}
|
|
173
|
-
wrappedLogger.init();
|
|
88
|
+
loggers.set(moduleName, logger);
|
|
174
89
|
|
|
175
|
-
return
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
export const setLogLevel = (level: LogLevel) => {
|
|
179
|
-
defaultLevel = level;
|
|
180
|
-
for (const [ moduleName ] of Array.from(loggers.entries())) {
|
|
181
|
-
loggers.set(moduleName, createLogger(moduleName, level));
|
|
182
|
-
}
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
export const setLoggerFactory = (loggerFactory: LoggerFactory) => {
|
|
186
|
-
actualLoggerFactory = loggerFactory;
|
|
187
|
-
for (const [ moduleName, logger ] of Array.from(loggers.entries())) {
|
|
188
|
-
loggers.set(moduleName, createLogger(moduleName, logger.level));
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
export const getLogLevel = () => {
|
|
193
|
-
return defaultLevel;
|
|
194
|
-
};
|
|
90
|
+
return logger;
|
|
91
|
+
}
|
package/src/common/types.ts
CHANGED
|
@@ -18,23 +18,11 @@ import {
|
|
|
18
18
|
SfuSctpStreamReport,
|
|
19
19
|
SFUTransportReport,
|
|
20
20
|
} from '@observertc/report-schemas-js';
|
|
21
|
-
import { ObservedCalls } from '../samples/ObservedCalls';
|
|
22
|
-
import { ReportsCollector } from './ReportsCollector';
|
|
23
21
|
import * as Models from '../models/Models';
|
|
24
22
|
import { StorageProvider } from '../storages/StorageProvider';
|
|
25
23
|
import { Message } from '@bufbuild/protobuf';
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
export type ObserverReport =
|
|
30
|
-
| CallEventReport
|
|
31
|
-
| CallMetaReport
|
|
32
|
-
| ClientExtensionReport
|
|
33
|
-
| PeerConnectionTransportReport
|
|
34
|
-
| InboundAudioTrackReport
|
|
35
|
-
| InboundVideoTrackReport
|
|
36
|
-
| OutboundAudioTrackReport
|
|
37
|
-
| OutboundVideoTrackReport;
|
|
24
|
+
|
|
25
|
+
export type MediaKind = 'audio' | 'video';
|
|
38
26
|
|
|
39
27
|
export interface EvaluatorContext {
|
|
40
28
|
readonly startedCallIds: string[];
|
|
@@ -97,18 +85,12 @@ export interface EvaluatorContext {
|
|
|
97
85
|
closed: number;
|
|
98
86
|
})[];
|
|
99
87
|
|
|
100
|
-
readonly observedCalls: ObservedCalls;
|
|
101
|
-
readonly observedSfus: ObservedSfus;
|
|
102
88
|
readonly storages: StorageProvider;
|
|
103
|
-
readonly reports:
|
|
89
|
+
readonly reports: ObserverSinkContext;
|
|
104
90
|
|
|
105
|
-
readonly clientExtensionStats: ClientExtensionReport[],
|
|
106
|
-
readonly callEvents: CallEventReport[],
|
|
107
|
-
readonly sfuEvents: SfuEventReport[],
|
|
108
|
-
readonly sfuExtensionStats: SfuExtensionReport[],
|
|
109
91
|
}
|
|
110
92
|
|
|
111
|
-
export type EvaluatorMiddleware = Middleware<EvaluatorContext>;
|
|
93
|
+
// export type EvaluatorMiddleware = Middleware<EvaluatorContext>;
|
|
112
94
|
|
|
113
95
|
export interface ObserverSinkContext {
|
|
114
96
|
readonly callEventReports: CallEventReport[];
|
|
@@ -130,5 +112,3 @@ export interface ObserverSinkContext {
|
|
|
130
112
|
readonly sfuTransportReports: SFUTransportReport[];
|
|
131
113
|
readonly sfuMetaReports: SfuMetaReport[];
|
|
132
114
|
}
|
|
133
|
-
|
|
134
|
-
export type ObserverSinkMiddleware = Middleware<ObserverSinkContext>;
|