@libp2p/simple-metrics 1.1.7-c628c44c5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -1,3 +1,4 @@
1
1
  (function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Libp2PSimpleMetrics = factory()}(typeof self !== 'undefined' ? self : this, function () {
2
- "use strict";var Libp2PSimpleMetrics=(()=>{var z=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var re=Object.prototype.hasOwnProperty;var ne=(r,e)=>{for(var t in e)z(r,t,{get:e[t],enumerable:!0})},oe=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of te(e))!re.call(r,o)&&o!==t&&z(r,o,{get:()=>e[o],enumerable:!(n=ee(e,o))||n.enumerable});return r};var se=r=>oe(z({},"__esModule",{value:!0}),r);var $e={};ne($e,{simpleMetrics:()=>Ue});var R=Symbol.for("@libp2p/service-capabilities"),Ne=Symbol.for("@libp2p/service-dependencies");var rt=new Uint8Array(0);function T(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function ie(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var d=r.charAt(o),m=d.charCodeAt(0);if(t[m]!==255)throw new TypeError(d+" is ambiguous");t[m]=o}var f=r.length,u=r.charAt(0),E=Math.log(f)/Math.log(256),s=Math.log(256)/Math.log(f);function i(a){if(a instanceof Uint8Array||(ArrayBuffer.isView(a)?a=new Uint8Array(a.buffer,a.byteOffset,a.byteLength):Array.isArray(a)&&(a=Uint8Array.from(a))),!(a instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(a.length===0)return"";for(var c=0,p=0,h=0,C=a.length;h!==C&&a[h]===0;)h++,c++;for(var y=(C-h)*s+1>>>0,b=new Uint8Array(y);h!==C;){for(var A=a[h],F=0,w=y-1;(A!==0||F<p)&&w!==-1;w--,F++)A+=256*b[w]>>>0,b[w]=A%f>>>0,A=A/f>>>0;if(A!==0)throw new Error("Non-zero carry");p=F,h++}for(var v=y-p;v!==y&&b[v]===0;)v++;for(var M=u.repeat(c);v<y;++v)M+=r.charAt(b[v]);return M}function l(a){if(typeof a!="string")throw new TypeError("Expected String");if(a.length===0)return new Uint8Array;var c=0;if(a[c]!==" "){for(var p=0,h=0;a[c]===u;)p++,c++;for(var C=(a.length-c)*E+1>>>0,y=new Uint8Array(C);a[c];){var b=t[a.charCodeAt(c)];if(b===255)return;for(var A=0,F=C-1;(b!==0||A<h)&&F!==-1;F--,A++)b+=f*y[F]>>>0,y[F]=b%256>>>0,b=b/256>>>0;if(b!==0)throw new Error("Non-zero carry");h=A,c++}if(a[c]!==" "){for(var w=C-h;w!==C&&y[w]===0;)w++;for(var v=new Uint8Array(p+(C-w)),M=p;w!==C;)v[M++]=y[w++];return v}}}function S(a){var c=l(a);if(c)return c;throw new Error(`Non-${e} character`)}return{encode:i,decodeUnsafe:l,decode:S}}var ae=ie,ce=ae,B=ce;var I=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},P=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return J(this,e)}},j=class{decoders;constructor(e){this.decoders=e}or(e){return J(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function J(r,e){return new j({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var D=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new I(e,t,n),this.decoder=new P(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function G({name:r,prefix:e,encode:t,decode:n}){return new D(r,e,t,n)}function L({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=B(t,r);return G({prefix:e,name:r,encode:n,decode:d=>T(o(d))})}function fe(r,e,t,n){let o={};for(let s=0;s<e.length;++s)o[e[s]]=s;let d=r.length;for(;r[d-1]==="=";)--d;let m=new Uint8Array(d*t/8|0),f=0,u=0,E=0;for(let s=0;s<d;++s){let i=o[r[s]];if(i===void 0)throw new SyntaxError(`Non-${n} character`);u=u<<t|i,f+=t,f>=8&&(f-=8,m[E++]=255&u>>f)}if(f>=t||255&u<<8-f)throw new SyntaxError("Unexpected end of data");return m}function ue(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,d="",m=0,f=0;for(let u=0;u<r.length;++u)for(f=f<<8|r[u],m+=8;m>t;)m-=t,d+=e[o&f>>m];if(m!==0&&(d+=e[o&f<<t-m]),n)for(;d.length*t&7;)d+="=";return d}function x({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return G({prefix:e,name:r,encode(o){return ue(o,n,t)},decode(o){return fe(o,n,t,r)}})}var X=x({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),ft=x({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),ut=x({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),lt=x({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),dt=x({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),pt=x({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),ht=x({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),mt=x({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),bt=x({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Z=L({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),wt=L({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var K=x({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Ft=x({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),vt=x({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Et=x({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});function le(r,e){try{if(typeof r=="string"&&r.length>0)return de(r);if(typeof r=="number"&&isFinite(r))return e?.long?he(r):pe(r);throw new Error("Value is not a string or number.")}catch(t){let n=me(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function de(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var O=le;function pe(r){let e=Math.abs(r);return e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function he(r){let e=Math.abs(r);return e>=864e5?$(r,e,864e5,"day"):e>=36e5?$(r,e,36e5,"hour"):e>=6e4?$(r,e,6e4,"minute"):e>=1e3?$(r,e,1e3,"second"):`${r} ms`}function $(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function me(r){return typeof r=="object"&&r!==null&&"message"in r}function _(r){t.debug=t,t.default=t,t.coerce=u,t.disable=d,t.enable=o,t.enabled=m,t.humanize=O,t.destroy=E,Object.keys(r).forEach(s=>{t[s]=r[s]}),t.names=[],t.skips=[],t.formatters={};function e(s){let i=0;for(let l=0;l<s.length;l++)i=(i<<5)-i+s.charCodeAt(l),i|=0;return t.colors[Math.abs(i)%t.colors.length]}t.selectColor=e;function t(s){let i,l=null,S,a;function c(...p){if(!c.enabled)return;let h=c,C=Number(new Date),y=C-(i||C);h.diff=y,h.prev=i,h.curr=C,i=C,p[0]=t.coerce(p[0]),typeof p[0]!="string"&&p.unshift("%O");let b=0;p[0]=p[0].replace(/%([a-zA-Z%])/g,(F,w)=>{if(F==="%%")return"%";b++;let v=t.formatters[w];if(typeof v=="function"){let M=p[b];F=v.call(h,M),p.splice(b,1),b--}return F}),t.formatArgs.call(h,p),(h.log||t.log).apply(h,p)}return c.namespace=s,c.useColors=t.useColors(),c.color=t.selectColor(s),c.extend=n,c.destroy=t.destroy,Object.defineProperty(c,"enabled",{enumerable:!0,configurable:!1,get:()=>l!==null?l:(S!==t.namespaces&&(S=t.namespaces,a=t.enabled(s)),a),set:p=>{l=p}}),typeof t.init=="function"&&t.init(c),c}function n(s,i){let l=t(this.namespace+(typeof i>"u"?":":i)+s);return l.log=this.log,l}function o(s){t.save(s),t.namespaces=s,t.names=[],t.skips=[];let i,l=(typeof s=="string"?s:"").split(/[\s,]+/),S=l.length;for(i=0;i<S;i++)l[i]&&(s=l[i].replace(/\*/g,".*?"),s[0]==="-"?t.skips.push(new RegExp("^"+s.substr(1)+"$")):t.names.push(new RegExp("^"+s+"$")))}function d(){let s=[...t.names.map(f),...t.skips.map(f).map(i=>"-"+i)].join(",");return t.enable(""),s}function m(s){if(s[s.length-1]==="*")return!0;let i,l;for(i=0,l=t.skips.length;i<l;i++)if(t.skips[i].test(s))return!1;for(i=0,l=t.names.length;i<l;i++)if(t.names[i].test(s))return!0;return!1}function f(s){return s.toString().substring(2,s.toString().length-2).replace(/\.\*\?$/,"*")}function u(s){return s instanceof Error?s.stack??s.message:s}function E(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var N=Fe(),be=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Ce(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function xe(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+O(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}var we=console.debug??console.log??(()=>{});function ge(r){try{r?N?.setItem("debug",r):N?.removeItem("debug")}catch{}}function ye(){let r;try{r=N?.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function Fe(){try{return localStorage}catch{}}function ve(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var Q=_({formatArgs:xe,save:ge,load:ye,useColors:Ce,setupFormatters:ve,colors:be,storage:N,log:we});var g=Q;g.formatters.b=r=>r==null?"undefined":Z.baseEncode(r);g.formatters.t=r=>r==null?"undefined":X.baseEncode(r);g.formatters.m=r=>r==null?"undefined":K.baseEncode(r);g.formatters.p=r=>r==null?"undefined":r.toString();g.formatters.c=r=>r==null?"undefined":r.toString();g.formatters.k=r=>r==null?"undefined":r.toString();g.formatters.a=r=>r==null?"undefined":r.toString();function Ee(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function W(r){let e=Ee(`${r}:trace`);return g.enabled(`${r}:trace`)&&g.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=g(`${r}:trace`)),Object.assign(g(r),{error:g(`${r}:error`),trace:e})}function Ae(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var Y=Ae;function Se(r){return r[Symbol.asyncIterator]!=null}function H(r){return r?.then!=null}function Me(r,e){let t=0;if(Se(r))return async function*(){for await(let u of r){let E=e(u,t++);H(E)&&await E,yield u}}();let n=Y(r),{value:o,done:d}=n.next();if(d===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let u of n){let E=e(u,t++);H(E)&&await E,yield u}}();let f=e;return function*(){yield o;for(let u of n)f(u,t++),yield u}()}var V=Me;var ke=W("libp2p:simple-metrics"),k=class{value=0;update(e){this.value=e}increment(e=1){this.value+=e}decrement(e=1){this.value-=e}reset(){this.value=0}timer(){let e=Date.now();return()=>{this.value=Date.now()-e}}},U=class{values={};update(e){Object.entries(e).forEach(([t,n])=>{this.values[t]=n})}increment(e){Object.entries(e).forEach(([t,n])=>{this.values[t]=this.values[t]??0;let o=typeof n=="number"?n:1;this.values[t]+=Number(o)})}decrement(e){Object.entries(e).forEach(([t,n])=>{this.values[t]=this.values[t]??0;let o=typeof n=="number"?n:1;this.values[t]-=Number(o)})}reset(){this.values={}}timer(e){let t=Date.now();return()=>{this.values[e]=Date.now()-t}}},q=class{metrics=new Map;transferStats;started;interval;intervalMs;onMetrics;constructor(e,t){this.started=!1,this._emitMetrics=this._emitMetrics.bind(this),this.intervalMs=t.intervalMs??1e3,this.onMetrics=t.onMetrics,this.transferStats=new Map}[Symbol.toStringTag]="@libp2p/metrics-simple";[R]=["@libp2p/metrics"];isStarted(){return this.started}start(){this.started=!0,this.interval=setInterval(this._emitMetrics,this.intervalMs)}stop(){this.started=!1,clearInterval(this.interval)}_emitMetrics(){Promise.resolve().then(async()=>{let e={};for(let[t,n]of this.metrics.entries())n instanceof k?e[t]=n.value:n instanceof U?e[t]=n.values:e[t]=await n();this.onMetrics(structuredClone(e))}).catch(e=>{ke.error("could not invoke onMetrics callback",e)})}_incrementValue(e,t){let n=this.transferStats.get(e)??0;this.transferStats.set(e,n+t)}_track(e,t){let n=this,o=e.sink;e.sink=async function(f){await o(V(f,u=>{n._incrementValue(`${t} sent`,u.byteLength)}))};let d=e.source;e.source=V(d,m=>{n._incrementValue(`${t} received`,m.byteLength)})}trackMultiaddrConnection(e){this._track(e,"global")}trackProtocolStream(e,t){e.protocol!=null&&this._track(e,e.protocol)}registerMetric(e,t={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(t?.calculate!=null){this.metrics.set(e,t.calculate);return}let n=new k;return this.metrics.set(e,n),n}registerMetricGroup(e,t={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(t?.calculate!=null){this.metrics.set(e,t.calculate);return}let n=new U;return this.metrics.set(e,n),n}registerCounter(e,t={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(t?.calculate!=null){this.metrics.set(e,t.calculate);return}let n=new k;return this.metrics.set(e,n),n}registerCounterGroup(e,t={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(t?.calculate!=null){this.metrics.set(e,t.calculate);return}let n=new U;return this.metrics.set(e,n),n}};function Ue(r){return e=>new q(e,r)}return se($e);})();
2
+ "use strict";var Libp2PSimpleMetrics=(()=>{var Se=Object.create;var I=Object.defineProperty;var Ve=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Ue=Object.getPrototypeOf,Oe=Object.prototype.hasOwnProperty;var j=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),je=(t,e)=>{for(var r in e)I(t,r,{get:e[r],enumerable:!0})},ie=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ze(e))!Oe.call(t,i)&&i!==r&&I(t,i,{get:()=>e[i],enumerable:!(n=Ve(e,i))||n.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?Se(Ue(t)):{},ie(e||!t||!t.__esModule?I(r,"default",{value:t,enumerable:!0}):r,t)),Ne=t=>ie(I({},"__esModule",{value:!0}),t);var re=j((Fr,ge)=>{function M(){}M.prototype.clear=function(){this._root=null,this.size=0};M.prototype.find=function(t){for(var e=this._root;e!==null;){var r=this._comparator(t,e.data);if(r===0)return e.data;e=e.get_child(r>0)}return null};M.prototype.findIter=function(t){for(var e=this._root,r=this.iterator();e!==null;){var n=this._comparator(t,e.data);if(n===0)return r._cursor=e,r;r._ancestors.push(e),e=e.get_child(n>0)}return null};M.prototype.lowerBound=function(t){for(var e=this._root,r=this.iterator(),n=this._comparator;e!==null;){var i=n(t,e.data);if(i===0)return r._cursor=e,r;r._ancestors.push(e),e=e.get_child(i>0)}for(var o=r._ancestors.length-1;o>=0;--o)if(e=r._ancestors[o],n(t,e.data)<0)return r._cursor=e,r._ancestors.length=o,r;return r._ancestors.length=0,r};M.prototype.upperBound=function(t){for(var e=this.lowerBound(t),r=this._comparator;e.data()!==null&&r(e.data(),t)===0;)e.next();return e};M.prototype.min=function(){var t=this._root;if(t===null)return null;for(;t.left!==null;)t=t.left;return t.data};M.prototype.max=function(){var t=this._root;if(t===null)return null;for(;t.right!==null;)t=t.right;return t.data};M.prototype.iterator=function(){return new U(this)};M.prototype.each=function(t){for(var e=this.iterator(),r;(r=e.next())!==null;)if(t(r)===!1)return};M.prototype.reach=function(t){for(var e=this.iterator(),r;(r=e.prev())!==null;)if(t(r)===!1)return};function U(t){this._tree=t,this._ancestors=[],this._cursor=null}U.prototype.data=function(){return this._cursor!==null?this._cursor.data:null};U.prototype.next=function(){if(this._cursor===null){var t=this._tree._root;t!==null&&this._minNode(t)}else if(this._cursor.right===null){var e;do if(e=this._cursor,this._ancestors.length)this._cursor=this._ancestors.pop();else{this._cursor=null;break}while(this._cursor.right===e)}else this._ancestors.push(this._cursor),this._minNode(this._cursor.right);return this._cursor!==null?this._cursor.data:null};U.prototype.prev=function(){if(this._cursor===null){var t=this._tree._root;t!==null&&this._maxNode(t)}else if(this._cursor.left===null){var e;do if(e=this._cursor,this._ancestors.length)this._cursor=this._ancestors.pop();else{this._cursor=null;break}while(this._cursor.left===e)}else this._ancestors.push(this._cursor),this._maxNode(this._cursor.left);return this._cursor!==null?this._cursor.data:null};U.prototype._minNode=function(t){for(;t.left!==null;)this._ancestors.push(t),t=t.left;this._cursor=t};U.prototype._maxNode=function(t){for(;t.right!==null;)this._ancestors.push(t),t=t.right;this._cursor=t};ge.exports=M});var ye=j((kr,we)=>{var st=re();function O(t){this.data=t,this.left=null,this.right=null,this.red=!0}O.prototype.get_child=function(t){return t?this.right:this.left};O.prototype.set_child=function(t,e){t?this.right=e:this.left=e};function J(t){this._root=null,this._comparator=t,this.size=0}J.prototype=new st;J.prototype.insert=function(t){var e=!1;if(this._root===null)this._root=new O(t),e=!0,this.size++;else{var r=new O(void 0),n=0,i=0,o=null,u=r,c=null,a=this._root;for(u.right=this._root;;){if(a===null?(a=new O(t),c.set_child(n,a),e=!0,this.size++):A(a.left)&&A(a.right)&&(a.red=!0,a.left.red=!1,a.right.red=!1),A(a)&&A(c)){var g=u.right===o;a===c.get_child(i)?u.set_child(g,$(o,!i)):u.set_child(g,_e(o,!i))}var s=this._comparator(a.data,t);if(s===0)break;i=n,n=s<0,o!==null&&(u=o),o=c,c=a,a=a.get_child(n)}this._root=r.right}return this._root.red=!1,e};J.prototype.remove=function(t){if(this._root===null)return!1;var e=new O(void 0),r=e;r.right=this._root;for(var n=null,i=null,o=null,u=1;r.get_child(u)!==null;){var c=u;i=n,n=r,r=r.get_child(u);var a=this._comparator(t,r.data);if(u=a>0,a===0&&(o=r),!A(r)&&!A(r.get_child(u))){if(A(r.get_child(!u))){var g=$(r,u);n.set_child(c,g),n=g}else if(!A(r.get_child(!u))){var s=n.get_child(!c);if(s!==null)if(!A(s.get_child(!c))&&!A(s.get_child(c)))n.red=!1,s.red=!0,r.red=!0;else{var l=i.right===n;A(s.get_child(c))?i.set_child(l,_e(n,c)):A(s.get_child(!c))&&i.set_child(l,$(n,c));var f=i.get_child(l);f.red=!0,r.red=!0,f.left.red=!1,f.right.red=!1}}}}return o!==null&&(o.data=r.data,n.set_child(n.right===r,r.get_child(r.left===null)),this.size--),this._root=e.right,this._root!==null&&(this._root.red=!1),o!==null};function A(t){return t!==null&&t.red}function $(t,e){var r=t.get_child(!e);return t.set_child(!e,r.get_child(e)),r.set_child(e,t),t.red=!0,r.red=!1,r}function _e(t,e){return t.set_child(!e,$(t.get_child(!e),!e)),$(t,e)}we.exports=J});var Ce=j((Ar,ve)=>{var ot=re();function N(t){this.data=t,this.left=null,this.right=null}N.prototype.get_child=function(t){return t?this.right:this.left};N.prototype.set_child=function(t,e){t?this.right=e:this.left=e};function Q(t){this._root=null,this._comparator=t,this.size=0}Q.prototype=new ot;Q.prototype.insert=function(t){if(this._root===null)return this._root=new N(t),this.size++,!0;for(var e=0,r=null,n=this._root;;){if(n===null)return n=new N(t),r.set_child(e,n),ret=!0,this.size++,!0;if(this._comparator(n.data,t)===0)return!1;e=this._comparator(n.data,t)<0,r=n,n=n.get_child(e)}};Q.prototype.remove=function(t){if(this._root===null)return!1;var e=new N(void 0),r=e;r.right=this._root;for(var n=null,i=null,o=1;r.get_child(o)!==null;){n=r,r=r.get_child(o);var u=this._comparator(t,r.data);o=u>0,u===0&&(i=r)}return i!==null?(i.data=r.data,n.set_child(n.right===r,r.get_child(r.left===null)),this._root=e.right,this.size--,!0):!1};ve.exports=Q});var Fe=j((Er,xe)=>{xe.exports={RBTree:ye(),BinTree:Ce()}});var Ee=j((Mr,Ae)=>{var at=Fe().RBTree;function p(t,e,r){this.discrete=t===!1,this.delta=t||.01,this.K=e===void 0?25:e,this.CX=r===void 0?1.1:r,this.centroids=new at(ke),this.nreset=0,this.reset()}p.prototype.reset=function(){this.centroids.clear(),this.n=0,this.nreset+=1,this.last_cumulate=0};p.prototype.size=function(){return this.centroids.size};p.prototype.toArray=function(t){var e=[];return t?(this._cumulate(!0),this.centroids.each(function(r){e.push(r)})):this.centroids.each(function(r){e.push({mean:r.mean,n:r.n})}),e};p.prototype.summary=function(){var t=this.discrete?"exact ":"approximating ",e=[t+this.n+" samples using "+this.size()+" centroids","min = "+this.percentile(0),"Q1 = "+this.percentile(.25),"Q2 = "+this.percentile(.5),"Q3 = "+this.percentile(.75),"max = "+this.percentile(1)];return e.join(`
3
+ `)};function ke(t,e){return t.mean>e.mean?1:t.mean<e.mean?-1:0}function ut(t,e){return t.mean_cumn-e.mean_cumn}p.prototype.push=function(t,e){e=e||1,t=Array.isArray(t)?t:[t];for(var r=0;r<t.length;r++)this._digest(t[r],e)};p.prototype.push_centroid=function(t){t=Array.isArray(t)?t:[t];for(var e=0;e<t.length;e++)this._digest(t[e].mean,t[e].n)};p.prototype._cumulate=function(t){if(!(this.n===this.last_cumulate||!t&&this.CX&&this.CX>this.n/this.last_cumulate)){var e=0;this.centroids.each(function(r){r.mean_cumn=e+r.n/2,e=r.cumn=e+r.n}),this.n=this.last_cumulate=e}};p.prototype.find_nearest=function(t){if(this.size()===0)return null;var e=this.centroids.lowerBound({mean:t}),r=e.data()===null?e.prev():e.data();if(r.mean===t||this.discrete)return r;var n=e.prev();return n&&Math.abs(n.mean-t)<Math.abs(r.mean-t)?n:r};p.prototype._new_centroid=function(t,e,r){var n={mean:t,n:e,cumn:r};return this.centroids.insert(n),this.n+=e,n};p.prototype._addweight=function(t,e,r){e!==t.mean&&(t.mean+=r*(e-t.mean)/(t.n+r)),t.cumn+=r,t.mean_cumn+=r/2,t.n+=r,this.n+=r};p.prototype._digest=function(t,e){var r=this.centroids.min(),n=this.centroids.max(),i=this.find_nearest(t);if(i&&i.mean===t)this._addweight(i,t,e);else if(i===r)this._new_centroid(t,e,0);else if(i===n)this._new_centroid(t,e,this.n);else if(this.discrete)this._new_centroid(t,e,i.cumn);else{var o=i.mean_cumn/this.n,u=Math.floor(4*this.n*this.delta*o*(1-o));u-i.n>=e?this._addweight(i,t,e):this._new_centroid(t,e,i.cumn)}this._cumulate(!1),!this.discrete&&this.K&&this.size()>this.K/this.delta&&this.compress()};p.prototype.bound_mean=function(t){var e=this.centroids.upperBound({mean:t}),r=e.prev(),n=r.mean===t?r:e.next();return[r,n]};p.prototype.p_rank=function(t){var e=Array.isArray(t)?t:[t],r=e.map(this._p_rank,this);return Array.isArray(t)?r:r[0]};p.prototype._p_rank=function(t){if(this.size()!==0){{if(t<this.centroids.min().mean)return 0;if(t>this.centroids.max().mean)return 1}this._cumulate(!0);var e=this.bound_mean(t),r=e[0],n=e[1];if(this.discrete)return r.cumn/this.n;var i=r.mean_cumn;return r!==n&&(i+=(t-r.mean)*(n.mean_cumn-r.mean_cumn)/(n.mean-r.mean)),i/this.n}};p.prototype.bound_mean_cumn=function(t){this.centroids._comparator=ut;var e=this.centroids.upperBound({mean_cumn:t});this.centroids._comparator=ke;var r=e.prev(),n=r&&r.mean_cumn===t?r:e.next();return[r,n]};p.prototype.percentile=function(t){var e=Array.isArray(t)?t:[t],r=e.map(this._percentile,this);return Array.isArray(t)?r:r[0]};p.prototype._percentile=function(t){if(this.size()!==0){this._cumulate(!0);var e=this.n*t,r=this.bound_mean_cumn(e),n=r[0],i=r[1];return i===n||n===null||i===null?(n||i).mean:this.discrete?e<=n.cumn?n.mean:i.mean:n.mean+(e-n.mean_cumn)*(i.mean-n.mean)/(i.mean_cumn-n.mean_cumn)}};function ct(t){var e=Math.floor(Math.random()*t.length);return t.splice(e,1)[0]}p.prototype.compress=function(){if(!this.compressing){var t=this.toArray();for(this.reset(),this.compressing=!0;t.length>0;)this.push_centroid(ct(t));this._cumulate(!0),this.compressing=!1}};function S(t){this.config=t||{},this.mode=this.config.mode||"auto",p.call(this,this.mode==="cont"?t.delta:!1),this.digest_ratio=this.config.ratio||.9,this.digest_thresh=this.config.thresh||1e3,this.n_unique=0}S.prototype=Object.create(p.prototype);S.prototype.constructor=S;S.prototype.push=function(t){p.prototype.push.call(this,t),this.check_continuous()};S.prototype._new_centroid=function(t,e,r){this.n_unique+=1,p.prototype._new_centroid.call(this,t,e,r)};S.prototype._addweight=function(t,e,r){t.n===1&&(this.n_unique-=1),p.prototype._addweight.call(this,t,e,r)};S.prototype.check_continuous=function(){return this.mode!=="auto"||this.size()<this.digest_thresh?!1:this.n_unique/this.size()>this.digest_ratio?(this.mode="cont",this.discrete=!1,this.delta=this.config.delta||.01,this.compress(),!0):!1};Ae.exports={TDigest:p,Digest:S}});var ft={};je(ft,{simpleMetrics:()=>ht});var se=Symbol.for("@libp2p/service-capabilities"),pt=Symbol.for("@libp2p/service-dependencies");var Dt=new Uint8Array(0);function oe(t){if(t instanceof Uint8Array&&t.constructor.name==="Uint8Array")return t;if(t instanceof ArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new Error("Unknown type, must be binary type")}function qe(t,e){if(t.length>=255)throw new TypeError("Alphabet too long");for(var r=new Uint8Array(256),n=0;n<r.length;n++)r[n]=255;for(var i=0;i<t.length;i++){var o=t.charAt(i),u=o.charCodeAt(0);if(r[u]!==255)throw new TypeError(o+" is ambiguous");r[u]=i}var c=t.length,a=t.charAt(0),g=Math.log(c)/Math.log(256),s=Math.log(256)/Math.log(c);function l(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var d=0,m=0,b=0,w=h.length;b!==w&&h[b]===0;)b++,d++;for(var x=(w-b)*s+1>>>0,_=new Uint8Array(x);b!==w;){for(var E=h[b],F=0,v=x-1;(E!==0||F<m)&&v!==-1;v--,F++)E+=256*_[v]>>>0,_[v]=E%c>>>0,E=E/c>>>0;if(E!==0)throw new Error("Non-zero carry");m=F,b++}for(var k=x-m;k!==x&&_[k]===0;)k++;for(var z=a.repeat(d);k<x;++k)z+=t.charAt(_[k]);return z}function f(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var d=0;if(h[d]!==" "){for(var m=0,b=0;h[d]===a;)m++,d++;for(var w=(h.length-d)*g+1>>>0,x=new Uint8Array(w);h[d];){var _=r[h.charCodeAt(d)];if(_===255)return;for(var E=0,F=w-1;(_!==0||E<b)&&F!==-1;F--,E++)_+=c*x[F]>>>0,x[F]=_%256>>>0,_=_/256>>>0;if(_!==0)throw new Error("Non-zero carry");b=E,d++}if(h[d]!==" "){for(var v=w-b;v!==w&&x[v]===0;)v++;for(var k=new Uint8Array(m+(w-v)),z=m;v!==w;)k[z++]=x[v++];return k}}}function V(h){var d=f(h);if(d)return d;throw new Error(`Non-${e} character`)}return{encode:l,decodeUnsafe:f,decode:V}}var De=qe,Be=De,ae=Be;var K=class{name;prefix;baseEncode;constructor(e,r,n){this.name=e,this.prefix=r,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},Z=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,r,n){this.name=e,this.prefix=r;let i=r.codePointAt(0);if(i===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=i,this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return ue(this,e)}},W=class{decoders;constructor(e){this.decoders=e}or(e){return ue(this,e)}decode(e){let r=e[0],n=this.decoders[r];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function ue(t,e){return new W({...t.decoders??{[t.prefix]:t},...e.decoders??{[e.prefix]:e}})}var Y=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,r,n,i){this.name=e,this.prefix=r,this.baseEncode=n,this.baseDecode=i,this.encoder=new K(e,r,n),this.decoder=new Z(e,r,i)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function ce({name:t,prefix:e,encode:r,decode:n}){return new Y(t,e,r,n)}function H({name:t,prefix:e,alphabet:r}){let{encode:n,decode:i}=ae(r,t);return ce({prefix:e,name:t,encode:n,decode:o=>oe(i(o))})}function Te(t,e,r,n){let i={};for(let s=0;s<e.length;++s)i[e[s]]=s;let o=t.length;for(;t[o-1]==="=";)--o;let u=new Uint8Array(o*r/8|0),c=0,a=0,g=0;for(let s=0;s<o;++s){let l=i[t[s]];if(l===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<r|l,c+=r,c>=8&&(c-=8,u[g++]=255&a>>c)}if(c>=r||255&a<<8-c)throw new SyntaxError("Unexpected end of data");return u}function Ie(t,e,r){let n=e[e.length-1]==="=",i=(1<<r)-1,o="",u=0,c=0;for(let a=0;a<t.length;++a)for(c=c<<8|t[a],u+=8;u>r;)u-=r,o+=e[i&c>>u];if(u!==0&&(o+=e[i&c<<r-u]),n)for(;o.length*r&7;)o+="=";return o}function y({name:t,prefix:e,bitsPerChar:r,alphabet:n}){return ce({prefix:e,name:t,encode(i){return Ie(i,n,r)},decode(i){return Te(i,n,r,t)}})}var le=y({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Jt=y({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Qt=y({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Xt=y({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Gt=y({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Kt=y({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Zt=y({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Wt=y({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Yt=y({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var he=H({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),tr=H({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var fe=y({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),ir=y({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),sr=y({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),or=y({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});function Pe(t,e){try{if(typeof t=="string"&&t.length>0)return Le(t);if(typeof t=="number"&&isFinite(t))return e?.long?Je(t):Re(t);throw new Error("Value is not a string or number.")}catch(r){let n=Qe(r)?`${r.message}. value=${JSON.stringify(t)}`:"An unknown error has occured.";throw new Error(n)}}function Le(t){if(t=String(t),t.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(!e)return NaN;let r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*315576e5;case"weeks":case"week":case"w":return r*6048e5;case"days":case"day":case"d":return r*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return r*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return r*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return r*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var L=Pe;function Re(t){let e=Math.abs(t);return e>=864e5?`${Math.round(t/864e5)}d`:e>=36e5?`${Math.round(t/36e5)}h`:e>=6e4?`${Math.round(t/6e4)}m`:e>=1e3?`${Math.round(t/1e3)}s`:`${t}ms`}function Je(t){let e=Math.abs(t);return e>=864e5?P(t,e,864e5,"day"):e>=36e5?P(t,e,36e5,"hour"):e>=6e4?P(t,e,6e4,"minute"):e>=1e3?P(t,e,1e3,"second"):`${t} ms`}function P(t,e,r,n){let i=e>=r*1.5;return`${Math.round(t/r)} ${n}${i?"s":""}`}function Qe(t){return typeof t=="object"&&t!==null&&"message"in t}function ee(t){r.debug=r,r.default=r,r.coerce=a,r.disable=o,r.enable=i,r.enabled=u,r.humanize=L,r.destroy=g,Object.keys(t).forEach(s=>{r[s]=t[s]}),r.names=[],r.skips=[],r.formatters={};function e(s){let l=0;for(let f=0;f<s.length;f++)l=(l<<5)-l+s.charCodeAt(f),l|=0;return r.colors[Math.abs(l)%r.colors.length]}r.selectColor=e;function r(s){let l,f=null,V,h;function d(...m){if(!d.enabled)return;let b=d,w=Number(new Date),x=w-(l||w);b.diff=x,b.prev=l,b.curr=w,l=w,m[0]=r.coerce(m[0]),typeof m[0]!="string"&&m.unshift("%O");let _=0;m[0]=m[0].replace(/%([a-zA-Z%])/g,(F,v)=>{if(F==="%%")return"%";_++;let k=r.formatters[v];if(typeof k=="function"){let z=m[_];F=k.call(b,z),m.splice(_,1),_--}return F}),r.formatArgs.call(b,m),(b.log||r.log).apply(b,m)}return d.namespace=s,d.useColors=r.useColors(),d.color=r.selectColor(s),d.extend=n,d.destroy=r.destroy,Object.defineProperty(d,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(V!==r.namespaces&&(V=r.namespaces,h=r.enabled(s)),h),set:m=>{f=m}}),typeof r.init=="function"&&r.init(d),d}function n(s,l){let f=r(this.namespace+(typeof l>"u"?":":l)+s);return f.log=this.log,f}function i(s){r.save(s),r.namespaces=s,r.names=[],r.skips=[];let l,f=(typeof s=="string"?s:"").split(/[\s,]+/),V=f.length;for(l=0;l<V;l++)f[l]&&(s=f[l].replace(/\*/g,".*?"),s[0]==="-"?r.skips.push(new RegExp("^"+s.substr(1)+"$")):r.names.push(new RegExp("^"+s+"$")))}function o(){let s=[...r.names.map(c),...r.skips.map(c).map(l=>"-"+l)].join(",");return r.enable(""),s}function u(s){if(s[s.length-1]==="*")return!0;let l,f;for(l=0,f=r.skips.length;l<f;l++)if(r.skips[l].test(s))return!1;for(l=0,f=r.names.length;l<f;l++)if(r.names[l].test(s))return!0;return!1}function c(s){return s.toString().substring(2,s.toString().length-2).replace(/\.\*\?$/,"*")}function a(s){return s instanceof Error?s.stack??s.message:s}function g(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.setupFormatters(r.formatters),r.enable(r.load()),r}var R=He(),Xe=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Ge(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function Ke(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+L(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}var Ze=console.debug??console.log??(()=>{});function We(t){try{t?R?.setItem("debug",t):R?.removeItem("debug")}catch{}}function Ye(){let t;try{t=R?.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}function He(){try{return localStorage}catch{}}function et(t){t.j=function(e){try{return JSON.stringify(e)}catch(r){return"[UnexpectedJSONParseError]: "+r.message}}}var de=ee({formatArgs:Ke,save:We,load:Ye,useColors:Ge,setupFormatters:et,colors:Xe,storage:R,log:Ze});var C=de;C.formatters.b=t=>t==null?"undefined":he.baseEncode(t);C.formatters.t=t=>t==null?"undefined":le.baseEncode(t);C.formatters.m=t=>t==null?"undefined":fe.baseEncode(t);C.formatters.p=t=>t==null?"undefined":t.toString();C.formatters.c=t=>t==null?"undefined":t.toString();C.formatters.k=t=>t==null?"undefined":t.toString();C.formatters.a=t=>t==null?"undefined":t.toString();function tt(t){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=t,e.destroy=()=>!0,e.extend=()=>e,e}function pe(t){let e=tt(`${t}:trace`);return C.enabled(`${t}:trace`)&&C.names.map(r=>r.toString()).find(r=>r.includes(":trace"))!=null&&(e=C(`${t}:trace`)),Object.assign(C(t),{error:C(`${t}:error`),trace:e})}function rt(t){let[e,r]=t[Symbol.asyncIterator]!=null?[t[Symbol.asyncIterator](),Symbol.asyncIterator]:[t[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:i=>{n.push(i)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[r](){return this}}}var me=rt;function nt(t){return t[Symbol.asyncIterator]!=null}function be(t){return t?.then!=null}function it(t,e){let r=0;if(nt(t))return async function*(){for await(let a of t){let g=e(a,r++);be(g)&&await g,yield a}}();let n=me(t),{value:i,done:o}=n.next();if(o===!0)return function*(){}();if(typeof e(i,r++)?.then=="function")return async function*(){yield i;for await(let a of n){let g=e(a,r++);be(g)&&await g,yield a}}();let c=e;return function*(){yield i;for(let a of n)c(a,r++),yield a}()}var te=it;var Me=$e(Ee(),1),lt=pe("libp2p:simple-metrics"),q=class{value=0;update(e){this.value=e}increment(e=1){this.value+=e}decrement(e=1){this.value-=e}reset(){this.value=0}timer(){let e=Date.now();return()=>{this.value=Date.now()-e}}},D=class{values={};update(e){Object.entries(e).forEach(([r,n])=>{this.values[r]=n})}increment(e){Object.entries(e).forEach(([r,n])=>{this.values[r]=this.values[r]??0;let i=typeof n=="number"?n:1;this.values[r]+=Number(i)})}decrement(e){Object.entries(e).forEach(([r,n])=>{this.values[r]=this.values[r]??0;let i=typeof n=="number"?n:1;this.values[r]-=Number(i)})}reset(){this.values={}}timer(e){let r=Date.now();return()=>{this.values[e]=Date.now()-r}}},B=class{bucketValues=new Map;countValue=0;sumValue=0;constructor(e){let r=[...e.buckets??[.005,.01,.025,.05,.1,.25,.5,1,2.5,5,10],1/0];for(let n of r)this.bucketValues.set(n,0)}observe(e){this.countValue++,this.sumValue+=e;for(let[r,n]of this.bucketValues.entries())e<=r&&this.bucketValues.set(r,n+1)}reset(){this.countValue=0,this.sumValue=0;for(let e of this.bucketValues.keys())this.bucketValues.set(e,0)}timer(){let e=Date.now();return()=>{this.observe(Date.now()-e)}}},X=class{histograms={};constructor(e){this.histograms={}}observe(e){for(let[r,n]of Object.entries(e))this.histograms[r]===void 0&&(this.histograms[r]=new B({})),this.histograms[r].observe(n)}reset(){for(let e of Object.values(this.histograms))e.reset()}timer(e){let r=Date.now();return()=>{this.observe({[e]:Date.now()-r})}}},T=class{sumValue=0;countValue=0;percentiles;tdigest=new Me.TDigest(.01);compressCount;constructor(e){this.percentiles=e.percentiles??[.01,.05,.5,.9,.95,.99,.999],this.compressCount=e.compressCount??1e3}observe(e){this.sumValue+=e,this.countValue++,this.tdigest.push(e),this.tdigest.size()>this.compressCount&&this.tdigest.compress()}reset(){this.sumValue=0,this.countValue=0,this.tdigest.reset()}timer(){let e=Date.now();return()=>{this.observe(Date.now()-e)}}},G=class{summaries={};opts;constructor(e){this.summaries={},this.opts=e}observe(e){for(let[r,n]of Object.entries(e))this.summaries[r]===void 0&&(this.summaries[r]=new T(this.opts)),this.summaries[r].observe(n)}reset(){for(let e of Object.values(this.summaries))e.reset()}timer(e){let r=Date.now();return()=>{this.observe({[e]:Date.now()-r})}}},ne=class{metrics=new Map;transferStats;started;interval;intervalMs;onMetrics;constructor(e,r){this.started=!1,this._emitMetrics=this._emitMetrics.bind(this),this.intervalMs=r.intervalMs??1e3,this.onMetrics=r.onMetrics,this.transferStats=new Map}[Symbol.toStringTag]="@libp2p/metrics-simple";[se]=["@libp2p/metrics"];isStarted(){return this.started}start(){this.started=!0,this.interval=setInterval(this._emitMetrics,this.intervalMs)}stop(){this.started=!1,clearInterval(this.interval)}_emitMetrics(){Promise.resolve().then(async()=>{let e={};for(let[r,n]of this.metrics.entries())n instanceof q?e[r]=n.value:n instanceof D?e[r]=n.values:n instanceof B?e[r]={count:n.countValue,sum:n.sumValue,buckets:{...n.bucketValues}}:n instanceof X?e[r]={...Object.fromEntries(Object.entries(n.histograms).map(([i,o])=>[i,{count:o.countValue,sum:o.sumValue,buckets:{...o.bucketValues}}]))}:n instanceof T?e[r]={count:n.countValue,sum:n.sumValue,percentiles:Object.fromEntries(n.percentiles.map(i=>[i,n.tdigest.percentile(i)]))}:n instanceof G?e[r]={...Object.fromEntries(Object.entries(n.summaries).map(([i,o])=>[i,{count:o.countValue,sum:o.sumValue,percentiles:Object.fromEntries(o.percentiles.map(u=>[u,o.tdigest.percentile(u)]))}]))}:e[r]=await n();this.onMetrics(structuredClone(e))}).catch(e=>{lt.error("could not invoke onMetrics callback",e)})}_incrementValue(e,r){let n=this.transferStats.get(e)??0;this.transferStats.set(e,n+r)}_track(e,r){let n=this,i=e.sink;e.sink=async function(c){await i(te(c,a=>{n._incrementValue(`${r} sent`,a.byteLength)}))};let o=e.source;e.source=te(o,u=>{n._incrementValue(`${r} received`,u.byteLength)})}trackMultiaddrConnection(e){this._track(e,"global")}trackProtocolStream(e,r){e.protocol!=null&&this._track(e,e.protocol)}registerMetric(e,r={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(r?.calculate!=null){this.metrics.set(e,r.calculate);return}let n=new q;return this.metrics.set(e,n),n}registerMetricGroup(e,r={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(r?.calculate!=null){this.metrics.set(e,r.calculate);return}let n=new D;return this.metrics.set(e,n),n}registerCounter(e,r={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(r?.calculate!=null){this.metrics.set(e,r.calculate);return}let n=new q;return this.metrics.set(e,n),n}registerCounterGroup(e,r={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(r?.calculate!=null){this.metrics.set(e,r.calculate);return}let n=new D;return this.metrics.set(e,n),n}registerHistogram(e,r={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(r?.calculate!=null){this.metrics.set(e,r.calculate);return}let n=new B(r);return this.metrics.set(e,n),n}registerHistogramGroup(e,r={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(r?.calculate!=null){this.metrics.set(e,r.calculate);return}let n=new X(r);return this.metrics.set(e,n),n}registerSummary(e,r={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(r?.calculate!=null){this.metrics.set(e,r.calculate);return}let n=new T(r);return this.metrics.set(e,n),n}registerSummaryGroup(e,r={}){if(e==null||e.trim()==="")throw new Error("Metric name is required");if(r?.calculate!=null){this.metrics.set(e,r.calculate);return}let n=new G(r);return this.metrics.set(e,n),n}};function ht(t){return e=>new ne(e,t)}return Ne(ft);})();
3
4
  return Libp2PSimpleMetrics}));
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAsF,OAAO,EAAkF,MAAM,mBAAmB,CAAA;AAyEpN,MAAM,WAAW,SAAS;IAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;CAAE;AAEnE,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,SAAS,EAAE,SAAS,CAAA;CACrB;AA0LD,wBAAgB,aAAa,CAAE,IAAI,EAAE,iBAAiB,GAAG,CAAC,UAAU,EAAE,OAAO,KAAK,OAAO,CAExF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,OAAO,KAAK,EAAsF,OAAO,EAA4N,MAAM,mBAAmB,CAAA;AA4N9V,MAAM,WAAW,SAAS;IAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;CAAE;AAEnE,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,SAAS,EAAE,SAAS,CAAA;CACrB;AAsSD,wBAAgB,aAAa,CAAE,IAAI,EAAE,iBAAiB,GAAG,CAAC,UAAU,EAAE,OAAO,KAAK,OAAO,CAExF"}
package/dist/src/index.js CHANGED
@@ -25,6 +25,7 @@
25
25
  import { serviceCapabilities } from '@libp2p/interface';
26
26
  import { logger } from '@libp2p/logger';
27
27
  import each from 'it-foreach';
28
+ import { TDigest } from 'tdigest';
28
29
  const log = logger('libp2p:simple-metrics');
29
30
  class DefaultMetric {
30
31
  value = 0;
@@ -78,6 +79,124 @@ class DefaultGroupMetric {
78
79
  };
79
80
  }
80
81
  }
82
+ class DefaultHistogram {
83
+ bucketValues = new Map();
84
+ countValue = 0;
85
+ sumValue = 0;
86
+ constructor(opts) {
87
+ const buckets = [
88
+ ...(opts.buckets ?? [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]),
89
+ Infinity
90
+ ];
91
+ for (const bucket of buckets) {
92
+ this.bucketValues.set(bucket, 0);
93
+ }
94
+ }
95
+ observe(value) {
96
+ this.countValue++;
97
+ this.sumValue += value;
98
+ for (const [bucket, count] of this.bucketValues.entries()) {
99
+ if (value <= bucket) {
100
+ this.bucketValues.set(bucket, count + 1);
101
+ }
102
+ }
103
+ }
104
+ reset() {
105
+ this.countValue = 0;
106
+ this.sumValue = 0;
107
+ for (const bucket of this.bucketValues.keys()) {
108
+ this.bucketValues.set(bucket, 0);
109
+ }
110
+ }
111
+ timer() {
112
+ const start = Date.now();
113
+ return () => {
114
+ this.observe(Date.now() - start);
115
+ };
116
+ }
117
+ }
118
+ class DefaultHistogramGroup {
119
+ histograms = {};
120
+ constructor(opts) {
121
+ this.histograms = {};
122
+ }
123
+ observe(values) {
124
+ for (const [key, value] of Object.entries(values)) {
125
+ if (this.histograms[key] === undefined) {
126
+ this.histograms[key] = new DefaultHistogram({});
127
+ }
128
+ this.histograms[key].observe(value);
129
+ }
130
+ }
131
+ reset() {
132
+ for (const histogram of Object.values(this.histograms)) {
133
+ histogram.reset();
134
+ }
135
+ }
136
+ timer(key) {
137
+ const start = Date.now();
138
+ return () => {
139
+ this.observe({ [key]: Date.now() - start });
140
+ };
141
+ }
142
+ }
143
+ class DefaultSummary {
144
+ sumValue = 0;
145
+ countValue = 0;
146
+ percentiles;
147
+ tdigest = new TDigest(0.01);
148
+ compressCount;
149
+ constructor(opts) {
150
+ this.percentiles = opts.percentiles ?? [0.01, 0.05, 0.5, 0.9, 0.95, 0.99, 0.999];
151
+ this.compressCount = opts.compressCount ?? 1000;
152
+ }
153
+ observe(value) {
154
+ this.sumValue += value;
155
+ this.countValue++;
156
+ this.tdigest.push(value);
157
+ if (this.tdigest.size() > this.compressCount) {
158
+ this.tdigest.compress();
159
+ }
160
+ }
161
+ reset() {
162
+ this.sumValue = 0;
163
+ this.countValue = 0;
164
+ this.tdigest.reset();
165
+ }
166
+ timer() {
167
+ const start = Date.now();
168
+ return () => {
169
+ this.observe(Date.now() - start);
170
+ };
171
+ }
172
+ }
173
+ class DefaultSummaryGroup {
174
+ summaries = {};
175
+ opts;
176
+ constructor(opts) {
177
+ this.summaries = {};
178
+ this.opts = opts;
179
+ }
180
+ observe(values) {
181
+ for (const [key, value] of Object.entries(values)) {
182
+ if (this.summaries[key] === undefined) {
183
+ this.summaries[key] = new DefaultSummary(this.opts);
184
+ }
185
+ this.summaries[key].observe(value);
186
+ }
187
+ }
188
+ reset() {
189
+ for (const summary of Object.values(this.summaries)) {
190
+ summary.reset();
191
+ }
192
+ }
193
+ timer(key) {
194
+ const start = Date.now();
195
+ return () => {
196
+ this.observe({ [key]: Date.now() - start });
197
+ };
198
+ }
199
+ }
81
200
  class SimpleMetrics {
82
201
  metrics = new Map();
83
202
  transferStats;
@@ -118,6 +237,42 @@ class SimpleMetrics {
118
237
  else if (metric instanceof DefaultGroupMetric) {
119
238
  output[name] = metric.values;
120
239
  }
240
+ else if (metric instanceof DefaultHistogram) {
241
+ output[name] = {
242
+ count: metric.countValue,
243
+ sum: metric.sumValue,
244
+ buckets: { ...metric.bucketValues }
245
+ };
246
+ }
247
+ else if (metric instanceof DefaultHistogramGroup) {
248
+ output[name] = {
249
+ ...Object.fromEntries(Object.entries(metric.histograms).map(([key, histogram]) => {
250
+ return [key, {
251
+ count: histogram.countValue,
252
+ sum: histogram.sumValue,
253
+ buckets: { ...histogram.bucketValues }
254
+ }];
255
+ }))
256
+ };
257
+ }
258
+ else if (metric instanceof DefaultSummary) {
259
+ output[name] = {
260
+ count: metric.countValue,
261
+ sum: metric.sumValue,
262
+ percentiles: Object.fromEntries(metric.percentiles.map(p => [p, metric.tdigest.percentile(p)]))
263
+ };
264
+ }
265
+ else if (metric instanceof DefaultSummaryGroup) {
266
+ output[name] = {
267
+ ...Object.fromEntries(Object.entries(metric.summaries).map(([key, summary]) => {
268
+ return [key, {
269
+ count: summary.countValue,
270
+ sum: summary.sumValue,
271
+ percentiles: Object.fromEntries(summary.percentiles.map(p => [p, summary.tdigest.percentile(p)]))
272
+ }];
273
+ }))
274
+ };
275
+ }
121
276
  else {
122
277
  output[name] = await metric();
123
278
  }
@@ -216,6 +371,58 @@ class SimpleMetrics {
216
371
  this.metrics.set(name, metric);
217
372
  return metric;
218
373
  }
374
+ registerHistogram(name, opts = {}) {
375
+ if (name == null || name.trim() === '') {
376
+ throw new Error('Metric name is required');
377
+ }
378
+ if (opts?.calculate != null) {
379
+ // calculated metric
380
+ this.metrics.set(name, opts.calculate);
381
+ return;
382
+ }
383
+ const metric = new DefaultHistogram(opts);
384
+ this.metrics.set(name, metric);
385
+ return metric;
386
+ }
387
+ registerHistogramGroup(name, opts = {}) {
388
+ if (name == null || name.trim() === '') {
389
+ throw new Error('Metric name is required');
390
+ }
391
+ if (opts?.calculate != null) {
392
+ // calculated metric
393
+ this.metrics.set(name, opts.calculate);
394
+ return;
395
+ }
396
+ const metric = new DefaultHistogramGroup(opts);
397
+ this.metrics.set(name, metric);
398
+ return metric;
399
+ }
400
+ registerSummary(name, opts = {}) {
401
+ if (name == null || name.trim() === '') {
402
+ throw new Error('Metric name is required');
403
+ }
404
+ if (opts?.calculate != null) {
405
+ // calculated metric
406
+ this.metrics.set(name, opts.calculate);
407
+ return;
408
+ }
409
+ const metric = new DefaultSummary(opts);
410
+ this.metrics.set(name, metric);
411
+ return metric;
412
+ }
413
+ registerSummaryGroup(name, opts = {}) {
414
+ if (name == null || name.trim() === '') {
415
+ throw new Error('Metric name is required');
416
+ }
417
+ if (opts?.calculate != null) {
418
+ // calculated metric
419
+ this.metrics.set(name, opts.calculate);
420
+ return;
421
+ }
422
+ const metric = new DefaultSummaryGroup(opts);
423
+ this.metrics.set(name, metric);
424
+ return metric;
425
+ }
219
426
  }
220
427
  export function simpleMetrics(init) {
221
428
  return (components) => new SimpleMetrics(components, init);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ {
2
+ "OnMetrics": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_simple_metrics.OnMetrics.html",
3
+ ".:OnMetrics": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_simple_metrics.OnMetrics.html",
4
+ "SimpleMetricsInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_simple_metrics.SimpleMetricsInit.html",
5
+ ".:SimpleMetricsInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_simple_metrics.SimpleMetricsInit.html",
6
+ "simpleMetrics": "https://libp2p.github.io/js-libp2p/functions/_libp2p_simple_metrics.simpleMetrics.html",
7
+ ".:simpleMetrics": "https://libp2p.github.io/js-libp2p/functions/_libp2p_simple_metrics.simpleMetrics.html"
8
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/simple-metrics",
3
- "version": "1.1.7-c628c44c5",
3
+ "version": "1.2.0",
4
4
  "description": "Simple in-memory metrics gathering for libp2p",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/metrics-simple#readme",
@@ -50,12 +50,14 @@
50
50
  "dep-check": "aegir dep-check -i events"
51
51
  },
52
52
  "dependencies": {
53
- "@libp2p/interface": "2.0.1-c628c44c5",
54
- "@libp2p/logger": "5.0.1-c628c44c5",
53
+ "@libp2p/interface": "^2.1.0",
54
+ "@libp2p/logger": "^5.0.2",
55
55
  "it-foreach": "^2.1.0",
56
- "it-stream-types": "^2.0.1"
56
+ "it-stream-types": "^2.0.1",
57
+ "tdigest": "^0.1.2"
57
58
  },
58
59
  "devDependencies": {
60
+ "@types/tdigest": "^0.1.4",
59
61
  "aegir": "^44.0.1",
60
62
  "p-defer": "^4.0.1"
61
63
  }
package/src/index.ts CHANGED
@@ -26,7 +26,8 @@
26
26
  import { serviceCapabilities } from '@libp2p/interface'
27
27
  import { logger } from '@libp2p/logger'
28
28
  import each from 'it-foreach'
29
- import type { Startable, MultiaddrConnection, Stream, Connection, Metric, MetricGroup, StopTimer, Metrics, CalculatedMetricOptions, MetricOptions, Counter, CounterGroup, CalculateMetric } from '@libp2p/interface'
29
+ import { TDigest } from 'tdigest'
30
+ import type { Startable, MultiaddrConnection, Stream, Connection, Metric, MetricGroup, StopTimer, Metrics, CalculatedMetricOptions, MetricOptions, Counter, CounterGroup, CalculateMetric, Histogram, HistogramOptions, HistogramGroup, Summary, SummaryOptions, SummaryGroup, CalculatedHistogramOptions, CalculatedSummaryOptions } from '@libp2p/interface'
30
31
  import type { Duplex } from 'it-stream-types'
31
32
 
32
33
  const log = logger('libp2p:simple-metrics')
@@ -99,6 +100,153 @@ class DefaultGroupMetric implements MetricGroup {
99
100
  }
100
101
  }
101
102
 
103
+ class DefaultHistogram implements Histogram {
104
+ public bucketValues = new Map<number, number>()
105
+ public countValue: number = 0
106
+ public sumValue: number = 0
107
+
108
+ constructor (opts: HistogramOptions) {
109
+ const buckets = [
110
+ ...(opts.buckets ?? [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]),
111
+ Infinity
112
+ ]
113
+ for (const bucket of buckets) {
114
+ this.bucketValues.set(bucket, 0)
115
+ }
116
+ }
117
+
118
+ observe (value: number): void {
119
+ this.countValue++
120
+ this.sumValue += value
121
+
122
+ for (const [bucket, count] of this.bucketValues.entries()) {
123
+ if (value <= bucket) {
124
+ this.bucketValues.set(bucket, count + 1)
125
+ }
126
+ }
127
+ }
128
+
129
+ reset (): void {
130
+ this.countValue = 0
131
+ this.sumValue = 0
132
+ for (const bucket of this.bucketValues.keys()) {
133
+ this.bucketValues.set(bucket, 0)
134
+ }
135
+ }
136
+
137
+ timer (): StopTimer {
138
+ const start = Date.now()
139
+
140
+ return () => {
141
+ this.observe(Date.now() - start)
142
+ }
143
+ }
144
+ }
145
+
146
+ class DefaultHistogramGroup implements HistogramGroup {
147
+ public histograms: Record<string, DefaultHistogram> = {}
148
+
149
+ constructor (opts: HistogramOptions) {
150
+ this.histograms = {}
151
+ }
152
+
153
+ observe (values: Partial<Record<string, number>>): void {
154
+ for (const [key, value] of Object.entries(values) as Array<[string, number]>) {
155
+ if (this.histograms[key] === undefined) {
156
+ this.histograms[key] = new DefaultHistogram({})
157
+ }
158
+
159
+ this.histograms[key].observe(value)
160
+ }
161
+ }
162
+
163
+ reset (): void {
164
+ for (const histogram of Object.values(this.histograms)) {
165
+ histogram.reset()
166
+ }
167
+ }
168
+
169
+ timer (key: string): StopTimer {
170
+ const start = Date.now()
171
+
172
+ return () => {
173
+ this.observe({ [key]: Date.now() - start })
174
+ }
175
+ }
176
+ }
177
+
178
+ class DefaultSummary implements Summary {
179
+ public sumValue: number = 0
180
+ public countValue: number = 0
181
+ public percentiles: number[]
182
+ public tdigest = new TDigest(0.01)
183
+ private readonly compressCount: number
184
+
185
+ constructor (opts: SummaryOptions) {
186
+ this.percentiles = opts.percentiles ?? [0.01, 0.05, 0.5, 0.9, 0.95, 0.99, 0.999]
187
+ this.compressCount = opts.compressCount ?? 1000
188
+ }
189
+
190
+ observe (value: number): void {
191
+ this.sumValue += value
192
+ this.countValue++
193
+
194
+ this.tdigest.push(value)
195
+ if (this.tdigest.size() > this.compressCount) {
196
+ this.tdigest.compress()
197
+ }
198
+ }
199
+
200
+ reset (): void {
201
+ this.sumValue = 0
202
+ this.countValue = 0
203
+
204
+ this.tdigest.reset()
205
+ }
206
+
207
+ timer (): StopTimer {
208
+ const start = Date.now()
209
+
210
+ return () => {
211
+ this.observe(Date.now() - start)
212
+ }
213
+ }
214
+ }
215
+
216
+ class DefaultSummaryGroup implements SummaryGroup {
217
+ public summaries: Record<string, DefaultSummary> = {}
218
+ private readonly opts: SummaryOptions
219
+
220
+ constructor (opts: SummaryOptions) {
221
+ this.summaries = {}
222
+ this.opts = opts
223
+ }
224
+
225
+ observe (values: Record<string, number>): void {
226
+ for (const [key, value] of Object.entries(values)) {
227
+ if (this.summaries[key] === undefined) {
228
+ this.summaries[key] = new DefaultSummary(this.opts)
229
+ }
230
+
231
+ this.summaries[key].observe(value)
232
+ }
233
+ }
234
+
235
+ reset (): void {
236
+ for (const summary of Object.values(this.summaries)) {
237
+ summary.reset()
238
+ }
239
+ }
240
+
241
+ timer (key: string): StopTimer {
242
+ const start = Date.now()
243
+
244
+ return () => {
245
+ this.observe({ [key]: Date.now() - start })
246
+ }
247
+ }
248
+ }
249
+
102
250
  export interface OnMetrics { (metrics: Record<string, any>): void }
103
251
 
104
252
  export interface SimpleMetricsInit {
@@ -114,7 +262,7 @@ export interface SimpleMetricsInit {
114
262
  }
115
263
 
116
264
  class SimpleMetrics implements Metrics, Startable {
117
- public metrics = new Map<string, DefaultMetric | DefaultGroupMetric | CalculateMetric>()
265
+ public metrics = new Map<string, DefaultMetric | DefaultGroupMetric | CalculateMetric | DefaultHistogram | DefaultHistogramGroup | DefaultSummary | DefaultSummaryGroup>()
118
266
  private readonly transferStats: Map<string, number>
119
267
  private started: boolean
120
268
  private interval?: ReturnType<typeof setInterval>
@@ -164,6 +312,38 @@ class SimpleMetrics implements Metrics, Startable {
164
312
  output[name] = metric.value
165
313
  } else if (metric instanceof DefaultGroupMetric) {
166
314
  output[name] = metric.values
315
+ } else if (metric instanceof DefaultHistogram) {
316
+ output[name] = {
317
+ count: metric.countValue,
318
+ sum: metric.sumValue,
319
+ buckets: { ...metric.bucketValues }
320
+ }
321
+ } else if (metric instanceof DefaultHistogramGroup) {
322
+ output[name] = {
323
+ ...Object.fromEntries(Object.entries(metric.histograms).map(([key, histogram]) => {
324
+ return [key, {
325
+ count: histogram.countValue,
326
+ sum: histogram.sumValue,
327
+ buckets: { ...histogram.bucketValues }
328
+ }]
329
+ }))
330
+ }
331
+ } else if (metric instanceof DefaultSummary) {
332
+ output[name] = {
333
+ count: metric.countValue,
334
+ sum: metric.sumValue,
335
+ percentiles: Object.fromEntries(metric.percentiles.map(p => [p, metric.tdigest.percentile(p)]))
336
+ }
337
+ } else if (metric instanceof DefaultSummaryGroup) {
338
+ output[name] = {
339
+ ...Object.fromEntries(Object.entries(metric.summaries).map(([key, summary]) => {
340
+ return [key, {
341
+ count: summary.countValue,
342
+ sum: summary.sumValue,
343
+ percentiles: Object.fromEntries(summary.percentiles.map(p => [p, summary.tdigest.percentile(p)]))
344
+ }]
345
+ }))
346
+ }
167
347
  } else {
168
348
  output[name] = await metric()
169
349
  }
@@ -295,6 +475,82 @@ class SimpleMetrics implements Metrics, Startable {
295
475
 
296
476
  return metric
297
477
  }
478
+
479
+ registerHistogram (name: string, opts: CalculatedHistogramOptions): void
480
+ registerHistogram (name: string, opts?: HistogramOptions): Histogram
481
+ registerHistogram (name: string, opts: any = {}): any {
482
+ if (name == null || name.trim() === '') {
483
+ throw new Error('Metric name is required')
484
+ }
485
+
486
+ if (opts?.calculate != null) {
487
+ // calculated metric
488
+ this.metrics.set(name, opts.calculate)
489
+ return
490
+ }
491
+
492
+ const metric = new DefaultHistogram(opts)
493
+ this.metrics.set(name, metric)
494
+
495
+ return metric
496
+ }
497
+
498
+ registerHistogramGroup (name: string, opts: CalculatedHistogramOptions<Record<string, number>>): void
499
+ registerHistogramGroup (name: string, opts?: HistogramOptions): HistogramGroup
500
+ registerHistogramGroup (name: string, opts: any = {}): any {
501
+ if (name == null || name.trim() === '') {
502
+ throw new Error('Metric name is required')
503
+ }
504
+
505
+ if (opts?.calculate != null) {
506
+ // calculated metric
507
+ this.metrics.set(name, opts.calculate)
508
+ return
509
+ }
510
+
511
+ const metric = new DefaultHistogramGroup(opts)
512
+ this.metrics.set(name, metric)
513
+
514
+ return metric
515
+ }
516
+
517
+ registerSummary (name: string, opts: CalculatedSummaryOptions): void
518
+ registerSummary (name: string, opts?: SummaryOptions): Summary
519
+ registerSummary (name: string, opts: any = {}): any {
520
+ if (name == null || name.trim() === '') {
521
+ throw new Error('Metric name is required')
522
+ }
523
+
524
+ if (opts?.calculate != null) {
525
+ // calculated metric
526
+ this.metrics.set(name, opts.calculate)
527
+ return
528
+ }
529
+
530
+ const metric = new DefaultSummary(opts)
531
+ this.metrics.set(name, metric)
532
+
533
+ return metric
534
+ }
535
+
536
+ registerSummaryGroup (name: string, opts: CalculatedSummaryOptions<Record<string, number>>): void
537
+ registerSummaryGroup (name: string, opts?: SummaryOptions): SummaryGroup
538
+ registerSummaryGroup (name: string, opts: any = {}): any {
539
+ if (name == null || name.trim() === '') {
540
+ throw new Error('Metric name is required')
541
+ }
542
+
543
+ if (opts?.calculate != null) {
544
+ // calculated metric
545
+ this.metrics.set(name, opts.calculate)
546
+ return
547
+ }
548
+
549
+ const metric = new DefaultSummaryGroup(opts)
550
+ this.metrics.set(name, metric)
551
+
552
+ return metric
553
+ }
298
554
  }
299
555
 
300
556
  export function simpleMetrics (init: SimpleMetricsInit): (components: unknown) => Metrics {