UNPKG

msal

Version:
93 lines 4.44 kB
import DefaultEvent from "./DefaultEvent"; // for use in cache events var MSAL_CACHE_EVENT_VALUE_PREFIX = "msal.token"; var MSAL_CACHE_EVENT_NAME = "msal.cache_event"; var createEventKey = function (event) { return (event.telemetryCorrelationId + "-" + event.eventId + "-" + event.eventName); }; var TelemetryManager = /** @class */ (function () { function TelemetryManager(config, telemetryEmitter) { // correlation Id to list of events this.completedEvents = {}; // event key to event this.inProgressEvents = {}; // correlation id to map of eventname to count this.eventCountByCorrelationId = {}; //Implement after API EVENT this.onlySendFailureTelemetry = false; // TODO THROW if bad options this.telemetryPlatform = config.platform; this.clientId = config.clientId; this.onlySendFailureTelemetry = config.onlySendFailureTelemetry; // TODO, when i get to wiring this through, think about what it means if // a developer does not implement telem at all, we still instrument, but telemetryEmitter can be // optional? this.telemetryEmitter = telemetryEmitter; } TelemetryManager.prototype.startEvent = function (event) { if (!this.telemetryEmitter) { return; } var eventKey = createEventKey(event); this.inProgressEvents[eventKey] = event; }; TelemetryManager.prototype.stopEvent = function (event) { var eventKey = createEventKey(event); if (!this.telemetryEmitter || !this.inProgressEvents[eventKey]) { return; } event.stop(); this.incrementEventCount(event); var completedEvents = this.completedEvents[event.telemetryCorrelationId]; this.completedEvents[event.telemetryCorrelationId] = (completedEvents || []).concat([event]); delete this.inProgressEvents[eventKey]; }; TelemetryManager.prototype.flush = function (correlationId) { var _this = this; // If there is only unfinished events should this still return them? if (!this.telemetryEmitter || !this.completedEvents[correlationId]) { return; } var orphanedEvents = this.getOrphanedEvents(correlationId); orphanedEvents.forEach(function (event) { return _this.incrementEventCount(event); }); var eventsToFlush = this.completedEvents[correlationId].concat(orphanedEvents); delete this.completedEvents[correlationId]; var eventCountsToFlush = this.eventCountByCorrelationId[correlationId]; delete this.eventCountByCorrelationId[correlationId]; // TODO add funcitonality for onlyFlushFailures after implementing api event? ?? if (!eventsToFlush || !eventsToFlush.length) { return; } var defaultEvent = new DefaultEvent(this.telemetryPlatform, correlationId, this.clientId, eventCountsToFlush); var eventsWithDefaultEvent = eventsToFlush.concat([defaultEvent]); this.telemetryEmitter(eventsWithDefaultEvent.map(function (e) { return e.get(); })); }; TelemetryManager.prototype.incrementEventCount = function (event) { var _a; // TODO, name cache event different? // if type is cache event, change name var eventName = event.eventName; var eventCount = this.eventCountByCorrelationId[event.telemetryCorrelationId]; if (!eventCount) { this.eventCountByCorrelationId[event.telemetryCorrelationId] = (_a = {}, _a[eventName] = 1, _a); } else { eventCount[eventName] = eventCount[eventName] ? eventCount[eventName] + 1 : 1; } }; TelemetryManager.prototype.getOrphanedEvents = function (correlationId) { var _this = this; return Object.keys(this.inProgressEvents) .reduce(function (memo, eventKey) { if (eventKey.indexOf(correlationId) !== -1) { var event_1 = _this.inProgressEvents[eventKey]; delete _this.inProgressEvents[eventKey]; return memo.concat([event_1]); } return memo; }, []); }; return TelemetryManager; }()); export default TelemetryManager; //# sourceMappingURL=TelemetryManager.js.map