import {uniqueId} from 'lodash'; import Batcher from '../batcher'; import {prepareDiagnosticMetricItem} from './call-diagnostic-metrics.util'; import {CALL_DIAGNOSTIC_LOG_IDENTIFIER} from './config'; import {generateCommonErrorMetadata} from '../utils'; const CallDiagnosticEventsBatcher = Batcher.extend({ namespace: 'Metrics', /** * Prepare item * @param {any} item * @returns {Promise} */ prepareItem(item) { return Promise.resolve(prepareDiagnosticMetricItem(this.webex, item)); }, /** * Prepare request, add time sensitive date etc. * @param {any[]} queue * @returns {Promise} */ prepareRequest(queue) { // Add sent timestamp queue.forEach((item) => { item.eventPayload.originTime = item.eventPayload.originTime || {}; item.eventPayload.originTime.sent = new Date().toISOString(); }); return Promise.resolve(queue); }, /** * * @param {any} payload * @returns {Promise} */ submitHttpRequest(payload) { const batchId = uniqueId('ca-batch-'); return this.webex .request({ method: 'POST', service: 'metrics', resource: 'clientmetrics', body: { metrics: payload, }, waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout, }) .then((res) => { this.webex.logger.log( CALL_DIAGNOSTIC_LOG_IDENTIFIER, `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request successful.` ); return res; }) .catch((err) => { this.webex.logger.error( CALL_DIAGNOSTIC_LOG_IDENTIFIER, `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request failed:`, `error: ${generateCommonErrorMetadata(err)}` ); return Promise.reject(err); }); }, }); export default CallDiagnosticEventsBatcher;