@grafana/faro-core
Version:
Core package of Faro.
48 lines • 2.24 kB
JavaScript
import { TransportItemType } from '../../transports';
import { deepEqual, getCurrentTimestamp, isEmpty, isNull, stringifyObjectValues } from '../../utils';
import { timestampToIsoString } from '../../utils/date';
import { USER_ACTION_START } from '../const';
export function initializeMeasurementsAPI({ internalLogger, config, metas, transports, tracesApi, actionBuffer, getMessage, }) {
internalLogger.debug('Initializing measurements API');
let lastPayload = null;
const pushMeasurement = (payload, { skipDedupe, context, spanContext, timestampOverwriteMs } = {}) => {
try {
const ctx = stringifyObjectValues(context);
const item = {
type: TransportItemType.MEASUREMENT,
payload: Object.assign(Object.assign({}, payload), { trace: spanContext
? {
trace_id: spanContext.traceId,
span_id: spanContext.spanId,
}
: tracesApi.getTraceContext(), timestamp: timestampOverwriteMs ? timestampToIsoString(timestampOverwriteMs) : getCurrentTimestamp(), context: isEmpty(ctx) ? undefined : ctx }),
meta: metas.value,
};
const testingPayload = {
type: item.payload.type,
values: item.payload.values,
context: item.payload.context,
};
if (!skipDedupe && config.dedupe && !isNull(lastPayload) && deepEqual(testingPayload, lastPayload)) {
internalLogger.debug('Skipping measurement push because it is the same as the last one\n', item.payload);
return;
}
lastPayload = testingPayload;
internalLogger.debug('Pushing measurement\n', item);
const msg = getMessage();
if (msg && msg.type === USER_ACTION_START) {
actionBuffer.addItem(item);
}
else {
transports.execute(item);
}
}
catch (err) {
internalLogger.error('Error pushing measurement\n', err);
}
};
return {
pushMeasurement,
};
}
//# sourceMappingURL=initialize.js.map