Server IP : 85.214.239.14 / Your IP : 18.188.4.90 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Mon Sep 30 15:36:27 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/3/root/proc/3/root/usr/lib/node_modules/pm2/node_modules/tx2/src/utils/probes/ |
Upload File : |
var EDS = require('./EDS.js'); function Histogram(opts) { var self = this; opts = opts || {}; this._measurement = opts.measurement; this._call_fn = null; var methods = { min : this.getMin, max : this.getMax, sum : this.getSum, count : this.getCount, variance : this._calculateVariance, mean : this._calculateMean, stddev : this._calculateStddev, ema : this.getEma() }; if (methods[this._measurement]) this._call_fn = methods[this._measurement]; else { this._call_fn = function() { var percentiles = this.percentiles([0.5, 0.75, 0.95, 0.99, 0.999]); var medians = { median : percentiles[0.5], p75 : percentiles[0.75], p95 : percentiles[0.95], p99 : percentiles[0.99], p999 : percentiles[0.999] }; return medians[this._measurement]; } } this._sample = new EDS(); this._min = null; this._max = null; this._count = 0; this._sum = 0; // These are for the Welford algorithm for calculating running variance // without floating-point doom. this._varianceM = 0; this._varianceS = 0; this._ema = 0; } Histogram.prototype.update = function(value) { this._count++; this._sum += value; this._sample.update(value); this._updateMin(value); this._updateMax(value); this._updateVariance(value); this._updateEma(value); }; Histogram.prototype.percentiles = function(percentiles) { var values = this._sample .toArray() .sort(function(a, b) { return (a === b) ? 0 : a - b; }); var results = {}; for (var i = 0; i < percentiles.length; i++) { var percentile = percentiles[i]; if (!values.length) { results[percentile] = null; continue; } var pos = percentile * (values.length + 1); if (pos < 1) { results[percentile] = values[0]; } else if (pos >= values.length) { results[percentile] = values[values.length - 1]; } else { var lower = values[Math.floor(pos) - 1]; var upper = values[Math.ceil(pos) - 1]; results[percentile] = lower + (pos - Math.floor(pos)) * (upper - lower); } } return results; }; Histogram.prototype.reset = function() { this.constructor.call(this); }; Histogram.prototype.val = function() { if (typeof(this._call_fn) === 'function') return this._call_fn(); else return this._call_fn; }; Histogram.prototype.getMin = function() { return this._min; }; Histogram.prototype.getMax = function() { return this._max; }; Histogram.prototype.getSum = function() { return this._sum; }; Histogram.prototype.getCount = function() { return this._count; }; Histogram.prototype.getEma = function() { return this._ema; } Histogram.prototype.fullResults = function() { var percentiles = this.percentiles([0.5, 0.75, 0.95, 0.99, 0.999]); return { min : this._min, max : this._max, sum : this._sum, variance : this._calculateVariance(), mean : this._calculateMean(), stddev : this._calculateStddev(), count : this._count, median : percentiles[0.5], p75 : percentiles[0.75], p95 : percentiles[0.95], p99 : percentiles[0.99], p999 : percentiles[0.999], ema : this._ema }; }; Histogram.prototype._updateMin = function(value) { if (this._min === null || value < this._min) { this._min = value; //console.log(value); } }; Histogram.prototype._updateMax = function(value) { if (this._max === null || value > this._max) { this._max = value; } }; Histogram.prototype._updateVariance = function(value) { if (this._count === 1) return this._varianceM = value; var oldM = this._varianceM; this._varianceM += ((value - oldM) / this._count); this._varianceS += ((value - oldM) * (value - this._varianceM)); }; Histogram.prototype._updateEma = function(value) { if (this._count <= 1) return this._ema = this._calculateMean(); var alpha = 2 / (1 + this._count); this._ema = value * alpha + this._ema * (1 - alpha); } Histogram.prototype._calculateMean = function() { return (this._count === 0) ? 0 : this._sum / this._count; }; Histogram.prototype._calculateVariance = function() { return (this._count <= 1) ? null : this._varianceS / (this._count - 1); }; Histogram.prototype._calculateStddev = function() { return (this._count < 1) ? null : Math.sqrt(this._calculateVariance()); }; module.exports = Histogram;