import { WebexPlugin } from '@webex/webex-core'; import { MetricEventNames, PreComputedLatencies } from '../metrics.types'; /** * @description Helper class to store latencies timestamp and to calculate various latencies for CA. * @exports * @class CallDiagnosticLatencies */ export default class CallDiagnosticLatencies extends WebexPlugin { latencyTimestamps: Map; precomputedLatencies: Map; private meetingId?; private MAX_INTEGER; /** * @constructor */ constructor(...args: any[]); /** * Clear timestamps */ clearTimestamps(): void; /** * Associate current latencies with a meeting id * @param meetingId */ private setMeetingId; /** * Returns the meeting object associated with current latencies * @returns meeting object */ private getMeeting; /** * Store timestamp value * @param key - key * @param value - value * @param options - store options * @throws * @returns */ saveTimestamp({ key, value, options, }: { key: MetricEventNames; value?: number; options?: { meetingId?: string; }; }): void; /** * Store precomputed latency value * @param key - key * @param value - value * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement * @throws * @returns */ saveLatency(key: PreComputedLatencies, value: number, accumulate?: boolean): void; /** * Measure latency for a request * @param callback - callback for which you would like to measure latency * @param key - key * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement * @returns */ measureLatency(callback: () => Promise, key: PreComputedLatencies, accumulate?: boolean): Promise; /** * Store only the first timestamp value for the given key * @param key - key * @param value -value * @throws * @returns */ saveFirstTimestampOnly(key: MetricEventNames, value?: number): void; /** * Helper to calculate end - start * @param a start * @param b end * @returns latency */ getDiffBetweenTimestamps(a: MetricEventNames, b: MetricEventNames, clampValues?: { minimum?: number; maximum?: number; }): number; /** * Meeting Info Request * @note Meeting Info request happen not just in the join phase. CA requires * metrics around meeting info request that are only part of join phase. * This internal.* event is used to track the real timestamps * (when the actual request/response happen). This is because the actual CA event is * sent inside the join method on the meeting object based on some logic, but that's not exactly when * those events are actually fired. The logic only confirms that they have happened, and we send them over. * @returns - latency */ getMeetingInfoReqResp(): number; /** * Interstitial Time * @returns - latency */ getShowInterstitialTime(): number; /** * getU2CTime * @returns - latency */ getU2CTime(): number; /** * Device Register Time * @returns - latency */ getRegisterWDMDeviceJMT(): number; /** * Call Init Join Request * @returns - latency */ getCallInitJoinReq(): number; /** * Locus Join Request * @returns - latency */ getJoinReqResp(): number; /** * Time taken to do turn discovery * @returns - latency */ getTurnDiscoveryTime(): number; /** * Local SDP Generated Remote SDP REceived * @returns - latency */ getLocalSDPGenRemoteSDPRecv(): number; /** * ICE Setup Time * @returns - latency */ getICESetupTime(): number; /** * Audio ICE time * @returns - latency */ getAudioICESetupTime(): number; /** * Video ICE Time * @returns - latency */ getVideoICESetupTime(): number; /** * Share ICE Time * @returns - latency */ getShareICESetupTime(): number; /** * Stay Lobby Time * @returns - latency */ getStayLobbyTime(): number; /** * Page JMT * @returns - latency */ getPageJMT(): number; /** * Download Time JMT * @returns - latency */ getDownloadTimeJMT(): number; /** * Click To Interstitial * @returns - latency */ getClickToInterstitial(): number; /** * Click To Interstitial With User Delay * @returns - latency */ getClickToInterstitialWithUserDelay(): number; /** * Interstitial To Join Ok * @returns - latency */ getInterstitialToJoinOK(): number; /** * Call Init To MediaEngineReady * @returns - latency */ getCallInitMediaEngineReady(): number; /** * Interstitial To Media Ok * @returns - latency */ getInterstitialToMediaOKJMT(): number; /** * Total JMT * @returns - latency */ getTotalJMT(): number; /** * Total JMT With User Delay * @returns - latency */ getTotalJMTWithUserDelay(): number; /** * Join Conf JMT * @returns - latency */ getJoinConfJMT(): number; /** * Total Media JMT * @returns - latency */ getTotalMediaJMT(): number; /** * Total Media JMT With User Delay * @returns - latency */ getTotalMediaJMTWithUserDelay(): number; /** * Client JMT * @returns - latency */ getClientJMT(): number; /** * Audio setup delay receive */ getAudioJoinRespRxStart(): number; /** * Video setup delay receive */ getVideoJoinRespRxStart(): number; /** * Total latency for all get cluster request. */ getReachabilityClustersReqResp(): number; /** * Audio setup delay transmit */ getAudioJoinRespTxStart(): number; /** * Video setup delay transmit */ getVideoJoinRespTxStart(): number; /** * Time from share initiation to share stop (ms). */ getShareDuration(): number; /** * Total latency for all exchange ci token. */ getExchangeCITokenJMT(): number; /** * Total latency for all refresh captcha requests. */ getRefreshCaptchaReqResp(): number; /** * Get the latency for downloading intelligence models. * @returns - latency */ getDownloadIntelligenceModelsReqResp(): number; /** * Get the total latency for all other app API requests. * Excludes meeting info, because it's measured separately. * @returns - latency */ getOtherAppApiReqResp(): number; }