@atlaskit/editor-plugin-ncs-step-metrics
Version:
NcsStepMetrics plugin for @atlaskit/editor-core
100 lines (93 loc) • 3.97 kB
JavaScript
import { NCS_STORAGE } from '@atlaskit/editor-common/ncs-step-metrics';
import { StorageClient } from '@atlaskit/frontend-utilities';
import { getPayload } from './analytics';
import { calculateP90Value } from './calculateP90Value';
var storageClient = new StorageClient(NCS_STORAGE.NCS_STORAGE_CLIENT_KEY);
/**
* This function transforms the NCS session step metrics
* into a format suitable for analytics events.
* @param metrics - The NCS session step metrics to be transformed.
*/
var transformSessionStepMetrics = function transformSessionStepMetrics(metrics) {
return {
ncsSessionId: metrics.ncsSessionId,
totalStepSize: metrics.totalStepSize,
numberOfSteps: metrics.numberOfSteps,
maxStepSize: metrics.maxStepSize,
p90StepSize: calculateP90Value(metrics.stepSizeSumForP90)
};
};
/**
* Gets the current NCS session step metrics from storage.
* @param sessionId - The session ID for which to retrieve the metrics.
*/
export var getNcsSessionStepMetrics = function getNcsSessionStepMetrics(sessionId) {
if (!sessionId) {
return;
}
var ncsSessionStepMetrics = JSON.parse(storageClient.getItem(NCS_STORAGE.NCS_SESSION_STEP_METRICS) || '{}');
var current = ncsSessionStepMetrics[sessionId];
if (current) {
return transformSessionStepMetrics(current);
}
return undefined;
};
/**
* Clears the NCS session step metrics and the active session from storage.
* @param sessionId - The session ID for which to clear the metrics.
*/
export var clearNcsSessionStepMetrics = function clearNcsSessionStepMetrics(sessionId) {
if (!sessionId) {
return;
}
// Clear the current NCS session step metrics from storage
var ncsSessionStepMetrics = JSON.parse(storageClient.getItem(NCS_STORAGE.NCS_SESSION_STEP_METRICS) || '{}');
if (ncsSessionStepMetrics[sessionId]) {
delete ncsSessionStepMetrics[sessionId];
if (Object.keys(ncsSessionStepMetrics).length === 0) {
storageClient.removeItem(NCS_STORAGE.NCS_SESSION_STEP_METRICS);
} else {
storageClient.setItemWithExpiry(NCS_STORAGE.NCS_SESSION_STEP_METRICS, JSON.stringify(ncsSessionStepMetrics));
}
}
// Clear the active session from storage
clearNcsActiveSession(sessionId);
};
/**
* Clears the active NCS session from storage.
* @param sessionId - The session ID for which to clear the active session.
*/
export var clearNcsActiveSession = function clearNcsActiveSession(sessionId) {
if (!sessionId) {
return;
}
var activeSessions = JSON.parse(storageClient.getItem(NCS_STORAGE.NCS_ACTIVE_SESSIONS) || '{}');
if (activeSessions[sessionId]) {
delete activeSessions[sessionId];
if (Object.keys(activeSessions).length === 0) {
storageClient.removeItem(NCS_STORAGE.NCS_ACTIVE_SESSIONS);
} else {
storageClient.setItemWithExpiry(NCS_STORAGE.NCS_ACTIVE_SESSIONS, JSON.stringify(activeSessions));
}
}
};
/**
* This function checks for any unfinished NCS sessions
* If it finds any, and the session is not active, it sends the analytics event
* @param api - The public plugin API to access the analytics plugin.
*/
export var checkForUnfinishedNcsSessions = function checkForUnfinishedNcsSessions(api) {
var ncsSessionStepMetrics = JSON.parse(storageClient.getItem(NCS_STORAGE.NCS_SESSION_STEP_METRICS) || '{}');
var activeNcsSessions = JSON.parse(storageClient.getItem(NCS_STORAGE.NCS_ACTIVE_SESSIONS) || '{}');
Object.keys(ncsSessionStepMetrics).forEach(function (id) {
if (!activeNcsSessions[id]) {
var metrics = transformSessionStepMetrics(ncsSessionStepMetrics[id]);
if (metrics) {
var _api$analytics;
var payload = getPayload(metrics);
api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || (_api$analytics = _api$analytics.actions) === null || _api$analytics === void 0 || _api$analytics.fireAnalyticsEvent(payload);
clearNcsSessionStepMetrics(id);
}
}
});
};