@observertc/observer-js 0.40.12 → 0.40.14
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/ObservedClient.d.ts +2 -7
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +38 -7
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/monitors/CallSummary.d.ts +11 -1
- package/lib/monitors/CallSummary.d.ts.map +1 -1
- package/lib/monitors/CallSummaryMonitor.d.ts.map +1 -1
- package/lib/monitors/CallSummaryMonitor.js +9 -5
- package/package.json +1 -1
- package/src/ObservedClient.ts +40 -15
- package/src/index.ts +1 -1
- package/src/monitors/CallSummary.ts +11 -1
- package/src/monitors/CallSummaryMonitor.ts +14 -10
package/lib/ObservedClient.d.ts
CHANGED
|
@@ -4,13 +4,7 @@ import { ObservedCall } from './ObservedCall';
|
|
|
4
4
|
import { EventEmitter } from 'events';
|
|
5
5
|
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
6
6
|
import { ObservedSfu } from './ObservedSfu';
|
|
7
|
-
|
|
8
|
-
severity: 'critical' | 'major' | 'minor';
|
|
9
|
-
timestamp: number;
|
|
10
|
-
description?: string;
|
|
11
|
-
peerConnectionId?: string;
|
|
12
|
-
trackId?: string;
|
|
13
|
-
}
|
|
7
|
+
import { ClientIssue } from './monitors/CallSummary';
|
|
14
8
|
export type ObservedClientModel = {
|
|
15
9
|
clientId: string;
|
|
16
10
|
mediaUnitId: string;
|
|
@@ -130,6 +124,7 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
|
|
|
130
124
|
get closed(): boolean;
|
|
131
125
|
get peerConnections(): ReadonlyMap<string, ObservedPeerConnection>;
|
|
132
126
|
close(): void;
|
|
127
|
+
addIssue(issue: ClientIssue): void;
|
|
133
128
|
accept(sample: ClientSample): void;
|
|
134
129
|
private _createPeerConnection;
|
|
135
130
|
private _addClientLeftReport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAChJ,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAOlE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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"}
|
package/lib/ObservedClient.js
CHANGED
|
@@ -133,6 +133,30 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
133
133
|
Array.from(this._peerConnections.values()).forEach((peerConnection) => peerConnection.close());
|
|
134
134
|
this.emit('close');
|
|
135
135
|
}
|
|
136
|
+
addIssue(issue) {
|
|
137
|
+
var _a;
|
|
138
|
+
try {
|
|
139
|
+
this.reports.addCallEventReport({
|
|
140
|
+
serviceId: this.serviceId,
|
|
141
|
+
mediaUnitId: this.mediaUnitId,
|
|
142
|
+
roomId: this.roomId,
|
|
143
|
+
callId: this.callId,
|
|
144
|
+
clientId: this.clientId,
|
|
145
|
+
userId: this.userId,
|
|
146
|
+
name: CallEventType_1.CallEventType.CLIENT_ISSUE,
|
|
147
|
+
value: issue.severity,
|
|
148
|
+
peerConnectionId: issue.peerConnectionId,
|
|
149
|
+
mediaTrackId: issue.trackId,
|
|
150
|
+
message: issue.description,
|
|
151
|
+
timestamp: (_a = issue.timestamp) !== null && _a !== void 0 ? _a : Date.now(),
|
|
152
|
+
attachments: issue.attachments ? JSON.stringify(issue.attachments) : undefined,
|
|
153
|
+
});
|
|
154
|
+
this.emit('issue', issue);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
logger.warn(`Error adding client issue: ${err === null || err === void 0 ? void 0 : err.message}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
136
160
|
accept(sample) {
|
|
137
161
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20;
|
|
138
162
|
if (this._closed)
|
|
@@ -231,13 +255,20 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
231
255
|
}
|
|
232
256
|
case CallEventType_1.CallEventType.CLIENT_ISSUE: {
|
|
233
257
|
const severity = callEvent.value ? callEvent.value : 'minor';
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
258
|
+
try {
|
|
259
|
+
const issue = {
|
|
260
|
+
severity,
|
|
261
|
+
timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : Date.now(),
|
|
262
|
+
description: callEvent.message,
|
|
263
|
+
peerConnectionId: callEvent.peerConnectionId,
|
|
264
|
+
trackId: callEvent.mediaTrackId,
|
|
265
|
+
attachments: callEvent.attachments ? JSON.parse(callEvent.attachments) : undefined,
|
|
266
|
+
};
|
|
267
|
+
this.emit('issue', issue);
|
|
268
|
+
}
|
|
269
|
+
catch (err) {
|
|
270
|
+
logger.warn(`Error parsing client issue: ${err === null || err === void 0 ? void 0 : err.message}`);
|
|
271
|
+
}
|
|
241
272
|
}
|
|
242
273
|
}
|
|
243
274
|
this.reports.addCallEventReport(Object.assign({ serviceId: this.serviceId, mediaUnitId: this.mediaUnitId, roomId: this.roomId, callId: this.callId, clientId: this.clientId, userId: this.userId, timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : Date.now() }, callEvent));
|
package/lib/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export type { ObservedClient, ObservedClientModel } from './ObservedClient';
|
|
|
10
10
|
export type { ObservedPeerConnection, ObservedPeerConnectionModel, ObservedPeerConnectionEvents } from './ObservedPeerConnection';
|
|
11
11
|
export type { ObservedInboundTrack, ObservedInboundTrackModel, ObservedInboundTrackEvents } from './ObservedInboundTrack';
|
|
12
12
|
export type { ObservedOutboundTrack, ObservedOutboundTrackModel, ObservedOutboundTrackEvents } from './ObservedOutboundTrack';
|
|
13
|
+
export type { CallSummary, ClientSummary, ClientIssue } from './monitors/CallSummary';
|
|
13
14
|
export type { ObserverSinkContext } from './common/types';
|
|
14
15
|
import { Observer, ObserverConfig } from './Observer';
|
|
15
16
|
export declare function createObserver(config?: Partial<ObserverConfig>): Observer;
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAE9D,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAExD,YAAY,EACX,OAAO,EACP,YAAY,EACZ,SAAS,EACT,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,WAAW,GACX,MAAM,+BAA+B,CAAC;AAEvC,YAAY,EACX,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC7B,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,+BAA+B,CAAC;AAEvC,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,YAAY,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAClI,YAAY,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAC1H,YAAY,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAE9D,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAExD,YAAY,EACX,OAAO,EACP,YAAY,EACZ,SAAS,EACT,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,WAAW,GACX,MAAM,+BAA+B,CAAC;AAEvC,YAAY,EACX,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC7B,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,+BAA+B,CAAC;AAEvC,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,YAAY,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAClI,YAAY,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAC1H,YAAY,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC9H,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACtF,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtD,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,YAE9D;AAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAA8B,MAAM,iBAAiB,CAAC;AAC/E,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAG3D"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
export interface ClientIssue {
|
|
2
|
+
severity: 'critical' | 'major' | 'minor';
|
|
3
|
+
timestamp: number;
|
|
4
|
+
description?: string;
|
|
5
|
+
peerConnectionId?: string;
|
|
6
|
+
trackId?: string;
|
|
7
|
+
attachments?: Record<string, unknown>;
|
|
8
|
+
}
|
|
2
9
|
export interface ClientSummary {
|
|
3
10
|
clientId: string;
|
|
4
11
|
mediaUnitId: string;
|
|
@@ -20,6 +27,9 @@ export interface CallSummary {
|
|
|
20
27
|
callId: string;
|
|
21
28
|
started: number;
|
|
22
29
|
durationInMs: number;
|
|
30
|
+
maxNumberOfParticipants: number;
|
|
31
|
+
numberOfIssues: number;
|
|
32
|
+
highestSeverity?: ClientIssue['severity'];
|
|
23
33
|
clients: ClientSummary[];
|
|
24
34
|
}
|
|
25
35
|
//# sourceMappingURL=CallSummary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallSummary.d.ts","sourceRoot":"","sources":["../../src/monitors/CallSummary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CallSummary.d.ts","sourceRoot":"","sources":["../../src/monitors/CallSummary.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAC1C,OAAO,EAAE,aAAa,EAAE,CAAC;CACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallSummaryMonitor.d.ts","sourceRoot":"","sources":["../../src/monitors/CallSummaryMonitor.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"CallSummaryMonitor.d.ts","sourceRoot":"","sources":["../../src/monitors/CallSummaryMonitor.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,WAAW,EAA8B,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAK/C,MAAM,MAAM,wBAAwB,GAAG;IACtC,KAAK,EAAE,EAAE,CAAC;IACV,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;CACvB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACtC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,uCAAuC,CAAC,EAAE,OAAO,CAAC;CAClD,CAAA;AAED,MAAM,CAAC,OAAO,WAAW,kBAAkB;IAC1C,EAAE,CAAC,CAAC,SAAS,MAAM,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACvH,GAAG,CAAC,CAAC,SAAS,MAAM,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACxH,IAAI,CAAC,CAAC,SAAS,MAAM,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACzH,IAAI,CAAC,CAAC,SAAS,MAAM,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;CACxG;AAED,qBAAa,kBAAmB,SAAQ,YAAY;aAKlC,MAAM,EAAE,wBAAwB;IAJjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAE7D,OAAO,CAAC,OAAO,CAAS;gBAEP,MAAM,GAAE,wBAA6B;IAK/C,OAAO,CAAC,IAAI,EAAE,YAAY;IA8BjC,OAAO,CAAC,UAAU;IAsElB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,sBAAsB;IAmBvB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAU3D,IAAW,MAAM,YAEhB;IAEM,KAAK;CAMZ"}
|
|
@@ -20,12 +20,17 @@ class CallSummaryMonitor extends events_1.EventEmitter {
|
|
|
20
20
|
serviceId: call.serviceId,
|
|
21
21
|
clients: [],
|
|
22
22
|
durationInMs: 0,
|
|
23
|
+
maxNumberOfParticipants: 0,
|
|
24
|
+
numberOfIssues: 0,
|
|
23
25
|
started: call.created,
|
|
24
26
|
};
|
|
25
27
|
this._summaries.set(call.callId, callSummary);
|
|
26
28
|
}
|
|
27
29
|
const constCallSummary = callSummary;
|
|
28
|
-
const onNewClient = (client) =>
|
|
30
|
+
const onNewClient = (client) => {
|
|
31
|
+
constCallSummary.maxNumberOfParticipants = Math.max(constCallSummary.maxNumberOfParticipants, call.clients.size);
|
|
32
|
+
this._addClient(constCallSummary, client);
|
|
33
|
+
};
|
|
29
34
|
call.once('close', () => {
|
|
30
35
|
call.off('newclient', onNewClient);
|
|
31
36
|
});
|
|
@@ -58,14 +63,13 @@ class CallSummaryMonitor extends events_1.EventEmitter {
|
|
|
58
63
|
clientSummary.usedTurn || (clientSummary.usedTurn = usingTurn);
|
|
59
64
|
};
|
|
60
65
|
const onIssue = (issue) => {
|
|
66
|
+
++callSummary.numberOfIssues;
|
|
61
67
|
clientSummary.issues.push(issue);
|
|
62
68
|
};
|
|
63
69
|
const onUserMediaError = (error) => {
|
|
64
70
|
if (!this.config.detectUserMediaIssues)
|
|
65
71
|
return;
|
|
66
|
-
|
|
67
|
-
const alreadyDetected = clientSummary.issues.find((issue) => issue.severity === 'critical' && issue.description === error);
|
|
68
|
-
!alreadyDetected && clientSummary.issues.push({
|
|
72
|
+
client.addIssue({
|
|
69
73
|
severity: 'critical',
|
|
70
74
|
timestamp: Date.now(),
|
|
71
75
|
description: error,
|
|
@@ -103,7 +107,7 @@ class CallSummaryMonitor extends events_1.EventEmitter {
|
|
|
103
107
|
const onQualityLimitationChanged = (reason) => {
|
|
104
108
|
if (!this.config.detectMediaTrackQualityLimitationIssues)
|
|
105
109
|
return;
|
|
106
|
-
|
|
110
|
+
track.peerConnection.client.addIssue({
|
|
107
111
|
severity: 'minor',
|
|
108
112
|
timestamp: Date.now(),
|
|
109
113
|
description: reason,
|
package/package.json
CHANGED
package/src/ObservedClient.ts
CHANGED
|
@@ -9,17 +9,10 @@ import { isValidUuid } from './common/utils';
|
|
|
9
9
|
import { createClientLeftEventReport } from './common/callEventReports';
|
|
10
10
|
import { CallEventType } from './common/CallEventType';
|
|
11
11
|
import { ObservedSfu } from './ObservedSfu';
|
|
12
|
+
import { ClientIssue } from './monitors/CallSummary';
|
|
12
13
|
|
|
13
14
|
const logger = createLogger('ObservedClient');
|
|
14
15
|
|
|
15
|
-
export interface ClientIssue {
|
|
16
|
-
severity: 'critical' | 'major' | 'minor';
|
|
17
|
-
timestamp: number;
|
|
18
|
-
description?: string;
|
|
19
|
-
peerConnectionId?: string,
|
|
20
|
-
trackId?: string,
|
|
21
|
-
}
|
|
22
|
-
|
|
23
16
|
export type ObservedClientModel= {
|
|
24
17
|
clientId: string;
|
|
25
18
|
mediaUnitId: string;
|
|
@@ -220,6 +213,31 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
220
213
|
this.emit('close');
|
|
221
214
|
}
|
|
222
215
|
|
|
216
|
+
public addIssue(issue: ClientIssue) {
|
|
217
|
+
try {
|
|
218
|
+
this.reports.addCallEventReport({
|
|
219
|
+
serviceId: this.serviceId,
|
|
220
|
+
mediaUnitId: this.mediaUnitId,
|
|
221
|
+
roomId: this.roomId,
|
|
222
|
+
callId: this.callId,
|
|
223
|
+
clientId: this.clientId,
|
|
224
|
+
userId: this.userId,
|
|
225
|
+
|
|
226
|
+
name: CallEventType.CLIENT_ISSUE,
|
|
227
|
+
value: issue.severity,
|
|
228
|
+
peerConnectionId: issue.peerConnectionId,
|
|
229
|
+
mediaTrackId: issue.trackId,
|
|
230
|
+
message: issue.description,
|
|
231
|
+
timestamp: issue.timestamp ?? Date.now(),
|
|
232
|
+
attachments: issue.attachments ? JSON.stringify(issue.attachments): undefined,
|
|
233
|
+
});
|
|
234
|
+
this.emit('issue', issue);
|
|
235
|
+
} catch (err) {
|
|
236
|
+
logger.warn(`Error adding client issue: ${(err as Error)?.message}`);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
}
|
|
240
|
+
|
|
223
241
|
public accept(sample: ClientSample): void {
|
|
224
242
|
if (this._closed) throw new Error(`Client ${this.clientId} is closed`);
|
|
225
243
|
if (sample.clientId && sample.clientId !== 'NULL' && sample.clientId !== this.clientId) {
|
|
@@ -405,13 +423,20 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
405
423
|
case CallEventType.CLIENT_ISSUE: {
|
|
406
424
|
const severity = callEvent.value ? callEvent.value as ClientIssue['severity'] : 'minor';
|
|
407
425
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
426
|
+
try {
|
|
427
|
+
const issue: ClientIssue = {
|
|
428
|
+
severity,
|
|
429
|
+
timestamp: timestamp ?? Date.now(),
|
|
430
|
+
description: callEvent.message,
|
|
431
|
+
peerConnectionId: callEvent.peerConnectionId,
|
|
432
|
+
trackId: callEvent.mediaTrackId,
|
|
433
|
+
attachments: callEvent.attachments ? JSON.parse(callEvent.attachments) : undefined,
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
this.emit('issue', issue);
|
|
437
|
+
} catch (err) {
|
|
438
|
+
logger.warn(`Error parsing client issue: ${(err as Error)?.message}`);
|
|
439
|
+
}
|
|
415
440
|
}
|
|
416
441
|
}
|
|
417
442
|
this.reports.addCallEventReport({
|
package/src/index.ts
CHANGED
|
@@ -57,7 +57,7 @@ export type { ObservedClient, ObservedClientModel } from './ObservedClient';
|
|
|
57
57
|
export type { ObservedPeerConnection, ObservedPeerConnectionModel, ObservedPeerConnectionEvents } from './ObservedPeerConnection';
|
|
58
58
|
export type { ObservedInboundTrack, ObservedInboundTrackModel, ObservedInboundTrackEvents } from './ObservedInboundTrack';
|
|
59
59
|
export type { ObservedOutboundTrack, ObservedOutboundTrackModel, ObservedOutboundTrackEvents } from './ObservedOutboundTrack';
|
|
60
|
-
|
|
60
|
+
export type { CallSummary, ClientSummary, ClientIssue } from './monitors/CallSummary';
|
|
61
61
|
export type { ObserverSinkContext } from './common/types';
|
|
62
62
|
|
|
63
63
|
import { Observer, ObserverConfig } from './Observer';
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
export interface ClientIssue {
|
|
2
|
+
severity: 'critical' | 'major' | 'minor';
|
|
3
|
+
timestamp: number;
|
|
4
|
+
description?: string;
|
|
5
|
+
peerConnectionId?: string,
|
|
6
|
+
trackId?: string,
|
|
7
|
+
attachments?: Record<string, unknown>,
|
|
8
|
+
}
|
|
2
9
|
|
|
3
10
|
export interface ClientSummary {
|
|
4
11
|
clientId: string;
|
|
@@ -22,5 +29,8 @@ export interface CallSummary {
|
|
|
22
29
|
callId: string;
|
|
23
30
|
started: number;
|
|
24
31
|
durationInMs: number;
|
|
32
|
+
maxNumberOfParticipants: number;
|
|
33
|
+
numberOfIssues: number;
|
|
34
|
+
highestSeverity?: ClientIssue['severity'],
|
|
25
35
|
clients: ClientSummary[];
|
|
26
36
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
|
-
import { CallSummary, ClientSummary } from './CallSummary';
|
|
2
|
+
import { CallSummary, ClientIssue, ClientSummary } from './CallSummary';
|
|
3
3
|
import { ObservedCall } from '../ObservedCall';
|
|
4
|
-
import {
|
|
4
|
+
import { ObservedClient } from '../ObservedClient';
|
|
5
5
|
import { ObservedOutboundTrack } from '../ObservedOutboundTrack';
|
|
6
6
|
import { ObservedPeerConnection } from '../ObservedPeerConnection';
|
|
7
7
|
|
|
@@ -35,7 +35,7 @@ export class CallSummaryMonitor extends EventEmitter {
|
|
|
35
35
|
public addCall(call: ObservedCall) {
|
|
36
36
|
if (this.closed) return;
|
|
37
37
|
|
|
38
|
-
let callSummary = this._summaries.get(call.callId);
|
|
38
|
+
let callSummary: CallSummary | undefined = this._summaries.get(call.callId);
|
|
39
39
|
|
|
40
40
|
if (!callSummary) {
|
|
41
41
|
callSummary = {
|
|
@@ -44,12 +44,17 @@ export class CallSummaryMonitor extends EventEmitter {
|
|
|
44
44
|
serviceId: call.serviceId,
|
|
45
45
|
clients: [],
|
|
46
46
|
durationInMs: 0,
|
|
47
|
+
maxNumberOfParticipants: 0,
|
|
48
|
+
numberOfIssues: 0,
|
|
47
49
|
started: call.created,
|
|
48
50
|
};
|
|
49
51
|
this._summaries.set(call.callId, callSummary);
|
|
50
52
|
}
|
|
51
53
|
const constCallSummary = callSummary;
|
|
52
|
-
const onNewClient = (client: ObservedClient) =>
|
|
54
|
+
const onNewClient = (client: ObservedClient) => {
|
|
55
|
+
constCallSummary.maxNumberOfParticipants = Math.max(constCallSummary.maxNumberOfParticipants, call.clients.size);
|
|
56
|
+
this._addClient(constCallSummary, client);
|
|
57
|
+
};
|
|
53
58
|
|
|
54
59
|
call.once('close', () => {
|
|
55
60
|
call.off('newclient', onNewClient);
|
|
@@ -87,16 +92,15 @@ export class CallSummaryMonitor extends EventEmitter {
|
|
|
87
92
|
};
|
|
88
93
|
|
|
89
94
|
const onIssue = (issue: ClientIssue) => {
|
|
95
|
+
++callSummary.numberOfIssues;
|
|
90
96
|
clientSummary.issues.push(issue);
|
|
97
|
+
|
|
91
98
|
};
|
|
92
99
|
|
|
93
100
|
const onUserMediaError = (error: string) => {
|
|
94
101
|
if (!this.config.detectUserMediaIssues) return;
|
|
95
102
|
|
|
96
|
-
|
|
97
|
-
const alreadyDetected = clientSummary.issues.find((issue) => issue.severity === 'critical' && issue.description === error);
|
|
98
|
-
|
|
99
|
-
!alreadyDetected && clientSummary.issues.push({
|
|
103
|
+
client.addIssue({
|
|
100
104
|
severity: 'critical',
|
|
101
105
|
timestamp: Date.now(),
|
|
102
106
|
description: error,
|
|
@@ -140,8 +144,8 @@ export class CallSummaryMonitor extends EventEmitter {
|
|
|
140
144
|
private _addOutboundVideoTrack(clientSummary: ClientSummary, track: ObservedOutboundTrack<'video'>) {
|
|
141
145
|
const onQualityLimitationChanged = (reason: string) => {
|
|
142
146
|
if (!this.config.detectMediaTrackQualityLimitationIssues) return;
|
|
143
|
-
|
|
144
|
-
|
|
147
|
+
|
|
148
|
+
track.peerConnection.client.addIssue({
|
|
145
149
|
severity: 'minor',
|
|
146
150
|
timestamp: Date.now(),
|
|
147
151
|
description: reason,
|