swstats
Version:
Sliding window statistics
3 lines (2 loc) • 11 kB
JavaScript
/*! swstats 2018-07-14 */
"use strict";function _defineProperty(t,s,n){return s in t?Object.defineProperty(t,s,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[s]=n,t}function _classCallCheck(t,s){if(!(t instanceof s))throw new TypeError("Cannot call a class as a function")}var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_createClass=function(){function t(t,s){for(var n=0;n<s.length;n++){var e=s[n];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(t,e.key,e)}}return function(s,n,e){return n&&t(s.prototype,n),e&&t(s,e),s}}();!function t(s,n,e){function r(a,o){if(!n[a]){if(!s[a]){var u="function"==typeof require&&require;if(!o&&u)return u(a,!0);if(i)return i(a,!0);var h=new Error("Cannot find module '"+a+"'");throw h.code="MODULE_NOT_FOUND",h}var f=n[a]={exports:{}};s[a][0].call(f.exports,function(t){var n=s[a][1][t];return r(n||t)},f,f.exports,t,s,n,e)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a<e.length;a++)r(e[a]);return r}({1:[function(t,s,n){!function(s){var n=t("./index");s.SWindow=n}(window)},{"./index":2}],2:[function(t,s,n){var e=t("./lib/ops"),r=t("./lib/timestats"),i=t("./lib/sizestats");s.exports={TimeStats:r,SizeStats:i,Operation:e,register:e.register}},{"./lib/ops":4,"./lib/sizestats":6,"./lib/timestats":7}],3:[function(t,s,n){s.exports={sum:function(t,s,n,e,r,i){t=void 0===t?{}:t;for(var a=s.length,o=n.length,u=0;u<a;u++)for(var h in s[u].v)t[h]=t[h]||0,t[h]+=s[u].v[h];for(var f=0;f<o;f++)for(var c in n[f].v)t[c]=t[c]||0,t[c]-=n[f].v[c];return t},freq:function(t,s,n,e,r,i){var a=r.sum,o=0,u={};for(var h in a)o+=a[h];for(var f in a)u[f]=a[f]/o;return u},mode:function(t,s,n,e,r,i){var a=r.sum,o=[];for(var u in a)o.push({k:u,t:a[u]});return o.sort(function(t,s){return t.t-s.t}),(o.pop()||{}).k}}},{}],4:[function(t,s,n){function e(t,s,n,e,r){u[t][s]={fn:e,deps:n},r&&a[t].push(s)}var r=t("./nops"),i=t("./cops"),a={numeric:["count","sum","max","min","avg","stdev"],category:["sum","freq","mode"]},o={numeric:"numeric",category:"category"},u={numeric:{count:{fn:r.count,deps:[]},sum:{fn:r.sum,deps:[]},max:{fn:r.max,deps:[]},min:{fn:r.min,deps:[]},avg:{fn:r.avg,deps:[]},stdev:{fn:r.stdev,deps:["avg"]}},category:{sum:{fn:i.sum,deps:[]},freq:{fn:i.freq,deps:["sum"]},mode:{fn:i.mode,deps:["sum"]}}};s.exports={NOps:r,COps:i,RXOps:u,DEFOps:a,Types:o,register:e}},{"./cops":3,"./nops":5}],5:[function(t,s,n){var e={count:function(t,s,n,e,r,i){for(var a=0,o=e.length,u=0;u<o;u++)a+=e[u].l||1;return a},sum:function(t,s,n,e,r,i){t=void 0===t?0:t;for(var a=s.length,o=n.length,u=0;u<a;u++)t+=s[u].v;for(var h=0;h<o;h++)t-=n[h].v;return t},max:function(t,s,n,e,r,i){for(var a=-1/0,o=e.length,u=0;u<o;u++)a=Math.max(a,e[u].max);return a},min:function(t,s,n,e,r,i){for(var a=1/0,o=e.length,u=0;u<o;u++)a=Math.min(a,e[u].min);return a},avg:function(t,s,n,r,i,a){var o=e.count(0,0,0,s),u=e.count(0,0,0,n),h=e.count(0,0,0,r),f=h-o+u;t=void 0===t?0:t,t*=f;for(var c=0;c<s.length;c++)t+=s[c].v;for(var p=0;p<n.length;p++)t-=n[p].v;return t/=h,isNaN(t)?0:t},stdev:function(t,s,n,r,i,a){a.stdev=a.stdev||{avg:1,sqsum:0,sum:0,stdev:0};for(var o=e.count(0,0,0,s),u=e.count(0,0,0,n),h=(e.count(0,0,0,r),r.length),f=(a.avg,a.stdev.avg,a.stdev.sqsum),c=a.stdev.sum,p=i.avg||0,v=f,l=c,_=0;_<n.length;_++){var m=n[_].v/(n[_].l||1);v-=m*m,l-=m}for(var y=0;y<s.length;y++){var d=s[y].v/(s[y].l||1);v+=d*d,l+=d}var g=Math.sqrt((v-2*p*l+h*p*p)/h);return{avg:p,sqsum:v,sum:l,stdev:g}}};s.exports=e},{}],6:[function(t,s,n){var e=t("./ops"),r=t("./util"),i=e.Types,a=e.RXOps,o=e.DEFOps,u={type:i.numeric,ops:o.numeric,step:1e3},h=function(){function t(s,n){_classCallCheck(this,t),n=n||u,this._options=n,this._arr=[],this._size=s||1e3,this._type=n.type||u.type,this._ops=n.ops||o[this._type],this.stats=r.clone(n.stats||{}),r.sortOps(this._ops,this._type)}return _createClass(t,[{key:"clean",value:function(){this._arr=[],this._oldstats={},this.stats=r.clone(this._options.stats||{})}},{key:"push",value:function(t){return t=t instanceof Array?t:[t],this._type==i.numeric?this._pushNum(t):this._pushCat(t)}},{key:"_pushNum",value:function(t){var s=this,n=this._arr,e=[],i=this._type,o=r.clone(this.stats);for((t=t.map(function(t){return{v:t,l:1,max:t,min:t}})).forEach(function(t){return s._arr.push(t)});this._arr.length>this._size;)e.push(this._arr.shift());return this._ops.forEach(function(r){s.stats[r]=a[i][r].fn(s.stats[r],t,e,n,s.stats,o)}),this}},{key:"_pushCat",value:function(t){var s=this,n=this._arr,e=[],i=this._type,o=r.clone(this.stats),u={v:{}};for(t.forEach(function(t){u.v[t]=u.v[t]||0,u.v[t]++}),this._arr.push(u);this._arr.length>this._size;)e.push(this._arr.shift());return this._ops.forEach(function(t){s.stats[t]=a[i][t].fn(s.stats[t],[u],e,n,s.stats,o)}),this}},{key:"length",get:function(){return this._arr.length}},{key:"window",get:function(){var t=this,s=this._type;return this._arr.map(function(n){var e={};return t._ops.forEach(function(t){e[t]=a[s][t].fn(void 0,[n],[],[n],e,{})}),e})}}]),t}();s.exports=h},{"./ops":4,"./util":8}],7:[function(t,s,n){var e=t("./ops"),r=t("./util"),i=e.Types,a=e.RXOps,o=e.DEFOps,u={type:i.numeric,ops:o.numeric,step:1e3},h=[];setInterval(function(){var t=Date.now();h.filter(function(t){return!t._pause}).forEach(function(s){for(var n=s._arr,e=s._time,i=s._type,o=[],u=r.clone(s.stats);n.length&&t-n[0].t>e;)o.push(n.shift());s._ops.forEach(function(t){s.stats[t]=a[i][t].fn(s.stats[t],[],o,s._arr,s.stats,u)})})},1e3);var f=function(){function t(s,n){_classCallCheck(this,t),n=n||u,this._options=n,this._arr=[],this._time=s||1e4,this._tst=n.timestamp||t.TS.ABSOLUTE,this._type=n.type||u.type,this._ops=n.ops||o[this._type],this._step=n.step||u.step,this._pause=!1,this._active=!0,this._oldstats={},this._mints=1/0,this._maxts=-1/0,this.stats=r.clone(n.stats||{}),r.sortOps(this._ops,this._type),this._tst==t.TS.ABSOLUTE&&h.push(this)}return _createClass(t,null,[{key:"TS",get:function(){return{ABSOLUTE:"absolute",RELATIVE:"relative"}}}]),_createClass(t,[{key:"clean",value:function(){this._arr=[],this._oldstats={},this.stats=r.clone(this._options.stats||{})}},{key:"push",value:function(s){if(this._active&&!this._pause)return s=s instanceof Array?s:[s],this._tst==t.TS.ABSOLUTE?this._type==i.numeric?this._pushNum(s):this._pushCat(s):this._type==i.numeric?this._pushNumRel(s):this._pushCatRel(s)}},{key:"pause",value:function(){this._pause=!0}},{key:"resume",value:function(t){var s=this._arr;if(t&&s.length){var n=Date.now()-s[s.length].t;s.length.forEach(function(t){return t.t+=n})}this._pause=!1}},{key:"destroy",value:function(){var t=h.indexOf(this);t>=0&&h.splice(t,1),this._active=!1}},{key:"_pushNum",value:function(t){var s=this,n=Date.now(),e=this._arr,i=this._type,o=r.clone(this.stats);t=t.map(function(t){return{t:n,v:t,l:1,max:t,min:t}}),e.length||e.push({t:n,v:0,l:0,max:-1/0,min:1/0});var u=e[e.length-1];if(n-u.t<this._step){u=r.clone(u),t.forEach(function(t){u.v+=t.v,u.l+=1,u.max=Math.max(u.max,t.v),u.min=Math.min(u.min,t.v)});var h=[e.pop()],f=[u];e.push(u),this._ops.forEach(function(t){s.stats[t]=a[i][t].fn(s.stats[t],f,h,e,s.stats,o)})}else t.forEach(function(t){e.push(t)}),this._ops.forEach(function(n){s.stats[n]=a[i][n].fn(s.stats[n],t,[],e,s.stats,o)});return this}},{key:"_pushNumRel",value:function(t){var s=this,n=Date.now(),e=this._arr,i=this._type,o=r.clone(this.stats);(t=t.map(function(t){return{t:t.t||n,v:t.v,l:1,max:t.v,min:t.v}})).forEach(function(t){if(!e.length)return e.push(t),s._mints=t.t,void(s._maxts=t.t);if(!(s._maxts-t.t>s._time)){var n=e.map(function(s,n){return{dt:Math.abs(s.t-t.t),i:n}}).sort(function(t,s){return s.dt-t.dt}).pop(),u=e[n.i];if(Math.abs(t.t-u.t)<s._step){var h=r.clone(u);h.v+=t.v,h.l+=1,h.max=Math.max(h.max,t.v),h.min=Math.min(h.min,t.v);var f=e.splice(n.i,1),c=[h];e.push(h),s._ops.forEach(function(t){s.stats[t]=a[i][t].fn(s.stats[t],c,f,e,s.stats,o)})}else e.push(t),s._ops.forEach(function(n){s.stats[n]=a[i][n].fn(s.stats[n],[t],[],e,s.stats,o)});s._mints=Math.min(t.t,s._mints),s._maxts=Math.max(t.t,s._maxts),o=r.clone(s.stats)}}),e.sort(function(t,s){return t.t-s.t});for(var u=[];Math.abs(this._mints-this._maxts)>this._time;)u.push(e.shift()),this._mints=e[0].t;return u.length&&this._ops.forEach(function(t){s.stats[t]=a[i][t].fn(s.stats[t],[],u,e,s.stats,o)}),this}},{key:"_pushCat",value:function(t){var s=this,n=Date.now(),e=this._arr,i=this._type,o=r.clone(this.stats),u={};t.forEach(function(t){u[t]=u[t]||0,u[t]++}),e.length||e.push({t:n,v:{}});var h=r.clone(e[e.length-1]);if(n-h.t<this._step){for(var f in u)h.v[f]=h.v[f]||0,h.v[f]+=u[f];var c=[e.pop()],p=[h];e.push(h),this._ops.forEach(function(t){s.stats[t]=a[i][t].fn(s.stats[t],p,c,e,s.stats,o)})}else{var v={t:n,v:u};e.push(v),this._ops.forEach(function(t){s.stats[t]=a[i][t].fn(s.stats[t],[v],[],e,s.stats,o)})}return this}},{key:"_pushCatRel",value:function(t){var s=this,n=this._arr,e=this._type,i=r.clone(this.stats);t.forEach(function(t){if(!n.length)return n.push({t:t.t,v:_defineProperty({},t.v,1)}),s._mints=t.t,void(s._maxts=t.t);if(!(s._maxts-t.t>s._time)){var o=n.map(function(s,n){return{dt:Math.abs(s.t-t.t),i:n}}).sort(function(t,s){return s.dt-t.dt}).pop(),u=n[o.i];if(Math.abs(t.t-u.t)<s._step){var h=r.clone(u);h.v[t.v]=h.v[t.v]||0,h.v[t.v]+=1;var f=n.splice(o.i,1),c=[h];n.push(h),s._ops.forEach(function(t){s.stats[t]=a[e][t].fn(s.stats[t],c,f,n,s.stats,i)})}else{var p={t:t.t,v:_defineProperty({},t.v,1)};n.push(p),s._ops.forEach(function(t){s.stats[t]=a[e][t].fn(s.stats[t],p,[],n,s.stats,i)})}s._mints=Math.min(t.t,s._mints),s._maxts=Math.max(t.t,s._maxts),i=r.clone(s.stats)}}),n.sort(function(t,s){return t.t-s.t});for(var o=[];Math.abs(this._mints-this._maxts)>this._time;)o.push(n.shift()),this._mints=n[0].t;return o.length&&this._ops.forEach(function(t){s.stats[t]=a[e][t].fn(s.stats[t],[],o,n,s.stats,i)}),this}},{key:"length",get:function(){return this._arr.length}},{key:"window",get:function(){var t=this,s=this._type;return this._arr.map(function(n){var e={t:n.t};return t._ops.forEach(function(t){e[t]=a[s][t].fn(void 0,[n],[],[n],e,{})}),e})}}]),t}();s.exports=f},{"./ops":4,"./util":8}],8:[function(t,s,n){function e(t){if("object"!=(void 0===t?"undefined":_typeof(t)))return t;var s={};for(var n in t)s[n]=e(t[n]);return s}function r(t,s,n){var e=a[n][t].deps;return!!e.length&&(e.indexOf(s)>=0||e.reduce(function(t,e){return t||r(e,s,n)},!1))}function i(t,s){var n={},e=!1;t.forEach(function(t){return n[t]=!0});do{e=!1,t.forEach(function(r){a[s][r].deps.forEach(function(s){n[s]||(n[s]=!0,t.push(s),e=!0)})})}while(e);if(t.length>1){var i=null,o=!1;do{o=!1;for(var u=0;u<t.length;u++)for(var h=u;h<t.length;h++)r(t[u],t[h],s)&&(i=t[u],t[u]=t[h],t[h]=i,o=!0)}while(o)}}var a=t("./ops").RXOps;s.exports={clone:e,depends:r,sortOps:i}},{"./ops":4}]},{},[1]);