1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | Object.defineProperty(exports, "__esModule", { value: true });
|
7 | var tslib_1 = require("tslib");
|
8 | var DefaultEvent_1 = tslib_1.__importDefault(require("./DefaultEvent"));
|
9 | var Constants_1 = require("../utils/Constants");
|
10 | var ApiEvent_1 = tslib_1.__importDefault(require("./ApiEvent"));
|
11 | var HttpEvent_1 = tslib_1.__importDefault(require("./HttpEvent"));
|
12 | var packageMetadata_1 = require("../packageMetadata");
|
13 | var TelemetryManager = (function () {
|
14 | function TelemetryManager(config, telemetryEmitter, logger) {
|
15 |
|
16 | this.completedEvents = {};
|
17 |
|
18 | this.inProgressEvents = {};
|
19 |
|
20 | this.eventCountByCorrelationId = {};
|
21 |
|
22 | this.onlySendFailureTelemetry = false;
|
23 |
|
24 | this.telemetryPlatform = tslib_1.__assign({ sdk: Constants_1.Constants.libraryName, sdkVersion: packageMetadata_1.version, networkInformation: {
|
25 |
|
26 | connectionSpeed: typeof navigator !== "undefined" && navigator.connection && navigator.connection.effectiveType
|
27 | } }, config.platform);
|
28 | this.clientId = config.clientId;
|
29 | this.onlySendFailureTelemetry = config.onlySendFailureTelemetry;
|
30 | |
31 |
|
32 |
|
33 |
|
34 |
|
35 | this.telemetryEmitter = telemetryEmitter;
|
36 | this.logger = logger;
|
37 | }
|
38 | TelemetryManager.getTelemetrymanagerStub = function (clientId, logger) {
|
39 | var applicationName = "UnSetStub";
|
40 | var applicationVersion = "0.0";
|
41 | var telemetryEmitter = function () { };
|
42 | var telemetryPlatform = {
|
43 | applicationName: applicationName,
|
44 | applicationVersion: applicationVersion
|
45 | };
|
46 | var telemetryManagerConfig = {
|
47 | platform: telemetryPlatform,
|
48 | clientId: clientId
|
49 | };
|
50 | return new this(telemetryManagerConfig, telemetryEmitter, logger);
|
51 | };
|
52 | TelemetryManager.prototype.startEvent = function (event) {
|
53 | this.logger.verbose("Telemetry Event started: " + event.key);
|
54 | if (!this.telemetryEmitter) {
|
55 | return;
|
56 | }
|
57 | event.start();
|
58 | this.inProgressEvents[event.key] = event;
|
59 | };
|
60 | TelemetryManager.prototype.stopEvent = function (event) {
|
61 | this.logger.verbose("Telemetry Event stopped: " + event.key);
|
62 | if (!this.telemetryEmitter || !this.inProgressEvents[event.key]) {
|
63 | return;
|
64 | }
|
65 | event.stop();
|
66 | this.incrementEventCount(event);
|
67 | var completedEvents = this.completedEvents[event.telemetryCorrelationId];
|
68 | this.completedEvents[event.telemetryCorrelationId] = tslib_1.__spreadArrays((completedEvents || []), [event]);
|
69 | delete this.inProgressEvents[event.key];
|
70 | };
|
71 | TelemetryManager.prototype.flush = function (correlationId) {
|
72 | var _this = this;
|
73 | this.logger.verbose("Flushing telemetry events: " + correlationId);
|
74 |
|
75 | if (!this.telemetryEmitter || !this.completedEvents[correlationId]) {
|
76 | return;
|
77 | }
|
78 | var orphanedEvents = this.getOrphanedEvents(correlationId);
|
79 | orphanedEvents.forEach(function (event) { return _this.incrementEventCount(event); });
|
80 | var eventsToFlush = tslib_1.__spreadArrays(this.completedEvents[correlationId], orphanedEvents);
|
81 | delete this.completedEvents[correlationId];
|
82 | var eventCountsToFlush = this.eventCountByCorrelationId[correlationId];
|
83 | delete this.eventCountByCorrelationId[correlationId];
|
84 |
|
85 | if (!eventsToFlush || !eventsToFlush.length) {
|
86 | return;
|
87 | }
|
88 | var defaultEvent = new DefaultEvent_1.default(this.telemetryPlatform, correlationId, this.clientId, eventCountsToFlush);
|
89 | var eventsWithDefaultEvent = tslib_1.__spreadArrays(eventsToFlush, [defaultEvent]);
|
90 | this.telemetryEmitter(eventsWithDefaultEvent.map(function (e) { return e.get(); }));
|
91 | };
|
92 | TelemetryManager.prototype.createAndStartApiEvent = function (correlationId, apiEventIdentifier) {
|
93 | var apiEvent = new ApiEvent_1.default(correlationId, this.logger.isPiiLoggingEnabled(), apiEventIdentifier);
|
94 | this.startEvent(apiEvent);
|
95 | return apiEvent;
|
96 | };
|
97 | TelemetryManager.prototype.stopAndFlushApiEvent = function (correlationId, apiEvent, wasSuccessful, errorCode) {
|
98 | apiEvent.wasSuccessful = wasSuccessful;
|
99 | if (errorCode) {
|
100 | apiEvent.apiErrorCode = errorCode;
|
101 | }
|
102 | this.stopEvent(apiEvent);
|
103 | this.flush(correlationId);
|
104 | };
|
105 | TelemetryManager.prototype.createAndStartHttpEvent = function (correlation, httpMethod, url, eventLabel) {
|
106 | var httpEvent = new HttpEvent_1.default(correlation, eventLabel);
|
107 | httpEvent.url = url;
|
108 | httpEvent.httpMethod = httpMethod;
|
109 | this.startEvent(httpEvent);
|
110 | return httpEvent;
|
111 | };
|
112 | TelemetryManager.prototype.incrementEventCount = function (event) {
|
113 | var _a;
|
114 | |
115 |
|
116 |
|
117 |
|
118 | var eventName = event.eventName;
|
119 | var eventCount = this.eventCountByCorrelationId[event.telemetryCorrelationId];
|
120 | if (!eventCount) {
|
121 | this.eventCountByCorrelationId[event.telemetryCorrelationId] = (_a = {},
|
122 | _a[eventName] = 1,
|
123 | _a);
|
124 | }
|
125 | else {
|
126 | eventCount[eventName] = eventCount[eventName] ? eventCount[eventName] + 1 : 1;
|
127 | }
|
128 | };
|
129 | TelemetryManager.prototype.getOrphanedEvents = function (correlationId) {
|
130 | var _this = this;
|
131 | return Object.keys(this.inProgressEvents)
|
132 | .reduce(function (memo, eventKey) {
|
133 | if (eventKey.indexOf(correlationId) !== -1) {
|
134 | var event_1 = _this.inProgressEvents[eventKey];
|
135 | delete _this.inProgressEvents[eventKey];
|
136 | return tslib_1.__spreadArrays(memo, [event_1]);
|
137 | }
|
138 | return memo;
|
139 | }, []);
|
140 | };
|
141 | return TelemetryManager;
|
142 | }());
|
143 | exports.default = TelemetryManager;
|
144 |
|
\ | No newline at end of file |