123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- 'use strict';
- Object.defineProperty(exports, "__esModule", { value: true });
- const meter_1 = require("../utils/metrics/meter");
- const counter_1 = require("../utils/metrics/counter");
- const histogram_1 = require("../utils/metrics/histogram");
- const serviceManager_1 = require("../serviceManager");
- const constants_1 = require("../constants");
- const Debug = require("debug");
- const gauge_1 = require("../utils/metrics/gauge");
- var MetricType;
- (function (MetricType) {
- MetricType["meter"] = "meter";
- MetricType["histogram"] = "histogram";
- MetricType["counter"] = "counter";
- MetricType["gauge"] = "gauge";
- MetricType["metric"] = "metric";
- })(MetricType = exports.MetricType || (exports.MetricType = {}));
- var MetricMeasurements;
- (function (MetricMeasurements) {
- MetricMeasurements["min"] = "min";
- MetricMeasurements["max"] = "max";
- MetricMeasurements["sum"] = "sum";
- MetricMeasurements["count"] = "count";
- MetricMeasurements["variance"] = "variance";
- MetricMeasurements["mean"] = "mean";
- MetricMeasurements["stddev"] = "stddev";
- MetricMeasurements["median"] = "median";
- MetricMeasurements["p75"] = "p75";
- MetricMeasurements["p95"] = "p95";
- MetricMeasurements["p99"] = "p99";
- MetricMeasurements["p999"] = "p999";
- })(MetricMeasurements = exports.MetricMeasurements || (exports.MetricMeasurements = {}));
- class Metric {
- }
- exports.Metric = Metric;
- class MetricBulk extends Metric {
- }
- exports.MetricBulk = MetricBulk;
- class HistogramOptions extends Metric {
- }
- exports.HistogramOptions = HistogramOptions;
- class MetricService {
- constructor() {
- this.metrics = new Map();
- this.timer = null;
- this.transport = null;
- this.logger = Debug('axm:services:metrics');
- }
- init() {
- this.transport = serviceManager_1.ServiceManager.get('transport');
- if (this.transport === null)
- return this.logger('Failed to init metrics service cause no transporter');
- this.logger('init');
- this.timer = setInterval(() => {
- if (this.transport === null)
- return this.logger('Abort metrics update since transport is not available');
- this.logger('refreshing metrics value');
- for (let metric of this.metrics.values()) {
- metric.value = metric.handler();
- }
- this.logger('sending update metrics value to transporter');
- const metricsToSend = Array.from(this.metrics.values())
- .filter(metric => {
- if (metric === null || metric === undefined)
- return false;
- if (metric.value === undefined || metric.value === null)
- return false;
- const isNumber = typeof metric.value === 'number';
- const isString = typeof metric.value === 'string';
- const isBoolean = typeof metric.value === 'boolean';
- const isValidNumber = !isNaN(metric.value);
- return isString || isBoolean || (isNumber && isValidNumber);
- });
- this.transport.setMetrics(metricsToSend);
- }, constants_1.default.METRIC_INTERVAL);
- this.timer.unref();
- }
- registerMetric(metric) {
- if (typeof metric.name !== 'string') {
- console.error(`Invalid metric name declared: ${metric.name}`);
- return console.trace();
- }
- else if (typeof metric.type !== 'string') {
- console.error(`Invalid metric type declared: ${metric.type}`);
- return console.trace();
- }
- else if (typeof metric.handler !== 'function') {
- console.error(`Invalid metric handler declared: ${metric.handler}`);
- return console.trace();
- }
- if (typeof metric.historic !== 'boolean') {
- metric.historic = true;
- }
- this.logger(`Registering new metric: ${metric.name}`);
- this.metrics.set(metric.name, metric);
- }
- meter(opts) {
- const metric = {
- name: opts.name,
- type: MetricType.meter,
- id: opts.id,
- historic: opts.historic,
- implementation: new meter_1.default(opts),
- unit: opts.unit,
- handler: function () {
- return this.implementation.isUsed() ? this.implementation.val() : NaN;
- }
- };
- this.registerMetric(metric);
- return metric.implementation;
- }
- counter(opts) {
- const metric = {
- name: opts.name,
- type: MetricType.counter,
- id: opts.id,
- historic: opts.historic,
- implementation: new counter_1.default(opts),
- unit: opts.unit,
- handler: function () {
- return this.implementation.isUsed() ? this.implementation.val() : NaN;
- }
- };
- this.registerMetric(metric);
- return metric.implementation;
- }
- histogram(opts) {
- if (opts.measurement === undefined || opts.measurement === null) {
- opts.measurement = MetricMeasurements.mean;
- }
- const metric = {
- name: opts.name,
- type: MetricType.histogram,
- id: opts.id,
- historic: opts.historic,
- implementation: new histogram_1.default(opts),
- unit: opts.unit,
- handler: function () {
- return this.implementation.isUsed() ?
- (Math.round(this.implementation.val() * 100) / 100) : NaN;
- }
- };
- this.registerMetric(metric);
- return metric.implementation;
- }
- metric(opts) {
- let metric;
- if (typeof opts.value === 'function') {
- metric = {
- name: opts.name,
- type: MetricType.gauge,
- id: opts.id,
- implementation: undefined,
- historic: opts.historic,
- unit: opts.unit,
- handler: opts.value
- };
- }
- else {
- metric = {
- name: opts.name,
- type: MetricType.gauge,
- id: opts.id,
- historic: opts.historic,
- implementation: new gauge_1.default(),
- unit: opts.unit,
- handler: function () {
- return this.implementation.isUsed() ? this.implementation.val() : NaN;
- }
- };
- }
- this.registerMetric(metric);
- return metric.implementation;
- }
- deleteMetric(name) {
- return this.metrics.delete(name);
- }
- destroy() {
- if (this.timer !== null) {
- clearInterval(this.timer);
- }
- this.metrics.clear();
- }
- }
- exports.MetricService = MetricService;
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQTs7QUFFWixrREFBMEM7QUFDMUMsc0RBQThDO0FBQzlDLDBEQUFrRDtBQUNsRCxzREFBMkQ7QUFDM0QsNENBQW9DO0FBRXBDLCtCQUE4QjtBQUM5QixrREFBMEM7QUFFMUMsSUFBWSxVQU1YO0FBTkQsV0FBWSxVQUFVO0lBQ3BCLDZCQUFpQixDQUFBO0lBQ2pCLHFDQUF5QixDQUFBO0lBQ3pCLGlDQUFxQixDQUFBO0lBQ3JCLDZCQUFpQixDQUFBO0lBQ2pCLCtCQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFOVyxVQUFVLEdBQVYsa0JBQVUsS0FBVixrQkFBVSxRQU1yQjtBQUVELElBQVksa0JBYVg7QUFiRCxXQUFZLGtCQUFrQjtJQUM1QixpQ0FBYSxDQUFBO0lBQ2IsaUNBQWEsQ0FBQTtJQUNiLGlDQUFhLENBQUE7SUFDYixxQ0FBaUIsQ0FBQTtJQUNqQiwyQ0FBdUIsQ0FBQTtJQUN2QixtQ0FBZSxDQUFBO0lBQ2YsdUNBQW1CLENBQUE7SUFDbkIsdUNBQW1CLENBQUE7SUFDbkIsaUNBQWEsQ0FBQTtJQUNiLGlDQUFhLENBQUE7SUFDYixpQ0FBYSxDQUFBO0lBQ2IsbUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBYlcsa0JBQWtCLEdBQWxCLDBCQUFrQixLQUFsQiwwQkFBa0IsUUFhN0I7QUF1Q0QsTUFBYSxNQUFNO0NBMEJsQjtBQTFCRCx3QkEwQkM7QUFFRCxNQUFhLFVBQVcsU0FBUSxNQUFNO0NBRXJDO0FBRkQsZ0NBRUM7QUFFRCxNQUFhLGdCQUFpQixTQUFRLE1BQU07Q0FFM0M7QUFGRCw0Q0FFQztBQUVELE1BQWEsYUFBYTtJQUExQjtRQUVVLFlBQU8sR0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUNoRCxVQUFLLEdBQXdCLElBQUksQ0FBQTtRQUNqQyxjQUFT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
|