@webex/internal-plugin-metrics 3.0.0-beta.19 → 3.0.0-beta.190
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/dist/call-diagnostic/call-diagnostic-metrics-batcher.js +134 -0
- package/dist/call-diagnostic/call-diagnostic-metrics-batcher.js.map +1 -0
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +451 -0
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.js +511 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js +106 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -0
- package/dist/call-diagnostic/config.js +461 -0
- package/dist/call-diagnostic/config.js.map +1 -0
- package/dist/call-diagnostic/generated-types-temp/ClientEvent.js +7 -0
- package/dist/call-diagnostic/generated-types-temp/ClientEvent.js.map +1 -0
- package/dist/call-diagnostic/generated-types-temp/Event.js +7 -0
- package/dist/call-diagnostic/generated-types-temp/Event.js.map +1 -0
- package/dist/call-diagnostic/generated-types-temp/MediaQualityEvent.js +7 -0
- package/dist/call-diagnostic/generated-types-temp/MediaQualityEvent.js.map +1 -0
- package/dist/config.js +20 -1
- package/dist/config.js.map +1 -1
- package/dist/index.js +25 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics.js +30 -30
- package/dist/metrics.js.map +1 -1
- package/dist/metrics.types.js +7 -0
- package/dist/metrics.types.js.map +1 -0
- package/dist/new-metrics.js +185 -0
- package/dist/new-metrics.js.map +1 -0
- package/dist/types/batcher.d.ts +2 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics-batcher.d.ts +2 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +189 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +324 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics.util.d.ts +31 -0
- package/dist/types/call-diagnostic/config.d.ts +57 -0
- package/dist/types/call-diagnostic/generated-types-temp/ClientEvent.d.ts +1112 -0
- package/dist/types/call-diagnostic/generated-types-temp/Event.d.ts +4851 -0
- package/dist/types/call-diagnostic/generated-types-temp/MediaQualityEvent.d.ts +2121 -0
- package/dist/types/client-metrics-batcher.d.ts +2 -0
- package/dist/types/config.d.ts +35 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/metrics.d.ts +3 -0
- package/dist/types/metrics.types.d.ts +87 -0
- package/dist/types/new-metrics.d.ts +83 -0
- package/package.json +12 -8
- package/src/call-diagnostic/call-diagnostic-metrics-batcher.ts +148 -0
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +408 -0
- package/src/call-diagnostic/call-diagnostic-metrics.ts +528 -0
- package/src/call-diagnostic/call-diagnostic-metrics.util.ts +102 -0
- package/src/call-diagnostic/config.ts +455 -0
- package/src/call-diagnostic/generated-types-temp/ClientEvent.ts +2357 -0
- package/src/call-diagnostic/generated-types-temp/Event.ts +7669 -0
- package/src/call-diagnostic/generated-types-temp/MediaQualityEvent.ts +2321 -0
- package/src/config.js +19 -0
- package/src/index.ts +39 -0
- package/src/metrics.js +25 -27
- package/src/metrics.types.ts +131 -0
- package/src/new-metrics.ts +170 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +243 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +474 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +722 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +76 -0
- package/test/unit/spec/metrics.js +65 -97
- package/test/unit/spec/new-metrics.ts +91 -0
- package/tsconfig.json +6 -0
- package/dist/call-diagnostic-events-batcher.js +0 -60
- package/dist/call-diagnostic-events-batcher.js.map +0 -1
- package/src/call-diagnostic-events-batcher.js +0 -62
- package/src/index.js +0 -17
- package/test/unit/spec/call-diagnostic-events-batcher.js +0 -195
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const CLIENT_NAME: "webex-js-sdk";
|
|
2
|
+
declare namespace _default {
|
|
3
|
+
export namespace device {
|
|
4
|
+
namespace preDiscoveryServices {
|
|
5
|
+
const metricsServiceUrl: string;
|
|
6
|
+
const metrics: string;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export namespace metrics_1 {
|
|
10
|
+
const appType: string;
|
|
11
|
+
const batcherWait: number;
|
|
12
|
+
const batcherMaxCalls: number;
|
|
13
|
+
const batcherMaxWait: number;
|
|
14
|
+
const batcherRetryPlateau: number;
|
|
15
|
+
}
|
|
16
|
+
export { metrics_1 as metrics };
|
|
17
|
+
}
|
|
18
|
+
export default _default;
|
|
19
|
+
export namespace OS_NAME {
|
|
20
|
+
const WINDOWS: string;
|
|
21
|
+
const MAC: string;
|
|
22
|
+
const IOS: string;
|
|
23
|
+
const ANDROID: string;
|
|
24
|
+
const CHROME: string;
|
|
25
|
+
const LINUX: string;
|
|
26
|
+
const OTHERS: string;
|
|
27
|
+
}
|
|
28
|
+
export const OSMap: {
|
|
29
|
+
'Chrome OS': string;
|
|
30
|
+
macOS: string;
|
|
31
|
+
Windows: string;
|
|
32
|
+
iOS: string;
|
|
33
|
+
Android: string;
|
|
34
|
+
Linux: string;
|
|
35
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
import '@webex/internal-plugin-device';
|
|
5
|
+
import config from './config';
|
|
6
|
+
import NewMetrics from './new-metrics';
|
|
7
|
+
import { ClientEvent, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitOperationalEvent, SubmitMQE } from './metrics.types';
|
|
8
|
+
import * as CALL_DIAGNOSTIC_CONFIG from './call-diagnostic/config';
|
|
9
|
+
export { default, getOSNameInternal } from './metrics';
|
|
10
|
+
export { config, CALL_DIAGNOSTIC_CONFIG, NewMetrics };
|
|
11
|
+
export type { ClientEvent, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitMQE, SubmitOperationalEvent, };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ClientEvent as RawClientEvent } from './call-diagnostic/generated-types-temp/ClientEvent';
|
|
2
|
+
import { Event as RawEvent } from './call-diagnostic/generated-types-temp/Event';
|
|
3
|
+
import { MediaQualityEvent as RawMediaQualityEvent } from './call-diagnostic/generated-types-temp/MediaQualityEvent';
|
|
4
|
+
export type Event = Omit<RawEvent, 'event'> & {
|
|
5
|
+
event: RawClientEvent | RawMediaQualityEvent;
|
|
6
|
+
};
|
|
7
|
+
export type ClientEventError = NonNullable<RawClientEvent['errors']>[0];
|
|
8
|
+
export type SubmitClientEventOptions = {
|
|
9
|
+
meetingId?: string;
|
|
10
|
+
mediaConnections?: any[];
|
|
11
|
+
rawError?: any;
|
|
12
|
+
showToUser?: boolean;
|
|
13
|
+
correlationId?: string;
|
|
14
|
+
};
|
|
15
|
+
export type SubmitMQEOptions = {
|
|
16
|
+
meetingId: string;
|
|
17
|
+
mediaConnections?: any[];
|
|
18
|
+
networkType?: Event['origin']['networkType'];
|
|
19
|
+
};
|
|
20
|
+
export type InternalEvent = {
|
|
21
|
+
name: 'internal.client.meetinginfo.request' | 'internal.client.meetinginfo.response' | 'internal.reset.join.latencies' | 'internal.client.interstitial-window.launched' | 'internal.client.meeting.click.joinbutton' | 'internal.host.meeting.participant.admitted' | 'internal.client.meeting.interstitial-window.showed' | 'internal.client.interstitial-window.click.joinbutton';
|
|
22
|
+
payload?: never;
|
|
23
|
+
options?: never;
|
|
24
|
+
};
|
|
25
|
+
export interface ClientEvent {
|
|
26
|
+
name: RawClientEvent['name'];
|
|
27
|
+
payload?: RawClientEvent;
|
|
28
|
+
options: SubmitClientEventOptions;
|
|
29
|
+
}
|
|
30
|
+
export interface BehavioralEvent {
|
|
31
|
+
name: 'host.meeting.participant.admitted' | 'sdk.media-flow.started';
|
|
32
|
+
payload?: never;
|
|
33
|
+
options?: never;
|
|
34
|
+
}
|
|
35
|
+
export interface OperationalEvent {
|
|
36
|
+
name: never;
|
|
37
|
+
payload?: never;
|
|
38
|
+
options?: never;
|
|
39
|
+
}
|
|
40
|
+
export interface FeatureEvent {
|
|
41
|
+
name: never;
|
|
42
|
+
payload?: never;
|
|
43
|
+
options?: never;
|
|
44
|
+
}
|
|
45
|
+
export interface MediaQualityEvent {
|
|
46
|
+
name: RawMediaQualityEvent['name'];
|
|
47
|
+
payload?: RawMediaQualityEvent;
|
|
48
|
+
options: SubmitMQEOptions;
|
|
49
|
+
}
|
|
50
|
+
export type RecursivePartial<T> = {
|
|
51
|
+
[P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial<U>[] : T[P] extends object ? RecursivePartial<T[P]> : T[P];
|
|
52
|
+
};
|
|
53
|
+
export type MetricEventNames = InternalEvent['name'] | ClientEvent['name'] | BehavioralEvent['name'] | OperationalEvent['name'] | FeatureEvent['name'] | MediaQualityEvent['name'];
|
|
54
|
+
export type ClientType = NonNullable<RawEvent['origin']['clientInfo']>['clientType'];
|
|
55
|
+
export type SubClientType = NonNullable<RawEvent['origin']['clientInfo']>['subClientType'];
|
|
56
|
+
export type NetworkType = NonNullable<RawEvent['origin']>['networkType'];
|
|
57
|
+
export type ClientEventPayload = RecursivePartial<ClientEvent['payload']>;
|
|
58
|
+
export type MediaQualityEventAudioSetupDelayPayload = NonNullable<MediaQualityEvent['payload']>['audioSetupDelay'];
|
|
59
|
+
export type MediaQualityEventVideoSetupDelayPayload = NonNullable<MediaQualityEvent['payload']>['videoSetupDelay'];
|
|
60
|
+
export type SubmitMQEPayload = RecursivePartial<MediaQualityEvent['payload']> & {
|
|
61
|
+
intervals: NonNullable<MediaQualityEvent['payload']>['intervals'];
|
|
62
|
+
};
|
|
63
|
+
export type SubmitInternalEvent = (args: {
|
|
64
|
+
name: InternalEvent['name'];
|
|
65
|
+
payload?: RecursivePartial<InternalEvent['payload']>;
|
|
66
|
+
options?: any;
|
|
67
|
+
}) => void;
|
|
68
|
+
export type SubmitBehavioralEvent = (args: {
|
|
69
|
+
name: BehavioralEvent['name'];
|
|
70
|
+
payload?: RecursivePartial<BehavioralEvent['payload']>;
|
|
71
|
+
options?: any;
|
|
72
|
+
}) => void;
|
|
73
|
+
export type SubmitClientEvent = (args: {
|
|
74
|
+
name: ClientEvent['name'];
|
|
75
|
+
payload?: RecursivePartial<ClientEvent['payload']>;
|
|
76
|
+
options: SubmitClientEventOptions;
|
|
77
|
+
}) => void;
|
|
78
|
+
export type SubmitOperationalEvent = (args: {
|
|
79
|
+
name: OperationalEvent['name'];
|
|
80
|
+
payload?: RecursivePartial<OperationalEvent['payload']>;
|
|
81
|
+
options?: any;
|
|
82
|
+
}) => void;
|
|
83
|
+
export type SubmitMQE = (args: {
|
|
84
|
+
name: MediaQualityEvent['name'];
|
|
85
|
+
payload: SubmitMQEPayload;
|
|
86
|
+
options: any;
|
|
87
|
+
}) => void;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { WebexPlugin } from '@webex/webex-core';
|
|
2
|
+
import CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';
|
|
3
|
+
import { RecursivePartial, ClientEvent, FeatureEvent, BehavioralEvent, OperationalEvent, MediaQualityEvent, InternalEvent, SubmitClientEventOptions } from './metrics.types';
|
|
4
|
+
import CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';
|
|
5
|
+
/**
|
|
6
|
+
* Metrics plugin to centralize all types of metrics.
|
|
7
|
+
* @class
|
|
8
|
+
*/
|
|
9
|
+
declare class Metrics extends WebexPlugin {
|
|
10
|
+
static instance: Metrics;
|
|
11
|
+
callDiagnosticLatencies: CallDiagnosticLatencies;
|
|
12
|
+
callDiagnosticMetrics: CallDiagnosticMetrics;
|
|
13
|
+
/**
|
|
14
|
+
* Constructor
|
|
15
|
+
* @param args
|
|
16
|
+
* @constructor
|
|
17
|
+
* @private
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
constructor(...args: any[]);
|
|
21
|
+
/**
|
|
22
|
+
* On Ready
|
|
23
|
+
*/
|
|
24
|
+
private onReady;
|
|
25
|
+
/**
|
|
26
|
+
* Used for internal purposes only
|
|
27
|
+
* @param args
|
|
28
|
+
*/
|
|
29
|
+
submitInternalEvent({ name, payload, options, }: {
|
|
30
|
+
name: InternalEvent['name'];
|
|
31
|
+
payload?: RecursivePartial<InternalEvent['payload']>;
|
|
32
|
+
options?: any;
|
|
33
|
+
}): void;
|
|
34
|
+
/**
|
|
35
|
+
* Behavioral event
|
|
36
|
+
* @param args
|
|
37
|
+
*/
|
|
38
|
+
submitBehavioralEvent({ name, payload, options, }: {
|
|
39
|
+
name: BehavioralEvent['name'];
|
|
40
|
+
payload?: RecursivePartial<BehavioralEvent['payload']>;
|
|
41
|
+
options?: any;
|
|
42
|
+
}): void;
|
|
43
|
+
/**
|
|
44
|
+
* Operational event
|
|
45
|
+
* @param args
|
|
46
|
+
*/
|
|
47
|
+
submitOperationalEvent({ name, payload, options, }: {
|
|
48
|
+
name: OperationalEvent['name'];
|
|
49
|
+
payload?: RecursivePartial<OperationalEvent['payload']>;
|
|
50
|
+
options?: any;
|
|
51
|
+
}): void;
|
|
52
|
+
/**
|
|
53
|
+
* Call Analyzer: Media Quality Event
|
|
54
|
+
* @param args
|
|
55
|
+
*/
|
|
56
|
+
submitMQE({ name, payload, options, }: {
|
|
57
|
+
name: MediaQualityEvent['name'];
|
|
58
|
+
payload: RecursivePartial<MediaQualityEvent['payload']> & {
|
|
59
|
+
intervals: MediaQualityEvent['payload']['intervals'];
|
|
60
|
+
};
|
|
61
|
+
options: any;
|
|
62
|
+
}): void;
|
|
63
|
+
/**
|
|
64
|
+
* Call Analyzer: Feature Usage Event
|
|
65
|
+
* @param args
|
|
66
|
+
*/
|
|
67
|
+
submitFeatureEvent({ name, payload, options, }: {
|
|
68
|
+
name: FeatureEvent['name'];
|
|
69
|
+
payload?: RecursivePartial<FeatureEvent['payload']>;
|
|
70
|
+
options: any;
|
|
71
|
+
}): void;
|
|
72
|
+
/**
|
|
73
|
+
* Call Analyzer: Client Event
|
|
74
|
+
* @public
|
|
75
|
+
* @param args
|
|
76
|
+
*/
|
|
77
|
+
submitClientEvent({ name, payload, options, }: {
|
|
78
|
+
name: ClientEvent['name'];
|
|
79
|
+
payload?: RecursivePartial<ClientEvent['payload']>;
|
|
80
|
+
options: SubmitClientEventOptions;
|
|
81
|
+
}): void;
|
|
82
|
+
}
|
|
83
|
+
export default Metrics;
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-metrics",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.190",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"devMain": "src/index.js",
|
|
8
|
+
"types": "dist/types/index.d.ts",
|
|
8
9
|
"repository": {
|
|
9
10
|
"type": "git",
|
|
10
11
|
"url": "https://github.com/webex/webex-js-sdk.git",
|
|
@@ -23,13 +24,16 @@
|
|
|
23
24
|
"@sinonjs/fake-timers": "^6.0.1",
|
|
24
25
|
"sinon": "^9.2.4"
|
|
25
26
|
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
|
|
29
|
+
},
|
|
26
30
|
"dependencies": {
|
|
27
|
-
"@webex/common": "3.0.0-beta.
|
|
28
|
-
"@webex/common-timers": "3.0.0-beta.
|
|
29
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
30
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
31
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
32
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
33
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
31
|
+
"@webex/common": "3.0.0-beta.190",
|
|
32
|
+
"@webex/common-timers": "3.0.0-beta.190",
|
|
33
|
+
"@webex/internal-plugin-device": "3.0.0-beta.190",
|
|
34
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.190",
|
|
35
|
+
"@webex/test-helper-chai": "3.0.0-beta.190",
|
|
36
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.190",
|
|
37
|
+
"@webex/webex-core": "3.0.0-beta.190"
|
|
34
38
|
}
|
|
35
39
|
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/* eslint-disable class-methods-use-this */
|
|
2
|
+
/* eslint-disable valid-jsdoc */
|
|
3
|
+
|
|
4
|
+
import {isEmpty, merge} from 'lodash';
|
|
5
|
+
import Batcher from '../batcher';
|
|
6
|
+
import {
|
|
7
|
+
ClientEvent,
|
|
8
|
+
MetricEventNames,
|
|
9
|
+
MediaQualityEventAudioSetupDelayPayload,
|
|
10
|
+
MediaQualityEventVideoSetupDelayPayload,
|
|
11
|
+
} from '../metrics.types';
|
|
12
|
+
|
|
13
|
+
const CallDiagnosticEventsBatcher = Batcher.extend({
|
|
14
|
+
namespace: 'Metrics',
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @param webClientDomain
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
getBuildType(webClientDomain) {
|
|
21
|
+
if (
|
|
22
|
+
webClientDomain?.includes('localhost') ||
|
|
23
|
+
webClientDomain?.includes('127.0.0.1') ||
|
|
24
|
+
process.env.NODE_ENV !== 'production'
|
|
25
|
+
) {
|
|
26
|
+
return 'test';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return process.env.NODE_ENV === 'production' ? 'prod' : 'test';
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Prepare item
|
|
34
|
+
* @param item
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
prepareItem(item) {
|
|
38
|
+
const origin = {
|
|
39
|
+
buildType: this.getBuildType(item.event?.eventData?.webClientDomain),
|
|
40
|
+
networkType: 'unknown',
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// check event names and append latencies?
|
|
44
|
+
const eventName = item.eventPayload?.event?.name as MetricEventNames;
|
|
45
|
+
const joinTimes: ClientEvent['payload']['joinTimes'] = {};
|
|
46
|
+
const audioSetupDelay: MediaQualityEventAudioSetupDelayPayload = {};
|
|
47
|
+
const videoSetupDelay: MediaQualityEventVideoSetupDelayPayload = {};
|
|
48
|
+
|
|
49
|
+
const cdl = this.webex.internal.newMetrics.callDiagnosticLatencies;
|
|
50
|
+
|
|
51
|
+
switch (eventName) {
|
|
52
|
+
case 'client.interstitial-window.launched':
|
|
53
|
+
joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();
|
|
54
|
+
joinTimes.clickToInterstitial = cdl.getClickToInterstitial();
|
|
55
|
+
break;
|
|
56
|
+
|
|
57
|
+
case 'client.call.initiated':
|
|
58
|
+
joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();
|
|
59
|
+
joinTimes.showInterstitialTime = cdl.getShowInterstitialTime();
|
|
60
|
+
break;
|
|
61
|
+
|
|
62
|
+
case 'client.locus.join.response':
|
|
63
|
+
joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();
|
|
64
|
+
joinTimes.callInitJoinReq = cdl.getCallInitJoinReq();
|
|
65
|
+
joinTimes.joinReqResp = cdl.getJoinReqResp();
|
|
66
|
+
joinTimes.joinReqSentReceived = cdl.getJoinRespSentReceived();
|
|
67
|
+
joinTimes.pageJmt = cdl.getPageJMT();
|
|
68
|
+
joinTimes.clickToInterstitial = cdl.getClickToInterstitial();
|
|
69
|
+
joinTimes.interstitialToJoinOK = cdl.getInterstitialToJoinOK();
|
|
70
|
+
joinTimes.totalJmt = cdl.getTotalJMT();
|
|
71
|
+
joinTimes.clientJmt = cdl.getClientJMT();
|
|
72
|
+
break;
|
|
73
|
+
|
|
74
|
+
case 'client.ice.end':
|
|
75
|
+
joinTimes.ICESetupTime = cdl.getICESetupTime();
|
|
76
|
+
joinTimes.audioICESetupTime = cdl.getAudioICESetupTime();
|
|
77
|
+
joinTimes.videoICESetupTime = cdl.getVideoICESetupTime();
|
|
78
|
+
joinTimes.shareICESetupTime = cdl.getShareICESetupTime();
|
|
79
|
+
break;
|
|
80
|
+
|
|
81
|
+
case 'client.media.rx.start':
|
|
82
|
+
joinTimes.localSDPGenRemoteSDPRecv = cdl.getLocalSDPGenRemoteSDPRecv();
|
|
83
|
+
break;
|
|
84
|
+
|
|
85
|
+
case 'client.media-engine.ready':
|
|
86
|
+
joinTimes.totalMediaJMT = cdl.getTotalMediaJMT();
|
|
87
|
+
joinTimes.interstitialToMediaOKJMT = cdl.getInterstitialToMediaOKJMT();
|
|
88
|
+
joinTimes.callInitMediaEngineReady = cdl.getCallInitMediaEngineReady();
|
|
89
|
+
joinTimes.stayLobbyTime = cdl.getStayLobbyTime();
|
|
90
|
+
break;
|
|
91
|
+
|
|
92
|
+
case 'client.mediaquality.event':
|
|
93
|
+
audioSetupDelay.joinRespRxStart = cdl.getAudioJoinRespRxStart();
|
|
94
|
+
audioSetupDelay.joinRespTxStart = cdl.getAudioJoinRespTxStart();
|
|
95
|
+
videoSetupDelay.joinRespRxStart = cdl.getVideoJoinRespRxStart();
|
|
96
|
+
videoSetupDelay.joinRespTxStart = cdl.getVideoJoinRespTxStart();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (!isEmpty(joinTimes)) {
|
|
100
|
+
item.eventPayload.event = merge(item.eventPayload.event, {joinTimes});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (!isEmpty(audioSetupDelay)) {
|
|
104
|
+
item.eventPayload.event = merge(item.eventPayload.event, {audioSetupDelay});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (!isEmpty(videoSetupDelay)) {
|
|
108
|
+
item.eventPayload.event = merge(item.eventPayload.event, {videoSetupDelay});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
item.eventPayload.origin = Object.assign(origin, item.eventPayload.origin);
|
|
112
|
+
|
|
113
|
+
return Promise.resolve(item);
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Prepare request, add time sensitive date etc.
|
|
118
|
+
* @param queue
|
|
119
|
+
* @returns
|
|
120
|
+
*/
|
|
121
|
+
prepareRequest(queue) {
|
|
122
|
+
// Add sent timestamp
|
|
123
|
+
queue.forEach((item) => {
|
|
124
|
+
item.eventPayload.originTime = item.eventPayload.originTime || {};
|
|
125
|
+
item.eventPayload.originTime.sent = new Date().toISOString();
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
return Promise.resolve(queue);
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
*
|
|
133
|
+
* @param payload
|
|
134
|
+
* @returns
|
|
135
|
+
*/
|
|
136
|
+
submitHttpRequest(payload) {
|
|
137
|
+
return this.webex.request({
|
|
138
|
+
method: 'POST',
|
|
139
|
+
service: 'metrics',
|
|
140
|
+
resource: 'clientmetrics',
|
|
141
|
+
body: {
|
|
142
|
+
metrics: payload,
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
export default CallDiagnosticEventsBatcher;
|