pubnub
Version:
Publish & Subscribe Real-time Messaging with PubNub
175 lines (142 loc) • 6.15 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _operations = _interopRequireDefault(require("../constants/operations"));
var _default = function () {
function _default(configuration) {
(0, _classCallCheck2["default"])(this, _default);
(0, _defineProperty2["default"])(this, "_maximumSamplesCount", 100);
(0, _defineProperty2["default"])(this, "_trackedLatencies", {});
(0, _defineProperty2["default"])(this, "_latencies", {});
this._maximumSamplesCount = configuration.maximumSamplesCount || this._maximumSamplesCount;
}
(0, _createClass2["default"])(_default, [{
key: "operationsLatencyForRequest",
value: function operationsLatencyForRequest() {
var _this = this;
var latencies = {};
Object.keys(this._latencies).forEach(function (endpointName) {
var operationLatencies = _this._latencies[endpointName];
var averageLatency = _this._averageLatency(operationLatencies);
if (averageLatency > 0) {
latencies["l_".concat(endpointName)] = averageLatency;
}
});
return latencies;
}
}, {
key: "startLatencyMeasure",
value: function startLatencyMeasure(operationType, identifier) {
if (operationType === _operations["default"].PNSubscribeOperation || !identifier) {
return;
}
this._trackedLatencies[identifier] = Date.now();
}
}, {
key: "stopLatencyMeasure",
value: function stopLatencyMeasure(operationType, identifier) {
if (operationType === _operations["default"].PNSubscribeOperation || !identifier) {
return;
}
var endpointName = this._endpointName(operationType);
var endpointLatencies = this._latencies[endpointName];
var startDate = this._trackedLatencies[identifier];
if (!endpointLatencies) {
endpointLatencies = this._latencies[endpointName] = [];
}
endpointLatencies.push(Date.now() - startDate);
if (endpointLatencies.length > this._maximumSamplesCount) {
endpointLatencies.splice(0, endpointLatencies.length - this._maximumSamplesCount);
}
delete this._trackedLatencies[identifier];
}
}, {
key: "_averageLatency",
value: function _averageLatency(latencies) {
var arrayReduce = function arrayReduce(accumulatedLatency, latency) {
return accumulatedLatency + latency;
};
return Math.floor(latencies.reduce(arrayReduce, 0) / latencies.length);
}
}, {
key: "_endpointName",
value: function _endpointName(operationType) {
var operation = null;
switch (operationType) {
case _operations["default"].PNPublishOperation:
operation = 'pub';
break;
case _operations["default"].PNSignalOperation:
operation = 'sig';
break;
case _operations["default"].PNHistoryOperation:
case _operations["default"].PNFetchMessagesOperation:
case _operations["default"].PNDeleteMessagesOperation:
case _operations["default"].PNMessageCounts:
operation = 'hist';
break;
case _operations["default"].PNUnsubscribeOperation:
case _operations["default"].PNWhereNowOperation:
case _operations["default"].PNHereNowOperation:
case _operations["default"].PNHeartbeatOperation:
case _operations["default"].PNSetStateOperation:
case _operations["default"].PNGetStateOperation:
operation = 'pres';
break;
case _operations["default"].PNAddChannelsToGroupOperation:
case _operations["default"].PNRemoveChannelsFromGroupOperation:
case _operations["default"].PNChannelGroupsOperation:
case _operations["default"].PNRemoveGroupOperation:
case _operations["default"].PNChannelsForGroupOperation:
operation = 'cg';
break;
case _operations["default"].PNPushNotificationEnabledChannelsOperation:
case _operations["default"].PNRemoveAllPushNotificationsOperation:
operation = 'push';
break;
case _operations["default"].PNCreateUserOperation:
case _operations["default"].PNUpdateUserOperation:
case _operations["default"].PNDeleteUserOperation:
case _operations["default"].PNGetUserOperation:
case _operations["default"].PNGetUsersOperation:
case _operations["default"].PNCreateSpaceOperation:
case _operations["default"].PNUpdateSpaceOperation:
case _operations["default"].PNDeleteSpaceOperation:
case _operations["default"].PNGetSpaceOperation:
case _operations["default"].PNGetSpacesOperation:
case _operations["default"].PNGetMembersOperation:
case _operations["default"].PNUpdateMembersOperation:
case _operations["default"].PNGetMembershipsOperation:
case _operations["default"].PNUpdateMembershipsOperation:
operation = 'obj';
break;
case _operations["default"].PNAddMessageActionOperation:
case _operations["default"].PNRemoveMessageActionOperation:
case _operations["default"].PNGetMessageActionsOperation:
operation = 'msga';
break;
case _operations["default"].PNAccessManagerGrant:
case _operations["default"].PNAccessManagerAudit:
operation = 'pam';
break;
case _operations["default"].PNAccessManagerGrantToken:
operation = 'pam3';
break;
default:
operation = 'time';
break;
}
return operation;
}
}]);
return _default;
}();
exports["default"] = _default;
module.exports = exports.default;
//# sourceMappingURL=telemetry_manager.js.map