@observertc/client-monitor-js 1.1.0 → 1.2.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/CHANGELOG.md +13 -1
- package/README.md +43 -0
- package/lib/Accumulator.d.ts +16 -0
- package/lib/Accumulator.d.ts.map +1 -1
- package/lib/Accumulator.js +10 -1
- package/lib/ClientDevices.d.ts +10 -0
- package/lib/ClientDevices.d.ts.map +1 -1
- package/lib/ClientDevices.js +58 -14
- package/lib/ClientMonitor.d.ts +8 -2
- package/lib/ClientMonitor.d.ts.map +1 -1
- package/lib/ClientMonitorImpl.d.ts +2 -1
- package/lib/ClientMonitorImpl.d.ts.map +1 -1
- package/lib/ClientMonitorImpl.js +25 -11
- package/lib/Sampler.d.ts +4 -0
- package/lib/Sampler.d.ts.map +1 -1
- package/lib/Sampler.js +8 -2
- package/lib/entries/PeerConnectionEntryImpl.d.ts +2 -0
- package/lib/entries/PeerConnectionEntryImpl.d.ts.map +1 -1
- package/lib/entries/PeerConnectionEntryImpl.js +4 -0
- package/lib/entries/StatsStorage.d.ts +5 -0
- package/lib/entries/StatsStorage.d.ts.map +1 -1
- package/lib/entries/StatsStorage.js +11 -0
- package/lib/utils/StatsVisitor.d.ts +9 -0
- package/lib/utils/StatsVisitor.d.ts.map +1 -1
- package/lib/utils/StatsVisitor.js +16 -0
- package/lib/utils/Timer.d.ts +6 -2
- package/lib/utils/Timer.d.ts.map +1 -1
- package/lib/utils/Timer.js +70 -88
- package/package.json +2 -2
- package/src/Accumulator.ts +30 -1
- package/src/ClientDevices.ts +69 -11
- package/src/ClientMonitor.ts +9 -2
- package/src/ClientMonitorImpl.ts +27 -13
- package/src/Sampler.ts +13 -2
- package/src/entries/PeerConnectionEntryImpl.ts +8 -2
- package/src/entries/StatsStorage.ts +16 -0
- package/src/utils/StatsVisitor.ts +26 -0
- package/src/utils/Timer.ts +76 -90
- package/tests/utils/Timer.spec.ts +26 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
|
+
## 1.2.0
|
|
2
|
+
* Make timer tick based instead of calculated next delays
|
|
3
|
+
* Be able to collect samples if sender is not available
|
|
4
|
+
* add maxSamples config option to accumulator
|
|
5
|
+
|
|
6
|
+
## 1.1.0
|
|
7
|
+
* Fix continous media source meta sending due to constantly changing `audioLevel`
|
|
8
|
+
* add ice-candidate-pairs according to schema changes in 2.1.0^
|
|
9
|
+
* align peer-connection-transport changes according to schema changes in 2.1.0^
|
|
10
|
+
* make id navigational alterations in PeerConnectionImpl related to the webrtc schema changes
|
|
11
|
+
* run prettier
|
|
12
|
+
|
|
1
13
|
## 1.0.1
|
|
2
14
|
|
|
3
15
|
* Add validation for extension stats to check if the given payload is a valid json string or not.
|
|
4
16
|
|
|
5
17
|
## 1.0.0
|
|
6
18
|
|
|
7
|
-
Init
|
|
19
|
+
Init
|
package/README.md
CHANGED
|
@@ -570,6 +570,14 @@ const config = {
|
|
|
570
570
|
*/
|
|
571
571
|
statsExpirationTimeInMs: 60000,
|
|
572
572
|
|
|
573
|
+
/**
|
|
574
|
+
* By setting this flag to true the samples are buffered even if no sender is available.
|
|
575
|
+
* This is useful if the sender is set later than the monitor is created, so no samples will be lost.
|
|
576
|
+
*
|
|
577
|
+
* DEFAULT: true
|
|
578
|
+
*/
|
|
579
|
+
bufferingSamples: true;
|
|
580
|
+
|
|
573
581
|
/**
|
|
574
582
|
* Collector Component related configurations
|
|
575
583
|
*
|
|
@@ -640,6 +648,13 @@ const config = {
|
|
|
640
648
|
* DEFAULT: true
|
|
641
649
|
*/
|
|
642
650
|
incrementalSampling: true,
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* Indicate if the sampler should use the timestamp provided by the rtcstats (the minimum of the peer connection stats will be used as the timestamp of the sample)
|
|
654
|
+
*
|
|
655
|
+
* DEFAULT: true
|
|
656
|
+
*/
|
|
657
|
+
useStatsSample: true,
|
|
643
658
|
},
|
|
644
659
|
/**
|
|
645
660
|
* Configure the sender component.
|
|
@@ -673,6 +688,34 @@ const config = {
|
|
|
673
688
|
*/
|
|
674
689
|
maxRetries: 1,
|
|
675
690
|
}
|
|
691
|
+
},
|
|
692
|
+
|
|
693
|
+
/**
|
|
694
|
+
* Configuration for the samples accumulator to balance the transfer the size of the Samples
|
|
695
|
+
* prepared to be sent to the server
|
|
696
|
+
*
|
|
697
|
+
*/
|
|
698
|
+
accumulator: {
|
|
699
|
+
/**
|
|
700
|
+
* Sets the maximum number of client sample allowed to be in one Sample
|
|
701
|
+
*
|
|
702
|
+
* DEFAULT: 100
|
|
703
|
+
*/
|
|
704
|
+
maxClientSamples: 100,
|
|
705
|
+
|
|
706
|
+
/**
|
|
707
|
+
* Sets the maximum number of Samples the accumulator can hold
|
|
708
|
+
*
|
|
709
|
+
* DEFAULT: 10
|
|
710
|
+
*/
|
|
711
|
+
maxSamples: 10,
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* Forward a Sample to the server even if it is empty
|
|
715
|
+
*
|
|
716
|
+
* DEFAULT: false
|
|
717
|
+
*/
|
|
718
|
+
forwardIfEmpty: false
|
|
676
719
|
}
|
|
677
720
|
};
|
|
678
721
|
```
|
package/lib/Accumulator.d.ts
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import { ClientSample, Samples } from "@observertc/monitor-schemas";
|
|
2
2
|
export declare type AccumulatorConfig = {
|
|
3
|
+
/**
|
|
4
|
+
* Sets the maximum number of client sample allowed to be in one Sample
|
|
5
|
+
*
|
|
6
|
+
* DEFAULT: 100
|
|
7
|
+
*/
|
|
3
8
|
maxClientSamples?: number;
|
|
9
|
+
/**
|
|
10
|
+
* Sets the maximum number of Samples the accumulator can hold
|
|
11
|
+
*
|
|
12
|
+
* DEFAULT: 10
|
|
13
|
+
*/
|
|
14
|
+
maxSamples?: number;
|
|
15
|
+
/**
|
|
16
|
+
* Forward a Sample to the server even if it is empty
|
|
17
|
+
*
|
|
18
|
+
* DEFAULT: false
|
|
19
|
+
*/
|
|
4
20
|
forwardIfEmpty?: boolean;
|
|
5
21
|
};
|
|
6
22
|
export declare type SamplesListener = (samples?: Samples) => void;
|
package/lib/Accumulator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accumulator.d.ts","sourceRoot":"","sources":["../src/Accumulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"Accumulator.d.ts","sourceRoot":"","sources":["../src/Accumulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKpE,oBAAY,iBAAiB,GAAG;IAC5B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAWF,oBAAY,eAAe,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE1D,qBAAa,WAAW;WACN,MAAM,CAAC,MAAM,CAAC,EAAE,iBAAiB;IAM/C,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAoB;gBAChB,MAAM,EAAE,iBAAiB;IAI5C,IAAW,OAAO,IAAI,OAAO,CAE5B;IAEM,OAAO,CAAC,QAAQ,EAAE,eAAe;IAejC,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAaxD,OAAO,CAAC,UAAU;CAYrB"}
|
package/lib/Accumulator.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Accumulator = void 0;
|
|
4
|
+
const logger_1 = require("./utils/logger");
|
|
5
|
+
const logger = (0, logger_1.createLogger)("Accumulator");
|
|
4
6
|
const supplyDefaultConfig = () => {
|
|
5
7
|
const defaultConfig = {
|
|
8
|
+
maxClientSamples: 100,
|
|
9
|
+
maxSamples: 10,
|
|
6
10
|
forwardIfEmpty: false,
|
|
7
11
|
};
|
|
8
12
|
return defaultConfig;
|
|
@@ -44,7 +48,7 @@ class Accumulator {
|
|
|
44
48
|
}
|
|
45
49
|
clientSamples.push(clientSample);
|
|
46
50
|
this._empty = false;
|
|
47
|
-
if (this._config.maxClientSamples &&
|
|
51
|
+
if (this._config.maxClientSamples && this._config.maxClientSamples <= clientSamples.length) {
|
|
48
52
|
this._buffering();
|
|
49
53
|
}
|
|
50
54
|
}
|
|
@@ -52,6 +56,11 @@ class Accumulator {
|
|
|
52
56
|
if (this._empty)
|
|
53
57
|
return;
|
|
54
58
|
this._buffer.push(this._samples);
|
|
59
|
+
while (this._config.maxSamples && this._config.maxSamples < this._buffer.length) {
|
|
60
|
+
const removedSamples = this._buffer.shift();
|
|
61
|
+
logger.warn(`Sample is removed from the accumulator buffer due to its limitation:
|
|
62
|
+
(maxSamples: ${this._config.maxSamples}, maxClientSample in one sample: ${this._config.maxClientSamples})`, removedSamples);
|
|
63
|
+
}
|
|
55
64
|
this._samples = {};
|
|
56
65
|
this._empty = true;
|
|
57
66
|
}
|
package/lib/ClientDevices.d.ts
CHANGED
|
@@ -4,10 +4,20 @@ export declare class ClientDevices {
|
|
|
4
4
|
private _browser;
|
|
5
5
|
private _platform;
|
|
6
6
|
private _engine;
|
|
7
|
+
private _warned;
|
|
8
|
+
private _actualHashes?;
|
|
9
|
+
private _pivotHashes?;
|
|
7
10
|
constructor();
|
|
11
|
+
collect(): void;
|
|
8
12
|
get os(): OperationSystem;
|
|
9
13
|
get browser(): Browser;
|
|
10
14
|
get platform(): Platform;
|
|
11
15
|
get engine(): Engine;
|
|
16
|
+
get isOsChanged(): boolean;
|
|
17
|
+
get isBrowserChanged(): boolean;
|
|
18
|
+
get isPlatformChanged(): boolean;
|
|
19
|
+
get isEngineChanged(): boolean;
|
|
20
|
+
get changed(): boolean;
|
|
21
|
+
pivot(): void;
|
|
12
22
|
}
|
|
13
23
|
//# sourceMappingURL=ClientDevices.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientDevices.d.ts","sourceRoot":"","sources":["../src/ClientDevices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"ClientDevices.d.ts","sourceRoot":"","sources":["../src/ClientDevices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAoCzF,qBAAa,aAAa;IACtB,OAAO,CAAC,GAAG,CAA+B;IAC1C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAS;;IAMvB,OAAO;IAyBd,IAAW,EAAE,IAAI,eAAe,CAE/B;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,QAAQ,IAAI,QAAQ,CAE9B;IAED,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,IAAW,gBAAgB,IAAI,OAAO,CAErC;IAED,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IAED,IAAW,eAAe,IAAI,OAAO,CAEpC;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAEM,KAAK,IAAI,IAAI;CAKvB"}
|
package/lib/ClientDevices.js
CHANGED
|
@@ -25,6 +25,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.ClientDevices = void 0;
|
|
27
27
|
const Bowser = __importStar(require("bowser"));
|
|
28
|
+
const logger_1 = require("./utils/logger");
|
|
29
|
+
const hash_1 = require("./utils/hash");
|
|
30
|
+
// import * as proto from "./ProtobufSamples"
|
|
31
|
+
const logger = (0, logger_1.createLogger)("ClientDevices");
|
|
28
32
|
const UNKNOWN_OS = {
|
|
29
33
|
name: "Unkown",
|
|
30
34
|
version: undefined,
|
|
@@ -49,20 +53,36 @@ class ClientDevices {
|
|
|
49
53
|
this._browser = UNKNOWN_BROWSER;
|
|
50
54
|
this._platform = UNKNOWN_PLATFORM;
|
|
51
55
|
this._engine = UNKNOWN_ENGINE;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
56
|
+
this._warned = false;
|
|
57
|
+
this.collect();
|
|
58
|
+
}
|
|
59
|
+
collect() {
|
|
60
|
+
try {
|
|
61
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
62
|
+
let outerNavigator = undefined;
|
|
63
|
+
if (navigator !== undefined)
|
|
64
|
+
outerNavigator = navigator;
|
|
65
|
+
else if (window !== undefined && window.navigator !== undefined)
|
|
66
|
+
outerNavigator = window.navigator;
|
|
67
|
+
else
|
|
68
|
+
return;
|
|
69
|
+
const parsedResult = Bowser.parse(outerNavigator.userAgent);
|
|
70
|
+
this._browser = Object.assign(this._browser, parsedResult.browser);
|
|
71
|
+
this._engine = Object.assign(this._engine, parsedResult.engine);
|
|
72
|
+
this._os = Object.assign(this._os, parsedResult.os);
|
|
73
|
+
this._platform = Object.assign(this._platform, parsedResult.platform);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
if (!this._warned) {
|
|
77
|
+
logger.warn(`Cannot collect media devices and navigator data, because an error occurred`, err);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
this._actualHashes = {
|
|
81
|
+
os: (0, hash_1.hash)(this._os),
|
|
82
|
+
browser: (0, hash_1.hash)(this._browser),
|
|
83
|
+
platform: (0, hash_1.hash)(this._platform),
|
|
84
|
+
engine: (0, hash_1.hash)(this._engine),
|
|
85
|
+
};
|
|
66
86
|
}
|
|
67
87
|
get os() {
|
|
68
88
|
return this._os;
|
|
@@ -76,5 +96,29 @@ class ClientDevices {
|
|
|
76
96
|
get engine() {
|
|
77
97
|
return this._engine;
|
|
78
98
|
}
|
|
99
|
+
get isOsChanged() {
|
|
100
|
+
var _a, _b;
|
|
101
|
+
return ((_a = this._pivotHashes) === null || _a === void 0 ? void 0 : _a.os) !== ((_b = this._actualHashes) === null || _b === void 0 ? void 0 : _b.os);
|
|
102
|
+
}
|
|
103
|
+
get isBrowserChanged() {
|
|
104
|
+
var _a, _b;
|
|
105
|
+
return ((_a = this._pivotHashes) === null || _a === void 0 ? void 0 : _a.browser) !== ((_b = this._actualHashes) === null || _b === void 0 ? void 0 : _b.browser);
|
|
106
|
+
}
|
|
107
|
+
get isPlatformChanged() {
|
|
108
|
+
var _a, _b;
|
|
109
|
+
return ((_a = this._pivotHashes) === null || _a === void 0 ? void 0 : _a.platform) !== ((_b = this._actualHashes) === null || _b === void 0 ? void 0 : _b.platform);
|
|
110
|
+
}
|
|
111
|
+
get isEngineChanged() {
|
|
112
|
+
var _a, _b;
|
|
113
|
+
return ((_a = this._pivotHashes) === null || _a === void 0 ? void 0 : _a.engine) !== ((_b = this._actualHashes) === null || _b === void 0 ? void 0 : _b.engine);
|
|
114
|
+
}
|
|
115
|
+
get changed() {
|
|
116
|
+
return this.isOsChanged || this.isBrowserChanged || this.isPlatformChanged || this.isEngineChanged;
|
|
117
|
+
}
|
|
118
|
+
pivot() {
|
|
119
|
+
this._pivotHashes = {
|
|
120
|
+
...this._actualHashes,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
79
123
|
}
|
|
80
124
|
exports.ClientDevices = ClientDevices;
|
package/lib/ClientMonitor.d.ts
CHANGED
|
@@ -31,6 +31,12 @@ export declare type ClientMonitorConfig = {
|
|
|
31
31
|
* DEFAULT: undefined
|
|
32
32
|
*/
|
|
33
33
|
sendingPeriodInMs?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Set the ticking time of the timer invokes processes for collecting, sampling, and sending.
|
|
36
|
+
*
|
|
37
|
+
* DEFAULT: 1000
|
|
38
|
+
*/
|
|
39
|
+
tickingTimeInMs?: number;
|
|
34
40
|
/**
|
|
35
41
|
* By setting it stats items and entries are deleted if they are not updated.
|
|
36
42
|
*
|
|
@@ -174,10 +180,10 @@ export interface ClientMonitor {
|
|
|
174
180
|
/**
|
|
175
181
|
* Sets the client displayed userId.
|
|
176
182
|
*
|
|
177
|
-
* This can change during the call, but the clientId must
|
|
183
|
+
* This can change during the call, but the clientId must remain the same
|
|
178
184
|
* @param value
|
|
179
185
|
*/
|
|
180
|
-
setUserId(value
|
|
186
|
+
setUserId(value?: string | undefined): void;
|
|
181
187
|
/**
|
|
182
188
|
* Sets the identifier of the call the client participates.
|
|
183
189
|
* If the value is given then sample will contain the provided value, and the observer will (try) to use it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientMonitor.d.ts","sourceRoot":"","sources":["../src/ClientMonitor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ClientMonitor.d.ts","sourceRoot":"","sources":["../src/ClientMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ export declare class ClientMonitorImpl implements ClientMonitor {
|
|
|
42
42
|
addStatsCollector(collector: PcStatsCollector): void;
|
|
43
43
|
removeStatsCollector(collectorId: string): void;
|
|
44
44
|
setMediaDevices(...devices: MediaDevice[]): void;
|
|
45
|
-
setUserId(value
|
|
45
|
+
setUserId(value?: string | null): void;
|
|
46
46
|
addMediaConstraints(constrains: MediaStreamConstraints | MediaTrackConstraints): void;
|
|
47
47
|
addUserMediaError(err: any): void;
|
|
48
48
|
addExtensionStats(stats: ExtensionStat): void;
|
|
@@ -55,6 +55,7 @@ export declare class ClientMonitorImpl implements ClientMonitor {
|
|
|
55
55
|
setCollectingPeriod(collectingPeriodInMs: number): void;
|
|
56
56
|
setSamplingPeriod(samplingPeriodInMs: number): void;
|
|
57
57
|
setSendingPeriod(sendingPeriodInMs: number): void;
|
|
58
|
+
private _collectClientDevices;
|
|
58
59
|
private _makeCollector;
|
|
59
60
|
private _makeSampler;
|
|
60
61
|
private _createSender;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientMonitorImpl.d.ts","sourceRoot":"","sources":["../src/ClientMonitorImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,eAAe,EACf,QAAQ,EAGX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAA8B,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAiB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAW,aAAa,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAU,YAAY,EAAE,MAAM,UAAU,CAAC;AAKhD,OAAO,EAAE,WAAW,EAAgB,MAAM,wBAAwB,CAAC;AAInE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAW,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ClientMonitorImpl.d.ts","sourceRoot":"","sources":["../src/ClientMonitorImpl.ts"],"names":[],"mappings":"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"}
|
package/lib/ClientMonitorImpl.js
CHANGED
|
@@ -48,6 +48,7 @@ const supplyDefaultConfig = () => {
|
|
|
48
48
|
const defaultConfig = {
|
|
49
49
|
// samplingPeriodInMs: 5000,
|
|
50
50
|
// sendingPeriodInMs: 10000,
|
|
51
|
+
tickingTimeInMs: 1000,
|
|
51
52
|
sampler: (0, Sampler_2.supplyDefaultConfig)(),
|
|
52
53
|
};
|
|
53
54
|
return defaultConfig;
|
|
@@ -69,10 +70,6 @@ class ClientMonitorImpl {
|
|
|
69
70
|
this._sampler = this._makeSampler();
|
|
70
71
|
this._createSender();
|
|
71
72
|
this._createTimer();
|
|
72
|
-
this._sampler.addEngine(this._clientDevices.engine);
|
|
73
|
-
this._sampler.addPlatform(this._clientDevices.platform);
|
|
74
|
-
this._sampler.addBrowser(this._clientDevices.browser);
|
|
75
|
-
this._sampler.addOs(this._clientDevices.os);
|
|
76
73
|
}
|
|
77
74
|
static create(config) {
|
|
78
75
|
if ((config === null || config === void 0 ? void 0 : config.maxListeners) !== undefined) {
|
|
@@ -164,7 +161,7 @@ class ClientMonitorImpl {
|
|
|
164
161
|
}
|
|
165
162
|
}
|
|
166
163
|
setUserId(value) {
|
|
167
|
-
if (
|
|
164
|
+
if (value === undefined || value === null)
|
|
168
165
|
return;
|
|
169
166
|
this._sampler.setUserId(value);
|
|
170
167
|
}
|
|
@@ -206,12 +203,11 @@ class ClientMonitorImpl {
|
|
|
206
203
|
}
|
|
207
204
|
async sample() {
|
|
208
205
|
try {
|
|
206
|
+
this._collectClientDevices();
|
|
209
207
|
const clientSample = this._sampler.make();
|
|
210
208
|
if (!clientSample)
|
|
211
209
|
return;
|
|
212
|
-
|
|
213
|
-
this._accumulator.addClientSample(clientSample);
|
|
214
|
-
}
|
|
210
|
+
this._accumulator.addClientSample(clientSample);
|
|
215
211
|
this._eventer.emitSampleCreated(clientSample);
|
|
216
212
|
const now = Date.now();
|
|
217
213
|
this._metrics.setLastSampled(now);
|
|
@@ -295,7 +291,7 @@ class ClientMonitorImpl {
|
|
|
295
291
|
return;
|
|
296
292
|
}
|
|
297
293
|
if (!this._timer) {
|
|
298
|
-
this._timer = new Timer_1.Timer();
|
|
294
|
+
this._timer = new Timer_1.Timer(this._config.tickingTimeInMs);
|
|
299
295
|
}
|
|
300
296
|
if (this._timer.hasListener("collect")) {
|
|
301
297
|
this._timer.clear("collect");
|
|
@@ -314,7 +310,7 @@ class ClientMonitorImpl {
|
|
|
314
310
|
return;
|
|
315
311
|
}
|
|
316
312
|
if (!this._timer) {
|
|
317
|
-
this._timer = new Timer_1.Timer();
|
|
313
|
+
this._timer = new Timer_1.Timer(this._config.tickingTimeInMs);
|
|
318
314
|
}
|
|
319
315
|
if (this._timer.hasListener("sample")) {
|
|
320
316
|
this._timer.clear("sample");
|
|
@@ -323,6 +319,7 @@ class ClientMonitorImpl {
|
|
|
323
319
|
type: "sample",
|
|
324
320
|
process: this.sample.bind(this),
|
|
325
321
|
fixedDelayInMs: samplingPeriodInMs,
|
|
322
|
+
initialDelayInMs: samplingPeriodInMs,
|
|
326
323
|
context: "Creating Sample",
|
|
327
324
|
});
|
|
328
325
|
}
|
|
@@ -333,7 +330,7 @@ class ClientMonitorImpl {
|
|
|
333
330
|
return;
|
|
334
331
|
}
|
|
335
332
|
if (!this._timer) {
|
|
336
|
-
this._timer = new Timer_1.Timer();
|
|
333
|
+
this._timer = new Timer_1.Timer(this._config.tickingTimeInMs);
|
|
337
334
|
}
|
|
338
335
|
if (this._timer.hasListener("send")) {
|
|
339
336
|
this._timer.clear("send");
|
|
@@ -342,9 +339,26 @@ class ClientMonitorImpl {
|
|
|
342
339
|
type: "send",
|
|
343
340
|
process: this.send.bind(this),
|
|
344
341
|
fixedDelayInMs: sendingPeriodInMs,
|
|
342
|
+
initialDelayInMs: sendingPeriodInMs,
|
|
345
343
|
context: "Sending Samples",
|
|
346
344
|
});
|
|
347
345
|
}
|
|
346
|
+
_collectClientDevices() {
|
|
347
|
+
this._clientDevices.collect();
|
|
348
|
+
if (this._clientDevices.isOsChanged) {
|
|
349
|
+
this._sampler.addOs(this._clientDevices.os);
|
|
350
|
+
}
|
|
351
|
+
if (this._clientDevices.isBrowserChanged) {
|
|
352
|
+
this._sampler.addBrowser(this._clientDevices.browser);
|
|
353
|
+
}
|
|
354
|
+
if (this._clientDevices.isPlatformChanged) {
|
|
355
|
+
this._sampler.addPlatform(this._clientDevices.platform);
|
|
356
|
+
}
|
|
357
|
+
if (this._clientDevices.isEngineChanged) {
|
|
358
|
+
this._sampler.addEngine(this._clientDevices.engine);
|
|
359
|
+
}
|
|
360
|
+
this._clientDevices.pivot();
|
|
361
|
+
}
|
|
348
362
|
_makeCollector() {
|
|
349
363
|
var _a, _b;
|
|
350
364
|
const collectorConfig = this._config.collectors;
|
package/lib/Sampler.d.ts
CHANGED
|
@@ -33,6 +33,10 @@ export declare type SamplerConfig = {
|
|
|
33
33
|
* DEFAULT: true
|
|
34
34
|
*/
|
|
35
35
|
incrementalSampling?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Indicate if the sampler should use the timestamp provided by the rtcstats (the minimum of the peer connection stats will be used as the timestamp of the sample)
|
|
38
|
+
*/
|
|
39
|
+
useStatsSample?: boolean;
|
|
36
40
|
};
|
|
37
41
|
declare type SamplerConstructorConfig = SamplerConfig & {
|
|
38
42
|
roomId: string;
|
package/lib/Sampler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sampler.d.ts","sourceRoot":"","sources":["../src/Sampler.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,OAAO,EAEP,YAAY,EAGZ,MAAM,EACN,aAAa,EAKb,WAAW,EAEX,eAAe,EAIf,QAAQ,EAEX,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAOrD,oBAAY,aAAa,GAAG;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Sampler.d.ts","sourceRoot":"","sources":["../src/Sampler.ts"],"names":[],"mappings":"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"}
|
package/lib/Sampler.js
CHANGED
|
@@ -11,6 +11,7 @@ const supplyDefaultConfig = () => {
|
|
|
11
11
|
roomId: (0, uuid_1.v4)(),
|
|
12
12
|
clientId: (0, uuid_1.v4)(),
|
|
13
13
|
incrementalSampling: true,
|
|
14
|
+
useStatsSample: true,
|
|
14
15
|
};
|
|
15
16
|
return defaultConfig;
|
|
16
17
|
};
|
|
@@ -129,7 +130,6 @@ class Sampler {
|
|
|
129
130
|
if (this._closed) {
|
|
130
131
|
throw new Error(`Cannot sample a closed Sampler`);
|
|
131
132
|
}
|
|
132
|
-
const now = Date.now();
|
|
133
133
|
const clientSample = {
|
|
134
134
|
callId: this._config.callId,
|
|
135
135
|
clientId: this._config.clientId,
|
|
@@ -147,7 +147,7 @@ class Sampler {
|
|
|
147
147
|
userMediaErrors: this._userMediaErrors,
|
|
148
148
|
extensionStats: this._extensionStats,
|
|
149
149
|
mediaDevices: this._mediaDevices,
|
|
150
|
-
timestamp: now,
|
|
150
|
+
timestamp: Date.now(),
|
|
151
151
|
};
|
|
152
152
|
++this._sampleSeq;
|
|
153
153
|
this._engine = undefined;
|
|
@@ -164,6 +164,12 @@ class Sampler {
|
|
|
164
164
|
this._sampled = clientSample.timestamp;
|
|
165
165
|
return clientSample;
|
|
166
166
|
}
|
|
167
|
+
else if (this._config.useStatsSample) {
|
|
168
|
+
const statsTimestamp = this._statsReader.statsTimestamp;
|
|
169
|
+
if (statsTimestamp) {
|
|
170
|
+
clientSample.timestamp = statsTimestamp;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
167
173
|
let inboundAudioTracks;
|
|
168
174
|
let inboundVideoTracks;
|
|
169
175
|
let outboundAudioTracks;
|
|
@@ -9,6 +9,7 @@ export declare class PeerConnectionEntryImpl implements PeerConnectionEntry {
|
|
|
9
9
|
static create(config: PeerConnectionEntryConfig): PeerConnectionEntryImpl;
|
|
10
10
|
readonly created: number;
|
|
11
11
|
private _config;
|
|
12
|
+
private _statsTimestamp?;
|
|
12
13
|
private _updated;
|
|
13
14
|
private _touched;
|
|
14
15
|
private _stats?;
|
|
@@ -58,6 +59,7 @@ export declare class PeerConnectionEntryImpl implements PeerConnectionEntry {
|
|
|
58
59
|
get id(): string | undefined;
|
|
59
60
|
get updated(): number;
|
|
60
61
|
get touched(): number;
|
|
62
|
+
get statsTimestamp(): number | undefined;
|
|
61
63
|
codecs(): IterableIterator<CodecEntry>;
|
|
62
64
|
inboundRtps(): IterableIterator<InboundRtpEntry>;
|
|
63
65
|
update(statsEntry: StatsEntry): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeerConnectionEntryImpl.d.ts","sourceRoot":"","sources":["../../src/entries/PeerConnectionEntryImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"PeerConnectionEntryImpl.d.ts","sourceRoot":"","sources":["../../src/entries/PeerConnectionEntryImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -988,6 +988,9 @@ class PeerConnectionEntryImpl {
|
|
|
988
988
|
get touched() {
|
|
989
989
|
return this._touched;
|
|
990
990
|
}
|
|
991
|
+
get statsTimestamp() {
|
|
992
|
+
return this._statsTimestamp;
|
|
993
|
+
}
|
|
991
994
|
codecs() {
|
|
992
995
|
return this._codecs.values();
|
|
993
996
|
}
|
|
@@ -1000,6 +1003,7 @@ class PeerConnectionEntryImpl {
|
|
|
1000
1003
|
if (visitor.touched) {
|
|
1001
1004
|
this._touched = visitor.created;
|
|
1002
1005
|
}
|
|
1006
|
+
this._statsTimestamp = visitor.maxTimestamp;
|
|
1003
1007
|
}
|
|
1004
1008
|
_getEntryMaps() {
|
|
1005
1009
|
const result = [
|
|
@@ -96,6 +96,10 @@ export interface StatsReader {
|
|
|
96
96
|
* The corresponded stats (csrc stats) are deprecated and will be removed from browser
|
|
97
97
|
*/
|
|
98
98
|
contributingSources(): IterableIterator<ContributingSourceEntry>;
|
|
99
|
+
/**
|
|
100
|
+
* The timestamp of the stats representing the collected rtc stats
|
|
101
|
+
*/
|
|
102
|
+
readonly statsTimestamp: number | undefined;
|
|
99
103
|
}
|
|
100
104
|
export interface StatsWriter {
|
|
101
105
|
register(collectorId: string, label?: string): void;
|
|
@@ -105,6 +109,7 @@ export interface StatsWriter {
|
|
|
105
109
|
export declare class StatsStorage implements StatsReader, StatsWriter {
|
|
106
110
|
private _peerConnections;
|
|
107
111
|
accept(collectorId: string, statsEntry: StatsEntry): void;
|
|
112
|
+
get statsTimestamp(): number | undefined;
|
|
108
113
|
trim(expirationThresholdInMs: number): void;
|
|
109
114
|
clear(): void;
|
|
110
115
|
register(collectorId: string, collectorLabel?: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatsStorage.d.ts","sourceRoot":"","sources":["../../src/entries/StatsStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACH,uBAAuB,EACvB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAKpE;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB;;OAEG;IACH,eAAe,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IAEzD;;OAEG;IACH,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAEvC;;OAEG;IACH,WAAW,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAEjD;;OAEG;IACH,YAAY,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEnD;;OAEG;IACH,iBAAiB,IAAI,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAE7D;;OAEG;IACH,kBAAkB,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IAE/D;;OAEG;IACH,YAAY,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEnD;;OAEG;IACH,YAAY,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEnD;;OAEG;IACH,UAAU,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAE/C;;OAEG;IACH,iBAAiB,IAAI,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAE7D;;OAEG;IACH,eAAe,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IAEzD;;OAEG;IACH,gBAAgB,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAE3D;;OAEG;IACH,aAAa,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAErD;;OAEG;IACH,YAAY,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEnD;;;;OAIG;IACH,OAAO,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEzC;;;;OAIG;IACH,SAAS,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAE7C;;;;OAIG;IACH,cAAc,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAEvD;;;OAGG;IACH,YAAY,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEnD;;;;OAIG;IACH,UAAU,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAE/C;;;;OAIG;IACH,mBAAmB,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"StatsStorage.d.ts","sourceRoot":"","sources":["../../src/entries/StatsStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,17 @@ class StatsStorage {
|
|
|
16
16
|
}
|
|
17
17
|
pcEntry.update(statsEntry);
|
|
18
18
|
}
|
|
19
|
+
get statsTimestamp() {
|
|
20
|
+
let result;
|
|
21
|
+
for (const pc of Array.from(this._peerConnections.values())) {
|
|
22
|
+
if (pc.statsTimestamp === undefined)
|
|
23
|
+
continue;
|
|
24
|
+
if (result === undefined || pc.statsTimestamp < result) {
|
|
25
|
+
result = pc.statsTimestamp;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
19
30
|
trim(expirationThresholdInMs) {
|
|
20
31
|
for (const pcEntry of this._peerConnections.values()) {
|
|
21
32
|
pcEntry.trim(expirationThresholdInMs);
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { W3CStats as W3C } from "@observertc/monitor-schemas";
|
|
2
2
|
export declare type StatsValue = W3C.RtcCodecStats | W3C.RtcInboundRtpStreamStats | W3C.RtcOutboundRTPStreamStats | W3C.RtcRemoteInboundRtpStreamStats | W3C.RtcRemoteOutboundRTPStreamStats | W3C.RtcAudioSourceStats | W3C.RtcVideoSourceStats | W3C.RtcPeerConnectionStats | W3C.RtcDataChannelStats | W3C.RtcTransportStats | W3C.RtcCertificateStats | W3C.RTCAudioPlayoutStats | W3C.RtcRtpContributingSourceStats | W3C.RtcRtpTransceiverStats | W3C.RtcAudioSenderStats | W3C.RtcVideoSenderStats | W3C.RtcAudioReceiverStats | W3C.RtcVideoReceiverStats | W3C.RtcSctpTransportStats | W3C.RtcIceCandidatePairStats | W3C.RtcLocalCandidateStats | W3C.RtcRemoteCandidateStats | W3C.RtcIceServerStats;
|
|
3
3
|
export declare type StatsEntry = [W3C.StatsType, StatsValue];
|
|
4
|
+
export declare type Timestamps = {
|
|
5
|
+
maxTimestamp?: number;
|
|
6
|
+
minTimestamp?: number;
|
|
7
|
+
};
|
|
4
8
|
export declare abstract class StatsVisitor {
|
|
9
|
+
private _minTimestamp?;
|
|
10
|
+
private _maxTimestamp?;
|
|
11
|
+
get minTimestamp(): number | undefined;
|
|
12
|
+
get maxTimestamp(): number | undefined;
|
|
13
|
+
resetTimestamps(): void;
|
|
5
14
|
visit(statsEntry: StatsEntry): void;
|
|
6
15
|
abstract visitCodec(stats: W3C.RtcCodecStats): void;
|
|
7
16
|
abstract visitInboundRtp(stats: W3C.RtcInboundRtpStreamStats): void;
|