@libp2p/prometheus-metrics 1.0.0 → 1.1.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.
@@ -1,9 +1,10 @@
1
- import type { CounterGroup, CalculatedMetricOptions } from '@libp2p/interface-metrics';
1
+ import type { CounterGroup } from '@libp2p/interface-metrics';
2
+ import type { PrometheusCalculatedMetricOptions } from './index.js';
2
3
  export declare class PrometheusCounterGroup implements CounterGroup {
3
4
  private readonly counter;
4
5
  private readonly label;
5
- constructor(name: string, opts: CalculatedMetricOptions<Record<string, number | bigint>>);
6
- increment(values: Record<string, number | bigint | unknown>): void;
6
+ constructor(name: string, opts: PrometheusCalculatedMetricOptions<Record<string, number>>);
7
+ increment(values: Record<string, number | unknown>): void;
7
8
  reset(): void;
8
9
  }
9
10
  //# sourceMappingURL=counter-group.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"counter-group.d.ts","sourceRoot":"","sources":["../../src/counter-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAmB,MAAM,2BAA2B,CAAA;AAIvG,qBAAa,sBAAuB,YAAW,YAAY;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAEjB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IA6BzF,SAAS,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAUnE,KAAK,IAAK,IAAI;CAGf"}
1
+ {"version":3,"file":"counter-group.d.ts","sourceRoot":"","sources":["../../src/counter-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,2BAA2B,CAAA;AAE9E,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAA;AAGnE,qBAAa,sBAAuB,YAAW,YAAY;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAEjB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA4B1F,SAAS,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAQ1D,KAAK,IAAK,IAAI;CAGf"}
@@ -12,9 +12,7 @@ export class PrometheusCounterGroup {
12
12
  collect = async function () {
13
13
  const values = await calculate();
14
14
  Object.entries(values).forEach(([key, value]) => {
15
- // prom-client does not support bigints for values
16
- // https://github.com/siimon/prom-client/issues/259
17
- this.inc({ [label]: key }, Number(value));
15
+ this.inc({ [label]: key }, value);
18
16
  });
19
17
  };
20
18
  }
@@ -22,14 +20,13 @@ export class PrometheusCounterGroup {
22
20
  name,
23
21
  help,
24
22
  labelNames: [this.label],
23
+ registers: opts.registry !== undefined ? [opts.registry] : undefined,
25
24
  collect
26
25
  });
27
26
  }
28
27
  increment(values) {
29
28
  Object.entries(values).forEach(([key, value]) => {
30
- // prom-client does not support bigints for values
31
- // https://github.com/siimon/prom-client/issues/259
32
- const inc = typeof value === 'number' || typeof value === 'bigint' ? Number(value) : 1;
29
+ const inc = typeof value === 'number' ? value : 1;
33
30
  this.counter.inc({ [this.label]: key }, inc);
34
31
  });
35
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"counter-group.js","sourceRoot":"","sources":["../../src/counter-group.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAmB,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,OAAO,sBAAsB;IAIjC,YAAa,IAAY,EAAE,IAA8D;QACvF,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAA;QAC9D,IAAI,OAAsD,CAAA;QAE1D,oBAAoB;QACpB,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE;YAC3B,MAAM,SAAS,GAAqD,IAAI,CAAC,SAAS,CAAA;YAElF,OAAO,GAAG,KAAK;gBACb,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;gBAEhC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC9C,kDAAkD;oBAClD,mDAAmD;oBACnD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC3C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAA;SACF;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC;YAC7B,IAAI;YACJ,IAAI;YACJ,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAE,MAAiD;QAC1D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,kDAAkD;YAClD,mDAAmD;YACnD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAEtF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"counter-group.js","sourceRoot":"","sources":["../../src/counter-group.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAmB,MAAM,aAAa,CAAA;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,OAAO,sBAAsB;IAIjC,YAAa,IAAY,EAAE,IAA+D;QACxF,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAA;QAC9D,IAAI,OAAsD,CAAA;QAE1D,oBAAoB;QACpB,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE;YAC3B,MAAM,SAAS,GAA4C,IAAI,CAAC,SAAS,CAAA;YAEzE,OAAO,GAAG,KAAK;gBACb,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;gBAEhC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC9C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;gBACnC,CAAC,CAAC,CAAA;YACJ,CAAC,CAAA;SACF;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC;YAC7B,IAAI;YACJ,IAAI;YACJ,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB,SAAS,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YACpE,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAE,MAAwC;QACjD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAEjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;CACF"}
@@ -1,8 +1,9 @@
1
- import type { Counter, CalculatedMetricOptions } from '@libp2p/interface-metrics';
1
+ import type { Counter } from '@libp2p/interface-metrics';
2
+ import type { PrometheusCalculatedMetricOptions } from './index.js';
2
3
  export declare class PrometheusCounter implements Counter {
3
4
  private readonly counter;
4
- constructor(name: string, opts: CalculatedMetricOptions);
5
- increment(value?: number | bigint): void;
5
+ constructor(name: string, opts: PrometheusCalculatedMetricOptions);
6
+ increment(value?: number): void;
6
7
  reset(): void;
7
8
  }
8
9
  //# sourceMappingURL=counter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../src/counter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAIjF,qBAAa,iBAAkB,YAAW,OAAO;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;gBAExB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB;IAyBxD,SAAS,CAAE,KAAK,GAAE,MAAM,GAAG,MAAU,GAAG,IAAI;IAM5C,KAAK,IAAK,IAAI;CAGf"}
1
+ {"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../src/counter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAA;AAGnE,qBAAa,iBAAkB,YAAW,OAAO;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;gBAExB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC;IA0BlE,SAAS,CAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAInC,KAAK,IAAK,IAAI;CAGf"}
@@ -11,20 +11,19 @@ export class PrometheusCounter {
11
11
  const calculate = opts.calculate;
12
12
  collect = async function () {
13
13
  const value = await calculate();
14
- this.inc(Number(value));
14
+ this.inc(value);
15
15
  };
16
16
  }
17
17
  this.counter = new PromCounter({
18
18
  name,
19
19
  help,
20
20
  labelNames: labels,
21
+ registers: opts.registry !== undefined ? [opts.registry] : undefined,
21
22
  collect
22
23
  });
23
24
  }
24
25
  increment(value = 1) {
25
- // prom-client does not support bigints for values
26
- // https://github.com/siimon/prom-client/issues/259
27
- this.counter.inc(Number(value));
26
+ this.counter.inc(value);
28
27
  }
29
28
  reset() {
30
29
  this.counter.reset();
@@ -1 +1 @@
1
- {"version":3,"file":"counter.js","sourceRoot":"","sources":["../../src/counter.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,OAAO,IAAI,WAAW,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,OAAO,iBAAiB;IAG5B,YAAa,IAAY,EAAE,IAA6B;QACtD,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,IAAI,OAAsD,CAAA;QAE1D,oBAAoB;QACpB,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;YAEhC,OAAO,GAAG,KAAK;gBACb,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAA;gBAE/B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YACzB,CAAC,CAAA;SACF;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC;YAC7B,IAAI;YACJ,IAAI;YACJ,UAAU,EAAE,MAAM;YAClB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAE,QAAyB,CAAC;QACnC,kDAAkD;QAClD,mDAAmD;QACnD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACjC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"counter.js","sourceRoot":"","sources":["../../src/counter.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,OAAO,IAAI,WAAW,EAAE,MAAM,aAAa,CAAA;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,OAAO,iBAAiB;IAG5B,YAAa,IAAY,EAAE,IAAuC;QAChE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,IAAI,OAAsD,CAAA;QAE1D,oBAAoB;QACpB,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;YAEhC,OAAO,GAAG,KAAK;gBACb,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAA;gBAE/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACjB,CAAC,CAAA;SACF;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC;YAC7B,IAAI;YACJ,IAAI;YACJ,UAAU,EAAE,MAAM;YAClB,SAAS,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YACpE,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAE,QAAgB,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;CACF"}
@@ -1,6 +1,11 @@
1
- import type { Metrics } from '@libp2p/interface-metrics';
2
- import { DefaultMetricsCollectorConfiguration } from 'prom-client';
1
+ import type { CalculatedMetricOptions, Metrics } from '@libp2p/interface-metrics';
2
+ import { DefaultMetricsCollectorConfiguration, Registry } from 'prom-client';
3
3
  export interface PrometheusMetricsInit {
4
+ /**
5
+ * Use a custom registry to register metrics.
6
+ * By default, the global registry is used to register metrics.
7
+ */
8
+ registry?: Registry;
4
9
  /**
5
10
  * By default we collect default metrics - CPU, memory etc, to not do
6
11
  * this, pass true here
@@ -17,5 +22,8 @@ export interface PrometheusMetricsInit {
17
22
  */
18
23
  preserveExistingMetrics?: boolean;
19
24
  }
25
+ export interface PrometheusCalculatedMetricOptions<T = number> extends CalculatedMetricOptions<T> {
26
+ registry?: Registry;
27
+ }
20
28
  export declare function prometheusMetrics(init?: Partial<PrometheusMetricsInit>): () => Metrics;
21
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsF,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAC5I,OAAO,EAAyB,oCAAoC,EAAY,MAAM,aAAa,CAAA;AAYnG,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAE/B;;OAEG;IACH,cAAc,CAAC,EAAE,oCAAoC,CAAA;IAErD;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC;AAwJD,wBAAgB,iBAAiB,CAAE,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAIvF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAA6D,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAC5I,OAAO,EAAyB,oCAAoC,EAAY,QAAQ,EAAE,MAAM,aAAa,CAAA;AAY7G,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAEnB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAE/B;;OAEG;IACH,cAAc,CAAC,EAAE,oCAAoC,CAAA;IAErD;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC;AAED,MAAM,WAAW,iCAAiC,CAAC,CAAC,GAAC,MAAM,CAAE,SAAQ,uBAAuB,CAAC,CAAC,CAAC;IAC7F,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AA2JD,wBAAgB,iBAAiB,CAAE,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAIvF"}
package/dist/src/index.js CHANGED
@@ -8,13 +8,14 @@ import { logger } from '@libp2p/logger';
8
8
  const log = logger('libp2p:prometheus-metrics');
9
9
  class PrometheusMetrics {
10
10
  constructor(init) {
11
+ this.registry = init?.registry;
11
12
  if (init?.preserveExistingMetrics !== true) {
12
13
  log('Clearing existing metrics');
13
- register.clear();
14
+ (this.registry ?? register).clear();
14
15
  }
15
16
  if (init?.preserveExistingMetrics !== false) {
16
17
  log('Collecting default metrics');
17
- collectDefaultMetrics(init?.defaultMetrics);
18
+ collectDefaultMetrics({ ...init?.defaultMetrics, register: this.registry ?? init?.defaultMetrics?.register });
18
19
  }
19
20
  // holds global and per-protocol sent/received stats
20
21
  this.transferStats = new Map();
@@ -82,7 +83,7 @@ class PrometheusMetrics {
82
83
  throw new Error('Metric name is required');
83
84
  }
84
85
  log('Register metric', name);
85
- const metric = new PrometheusMetric(name, opts ?? {});
86
+ const metric = new PrometheusMetric(name, { registry: this.registry, ...opts });
86
87
  if (opts.calculate == null) {
87
88
  return metric;
88
89
  }
@@ -92,7 +93,7 @@ class PrometheusMetrics {
92
93
  throw new Error('Metric name is required');
93
94
  }
94
95
  log('Register metric group', name);
95
- const group = new PrometheusMetricGroup(name, opts ?? {});
96
+ const group = new PrometheusMetricGroup(name, { registry: this.registry, ...opts });
96
97
  if (opts.calculate == null) {
97
98
  return group;
98
99
  }
@@ -102,7 +103,7 @@ class PrometheusMetrics {
102
103
  throw new Error('Counter name is required');
103
104
  }
104
105
  log('Register counter', name);
105
- const counter = new PrometheusCounter(name, opts);
106
+ const counter = new PrometheusCounter(name, { registry: this.registry, ...opts });
106
107
  if (opts.calculate == null) {
107
108
  return counter;
108
109
  }
@@ -112,7 +113,7 @@ class PrometheusMetrics {
112
113
  throw new Error('Metric name is required');
113
114
  }
114
115
  log('Register counter group', name);
115
- const group = new PrometheusCounterGroup(name, opts);
116
+ const group = new PrometheusCounterGroup(name, { registry: this.registry, ...opts });
116
117
  if (opts.calculate == null) {
117
118
  return group;
118
119
  }
@@ -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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"}
@@ -1,10 +1,11 @@
1
- import type { CalculatedMetricOptions, MetricGroup, StopTimer } from '@libp2p/interface-metrics';
1
+ import type { MetricGroup, StopTimer } from '@libp2p/interface-metrics';
2
+ import type { PrometheusCalculatedMetricOptions } from './index.js';
2
3
  export declare class PrometheusMetricGroup implements MetricGroup {
3
4
  private readonly gauge;
4
5
  private readonly label;
5
- constructor(name: string, opts: CalculatedMetricOptions<Record<string, number | bigint>>);
6
- update(values: Record<string, number | bigint>): void;
7
- increment(values: Record<string, number | bigint | unknown>): void;
6
+ constructor(name: string, opts: PrometheusCalculatedMetricOptions<Record<string, number>>);
7
+ update(values: Record<string, number>): void;
8
+ increment(values: Record<string, number | unknown>): void;
8
9
  decrement(values: Record<string, number | unknown>): void;
9
10
  reset(): void;
10
11
  timer(key: string): StopTimer;
@@ -1 +1 @@
1
- {"version":3,"file":"metric-group.d.ts","sourceRoot":"","sources":["../../src/metric-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAmB,WAAW,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAIjH,qBAAa,qBAAsB,YAAW,WAAW;IACvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAEjB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IA6BzF,MAAM,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI;IAQtD,SAAS,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAUnE,SAAS,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAU1D,KAAK,IAAK,IAAI;IAId,KAAK,CAAE,GAAG,EAAE,MAAM,GAAG,SAAS;CAK/B"}
1
+ {"version":3,"file":"metric-group.d.ts","sourceRoot":"","sources":["../../src/metric-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,WAAW,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAExF,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAA;AAGnE,qBAAa,qBAAsB,YAAW,WAAW;IACvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAEjB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA4B1F,MAAM,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAM7C,SAAS,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAQ1D,SAAS,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAQ1D,KAAK,IAAK,IAAI;IAId,KAAK,CAAE,GAAG,EAAE,MAAM,GAAG,SAAS;CAK/B"}
@@ -12,9 +12,7 @@ export class PrometheusMetricGroup {
12
12
  collect = async function () {
13
13
  const values = await calculate();
14
14
  Object.entries(values).forEach(([key, value]) => {
15
- // prom-client does not support bigints for values
16
- // https://github.com/siimon/prom-client/issues/259
17
- this.set({ [label]: key }, Number(value));
15
+ this.set({ [label]: key }, value);
18
16
  });
19
17
  };
20
18
  }
@@ -22,29 +20,24 @@ export class PrometheusMetricGroup {
22
20
  name,
23
21
  help,
24
22
  labelNames: [this.label],
23
+ registers: opts.registry !== undefined ? [opts.registry] : undefined,
25
24
  collect
26
25
  });
27
26
  }
28
27
  update(values) {
29
28
  Object.entries(values).forEach(([key, value]) => {
30
- // prom-client does not support bigints for values
31
- // https://github.com/siimon/prom-client/issues/259
32
- this.gauge.set({ [this.label]: key }, Number(value));
29
+ this.gauge.set({ [this.label]: key }, value);
33
30
  });
34
31
  }
35
32
  increment(values) {
36
33
  Object.entries(values).forEach(([key, value]) => {
37
- // prom-client does not support bigints for values
38
- // https://github.com/siimon/prom-client/issues/259
39
- const inc = typeof value === 'number' || typeof value === 'bigint' ? Number(value) : 1;
34
+ const inc = typeof value === 'number' ? value : 1;
40
35
  this.gauge.inc({ [this.label]: key }, inc);
41
36
  });
42
37
  }
43
38
  decrement(values) {
44
39
  Object.entries(values).forEach(([key, value]) => {
45
- // prom-client does not support bigints for values
46
- // https://github.com/siimon/prom-client/issues/259
47
- const dec = typeof value === 'number' || typeof value === 'bigint' ? Number(value) : 1;
40
+ const dec = typeof value === 'number' ? value : 1;
48
41
  this.gauge.dec({ [this.label]: key }, dec);
49
42
  });
50
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"metric-group.js","sourceRoot":"","sources":["../../src/metric-group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metric-group.js","sourceRoot":"","sources":["../../src/metric-group.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- import type { Metric, CalculatedMetricOptions, StopTimer } from '@libp2p/interface-metrics';
1
+ import type { Metric, StopTimer } from '@libp2p/interface-metrics';
2
+ import type { PrometheusCalculatedMetricOptions } from './index.js';
2
3
  export declare class PrometheusMetric implements Metric {
3
4
  private readonly gauge;
4
- constructor(name: string, opts: CalculatedMetricOptions);
5
- update(value: number | bigint): void;
6
- increment(value?: number | bigint): void;
7
- decrement(value?: number | bigint): void;
5
+ constructor(name: string, opts: PrometheusCalculatedMetricOptions);
6
+ update(value: number): void;
7
+ increment(value?: number): void;
8
+ decrement(value?: number): void;
8
9
  reset(): void;
9
10
  timer(): StopTimer;
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"metric.d.ts","sourceRoot":"","sources":["../../src/metric.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAI3F,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;gBAEhB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB;IA2BxD,MAAM,CAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMrC,SAAS,CAAE,KAAK,GAAE,MAAM,GAAG,MAAU,GAAG,IAAI;IAM5C,SAAS,CAAE,KAAK,GAAE,MAAM,GAAG,MAAU,GAAG,IAAI;IAM5C,KAAK,IAAK,IAAI;IAId,KAAK,IAAK,SAAS;CAGpB"}
1
+ {"version":3,"file":"metric.d.ts","sourceRoot":"","sources":["../../src/metric.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAElE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAA;AAGnE,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;gBAEhB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC;IA0BlE,MAAM,CAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5B,SAAS,CAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAInC,SAAS,CAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAInC,KAAK,IAAK,IAAI;IAId,KAAK,IAAK,SAAS;CAGpB"}
@@ -11,32 +11,25 @@ export class PrometheusMetric {
11
11
  const calculate = opts.calculate;
12
12
  collect = async function () {
13
13
  const value = await calculate();
14
- // prom-client does not support bigints for values
15
- // https://github.com/siimon/prom-client/issues/259
16
- this.set(Number(value));
14
+ this.set(value);
17
15
  };
18
16
  }
19
17
  this.gauge = new Gauge({
20
18
  name,
21
19
  help,
22
20
  labelNames: labels,
21
+ registers: opts.registry !== undefined ? [opts.registry] : undefined,
23
22
  collect
24
23
  });
25
24
  }
26
25
  update(value) {
27
- // prom-client does not support bigints for values
28
- // https://github.com/siimon/prom-client/issues/259
29
- this.gauge.set(Number(value));
26
+ this.gauge.set(value);
30
27
  }
31
28
  increment(value = 1) {
32
- // prom-client does not support bigints for values
33
- // https://github.com/siimon/prom-client/issues/259
34
- this.gauge.inc(Number(value));
29
+ this.gauge.inc(value);
35
30
  }
36
31
  decrement(value = 1) {
37
- // prom-client does not support bigints for values
38
- // https://github.com/siimon/prom-client/issues/259
39
- this.gauge.dec(Number(value));
32
+ this.gauge.dec(value);
40
33
  }
41
34
  reset() {
42
35
  this.gauge.reset();
@@ -1 +1 @@
1
- {"version":3,"file":"metric.js","sourceRoot":"","sources":["../../src/metric.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,OAAO,gBAAgB;IAG3B,YAAa,IAAY,EAAE,IAA6B;QACtD,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,IAAI,OAAgD,CAAA;QAEpD,oBAAoB;QACpB,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;YAEhC,OAAO,GAAG,KAAK;gBACb,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAA;gBAE/B,kDAAkD;gBAClD,mDAAmD;gBACnD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YACzB,CAAC,CAAA;SACF;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;YACrB,IAAI;YACJ,IAAI;YACJ,UAAU,EAAE,MAAM;YAClB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAE,KAAsB;QAC5B,kDAAkD;QAClD,mDAAmD;QACnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED,SAAS,CAAE,QAAyB,CAAC;QACnC,kDAAkD;QAClD,mDAAmD;QACnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED,SAAS,CAAE,QAAyB,CAAC;QACnC,kDAAkD;QAClD,mDAAmD;QACnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAA;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"metric.js","sourceRoot":"","sources":["../../src/metric.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,OAAO,gBAAgB;IAG3B,YAAa,IAAY,EAAE,IAAuC;QAChE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,IAAI,OAAgD,CAAA;QAEpD,oBAAoB;QACpB,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;YAEhC,OAAO,GAAG,KAAK;gBACb,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAA;gBAE/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACjB,CAAC,CAAA;SACF;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;YACrB,IAAI;YACJ,IAAI;YACJ,UAAU,EAAE,MAAM;YAClB,SAAS,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YACpE,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAE,KAAa;QACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IAED,SAAS,CAAE,QAAgB,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IAED,SAAS,CAAE,QAAgB,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAA;IAChC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/prometheus-metrics",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Collect libp2p metrics for scraping by Prometheus or Graphana",
5
5
  "author": "",
6
6
  "license": "Apache-2.0 OR MIT",
@@ -133,7 +133,7 @@
133
133
  },
134
134
  "dependencies": {
135
135
  "@libp2p/interface-connection": "^3.0.2",
136
- "@libp2p/interface-metrics": "^4.0.0",
136
+ "@libp2p/interface-metrics": "^4.0.2",
137
137
  "@libp2p/logger": "^2.0.2",
138
138
  "it-foreach": "^1.0.0",
139
139
  "it-stream-types": "^1.0.4"
@@ -1,12 +1,13 @@
1
- import type { CounterGroup, CalculatedMetricOptions, CalculateMetric } from '@libp2p/interface-metrics'
1
+ import type { CounterGroup, CalculateMetric } from '@libp2p/interface-metrics'
2
2
  import { Counter as PromCounter, CollectFunction } from 'prom-client'
3
+ import type { PrometheusCalculatedMetricOptions } from './index.js'
3
4
  import { normaliseString } from './utils.js'
4
5
 
5
6
  export class PrometheusCounterGroup implements CounterGroup {
6
7
  private readonly counter: PromCounter
7
8
  private readonly label: string
8
9
 
9
- constructor (name: string, opts: CalculatedMetricOptions<Record<string, number | bigint>>) {
10
+ constructor (name: string, opts: PrometheusCalculatedMetricOptions<Record<string, number>>) {
10
11
  name = normaliseString(name)
11
12
  const help = normaliseString(opts.help ?? name)
12
13
  const label = this.label = normaliseString(opts.label ?? name)
@@ -14,15 +15,13 @@ export class PrometheusCounterGroup implements CounterGroup {
14
15
 
15
16
  // calculated metric
16
17
  if (opts?.calculate != null) {
17
- const calculate: CalculateMetric<Record<string, number | bigint>> = opts.calculate
18
+ const calculate: CalculateMetric<Record<string, number>> = opts.calculate
18
19
 
19
20
  collect = async function () {
20
21
  const values = await calculate()
21
22
 
22
23
  Object.entries(values).forEach(([key, value]) => {
23
- // prom-client does not support bigints for values
24
- // https://github.com/siimon/prom-client/issues/259
25
- this.inc({ [label]: key }, Number(value))
24
+ this.inc({ [label]: key }, value)
26
25
  })
27
26
  }
28
27
  }
@@ -31,15 +30,14 @@ export class PrometheusCounterGroup implements CounterGroup {
31
30
  name,
32
31
  help,
33
32
  labelNames: [this.label],
33
+ registers: opts.registry !== undefined ? [opts.registry] : undefined,
34
34
  collect
35
35
  })
36
36
  }
37
37
 
38
- increment (values: Record<string, number | bigint | unknown>): void {
38
+ increment (values: Record<string, number | unknown>): void {
39
39
  Object.entries(values).forEach(([key, value]) => {
40
- // prom-client does not support bigints for values
41
- // https://github.com/siimon/prom-client/issues/259
42
- const inc = typeof value === 'number' || typeof value === 'bigint' ? Number(value) : 1
40
+ const inc = typeof value === 'number' ? value : 1
43
41
 
44
42
  this.counter.inc({ [this.label]: key }, inc)
45
43
  })
package/src/counter.ts CHANGED
@@ -1,11 +1,12 @@
1
- import type { Counter, CalculatedMetricOptions } from '@libp2p/interface-metrics'
1
+ import type { Counter } from '@libp2p/interface-metrics'
2
2
  import { CollectFunction, Counter as PromCounter } from 'prom-client'
3
+ import type { PrometheusCalculatedMetricOptions } from './index.js'
3
4
  import { normaliseString } from './utils.js'
4
5
 
5
6
  export class PrometheusCounter implements Counter {
6
7
  private readonly counter: PromCounter
7
8
 
8
- constructor (name: string, opts: CalculatedMetricOptions) {
9
+ constructor (name: string, opts: PrometheusCalculatedMetricOptions) {
9
10
  name = normaliseString(name)
10
11
  const help = normaliseString(opts.help ?? name)
11
12
  const labels = opts.label != null ? [normaliseString(opts.label)] : []
@@ -18,7 +19,7 @@ export class PrometheusCounter implements Counter {
18
19
  collect = async function () {
19
20
  const value = await calculate()
20
21
 
21
- this.inc(Number(value))
22
+ this.inc(value)
22
23
  }
23
24
  }
24
25
 
@@ -26,14 +27,13 @@ export class PrometheusCounter implements Counter {
26
27
  name,
27
28
  help,
28
29
  labelNames: labels,
30
+ registers: opts.registry !== undefined ? [opts.registry] : undefined,
29
31
  collect
30
32
  })
31
33
  }
32
34
 
33
- increment (value: number | bigint = 1): void {
34
- // prom-client does not support bigints for values
35
- // https://github.com/siimon/prom-client/issues/259
36
- this.counter.inc(Number(value))
35
+ increment (value: number = 1): void {
36
+ this.counter.inc(value)
37
37
  }
38
38
 
39
39
  reset (): void {
package/src/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { CalculatedMetricOptions, Counter, CounterGroup, Metric, MetricGroup, MetricOptions, Metrics } from '@libp2p/interface-metrics'
2
- import { collectDefaultMetrics, DefaultMetricsCollectorConfiguration, register } from 'prom-client'
2
+ import { collectDefaultMetrics, DefaultMetricsCollectorConfiguration, register, Registry } from 'prom-client'
3
3
  import type { MultiaddrConnection, Stream, Connection } from '@libp2p/interface-connection'
4
4
  import type { Duplex } from 'it-stream-types'
5
5
  import each from 'it-foreach'
@@ -12,6 +12,12 @@ import { logger } from '@libp2p/logger'
12
12
  const log = logger('libp2p:prometheus-metrics')
13
13
 
14
14
  export interface PrometheusMetricsInit {
15
+ /**
16
+ * Use a custom registry to register metrics.
17
+ * By default, the global registry is used to register metrics.
18
+ */
19
+ registry?: Registry
20
+
15
21
  /**
16
22
  * By default we collect default metrics - CPU, memory etc, to not do
17
23
  * this, pass true here
@@ -31,18 +37,25 @@ export interface PrometheusMetricsInit {
31
37
  preserveExistingMetrics?: boolean
32
38
  }
33
39
 
40
+ export interface PrometheusCalculatedMetricOptions<T=number> extends CalculatedMetricOptions<T> {
41
+ registry?: Registry
42
+ }
43
+
34
44
  class PrometheusMetrics implements Metrics {
35
45
  private transferStats: Map<string, number>
46
+ private readonly registry?: Registry
36
47
 
37
48
  constructor (init?: Partial<PrometheusMetricsInit>) {
49
+ this.registry = init?.registry
50
+
38
51
  if (init?.preserveExistingMetrics !== true) {
39
52
  log('Clearing existing metrics')
40
- register.clear()
53
+ ;(this.registry ?? register).clear()
41
54
  }
42
55
 
43
56
  if (init?.preserveExistingMetrics !== false) {
44
57
  log('Collecting default metrics')
45
- collectDefaultMetrics(init?.defaultMetrics)
58
+ collectDefaultMetrics({ ...init?.defaultMetrics, register: this.registry ?? init?.defaultMetrics?.register })
46
59
  }
47
60
 
48
61
  // holds global and per-protocol sent/received stats
@@ -120,7 +133,7 @@ class PrometheusMetrics implements Metrics {
120
133
  this._track(stream, stream.stat.protocol)
121
134
  }
122
135
 
123
- registerMetric (name: string, opts: CalculatedMetricOptions): void
136
+ registerMetric (name: string, opts: PrometheusCalculatedMetricOptions): void
124
137
  registerMetric (name: string, opts?: MetricOptions): Metric
125
138
  registerMetric (name: string, opts: any = {}): any {
126
139
  if (name == null ?? name.trim() === '') {
@@ -128,14 +141,14 @@ class PrometheusMetrics implements Metrics {
128
141
  }
129
142
 
130
143
  log('Register metric', name)
131
- const metric = new PrometheusMetric(name, opts ?? {})
144
+ const metric = new PrometheusMetric(name, { registry: this.registry, ...opts })
132
145
 
133
146
  if (opts.calculate == null) {
134
147
  return metric
135
148
  }
136
149
  }
137
150
 
138
- registerMetricGroup (name: string, opts: CalculatedMetricOptions<Record<string, number>>): void
151
+ registerMetricGroup (name: string, opts: PrometheusCalculatedMetricOptions<Record<string, number>>): void
139
152
  registerMetricGroup (name: string, opts?: MetricOptions): MetricGroup
140
153
  registerMetricGroup (name: string, opts: any = {}): any {
141
154
  if (name == null ?? name.trim() === '') {
@@ -143,14 +156,14 @@ class PrometheusMetrics implements Metrics {
143
156
  }
144
157
 
145
158
  log('Register metric group', name)
146
- const group = new PrometheusMetricGroup(name, opts ?? {})
159
+ const group = new PrometheusMetricGroup(name, { registry: this.registry, ...opts })
147
160
 
148
161
  if (opts.calculate == null) {
149
162
  return group
150
163
  }
151
164
  }
152
165
 
153
- registerCounter (name: string, opts: CalculatedMetricOptions): void
166
+ registerCounter (name: string, opts: PrometheusCalculatedMetricOptions): void
154
167
  registerCounter (name: string, opts?: MetricOptions): Counter
155
168
  registerCounter (name: string, opts: any = {}): any {
156
169
  if (name == null ?? name.trim() === '') {
@@ -158,14 +171,14 @@ class PrometheusMetrics implements Metrics {
158
171
  }
159
172
 
160
173
  log('Register counter', name)
161
- const counter = new PrometheusCounter(name, opts)
174
+ const counter = new PrometheusCounter(name, { registry: this.registry, ...opts })
162
175
 
163
176
  if (opts.calculate == null) {
164
177
  return counter
165
178
  }
166
179
  }
167
180
 
168
- registerCounterGroup (name: string, opts: CalculatedMetricOptions<Record<string, number>>): void
181
+ registerCounterGroup (name: string, opts: PrometheusCalculatedMetricOptions<Record<string, number>>): void
169
182
  registerCounterGroup (name: string, opts?: MetricOptions): CounterGroup
170
183
  registerCounterGroup (name: string, opts: any = {}): any {
171
184
  if (name == null ?? name.trim() === '') {
@@ -173,7 +186,7 @@ class PrometheusMetrics implements Metrics {
173
186
  }
174
187
 
175
188
  log('Register counter group', name)
176
- const group = new PrometheusCounterGroup(name, opts)
189
+ const group = new PrometheusCounterGroup(name, { registry: this.registry, ...opts })
177
190
 
178
191
  if (opts.calculate == null) {
179
192
  return group
@@ -1,12 +1,13 @@
1
- import type { CalculatedMetricOptions, CalculateMetric, MetricGroup, StopTimer } from '@libp2p/interface-metrics'
1
+ import type { CalculateMetric, MetricGroup, StopTimer } from '@libp2p/interface-metrics'
2
2
  import { CollectFunction, Gauge } from 'prom-client'
3
+ import type { PrometheusCalculatedMetricOptions } from './index.js'
3
4
  import { normaliseString } from './utils.js'
4
5
 
5
6
  export class PrometheusMetricGroup implements MetricGroup {
6
7
  private readonly gauge: Gauge
7
8
  private readonly label: string
8
9
 
9
- constructor (name: string, opts: CalculatedMetricOptions<Record<string, number | bigint>>) {
10
+ constructor (name: string, opts: PrometheusCalculatedMetricOptions<Record<string, number>>) {
10
11
  name = normaliseString(name)
11
12
  const help = normaliseString(opts.help ?? name)
12
13
  const label = this.label = normaliseString(opts.label ?? name)
@@ -14,15 +15,13 @@ export class PrometheusMetricGroup implements MetricGroup {
14
15
 
15
16
  // calculated metric
16
17
  if (opts?.calculate != null) {
17
- const calculate: CalculateMetric<Record<string, number | bigint>> = opts.calculate
18
+ const calculate: CalculateMetric<Record<string, number>> = opts.calculate
18
19
 
19
20
  collect = async function () {
20
21
  const values = await calculate()
21
22
 
22
23
  Object.entries(values).forEach(([key, value]) => {
23
- // prom-client does not support bigints for values
24
- // https://github.com/siimon/prom-client/issues/259
25
- this.set({ [label]: key }, Number(value))
24
+ this.set({ [label]: key }, value)
26
25
  })
27
26
  }
28
27
  }
@@ -31,23 +30,20 @@ export class PrometheusMetricGroup implements MetricGroup {
31
30
  name,
32
31
  help,
33
32
  labelNames: [this.label],
33
+ registers: opts.registry !== undefined ? [opts.registry] : undefined,
34
34
  collect
35
35
  })
36
36
  }
37
37
 
38
- update (values: Record<string, number | bigint>): void {
38
+ update (values: Record<string, number>): void {
39
39
  Object.entries(values).forEach(([key, value]) => {
40
- // prom-client does not support bigints for values
41
- // https://github.com/siimon/prom-client/issues/259
42
- this.gauge.set({ [this.label]: key }, Number(value))
40
+ this.gauge.set({ [this.label]: key }, value)
43
41
  })
44
42
  }
45
43
 
46
- increment (values: Record<string, number | bigint | unknown>): void {
44
+ increment (values: Record<string, number | unknown>): void {
47
45
  Object.entries(values).forEach(([key, value]) => {
48
- // prom-client does not support bigints for values
49
- // https://github.com/siimon/prom-client/issues/259
50
- const inc = typeof value === 'number' || typeof value === 'bigint' ? Number(value) : 1
46
+ const inc = typeof value === 'number' ? value : 1
51
47
 
52
48
  this.gauge.inc({ [this.label]: key }, inc)
53
49
  })
@@ -55,9 +51,7 @@ export class PrometheusMetricGroup implements MetricGroup {
55
51
 
56
52
  decrement (values: Record<string, number | unknown>): void {
57
53
  Object.entries(values).forEach(([key, value]) => {
58
- // prom-client does not support bigints for values
59
- // https://github.com/siimon/prom-client/issues/259
60
- const dec = typeof value === 'number' || typeof value === 'bigint' ? Number(value) : 1
54
+ const dec = typeof value === 'number' ? value : 1
61
55
 
62
56
  this.gauge.dec({ [this.label]: key }, dec)
63
57
  })
package/src/metric.ts CHANGED
@@ -1,11 +1,12 @@
1
- import type { Metric, CalculatedMetricOptions, StopTimer } from '@libp2p/interface-metrics'
1
+ import type { Metric, StopTimer } from '@libp2p/interface-metrics'
2
2
  import { CollectFunction, Gauge } from 'prom-client'
3
+ import type { PrometheusCalculatedMetricOptions } from './index.js'
3
4
  import { normaliseString } from './utils.js'
4
5
 
5
6
  export class PrometheusMetric implements Metric {
6
7
  private readonly gauge: Gauge
7
8
 
8
- constructor (name: string, opts: CalculatedMetricOptions) {
9
+ constructor (name: string, opts: PrometheusCalculatedMetricOptions) {
9
10
  name = normaliseString(name)
10
11
  const help = normaliseString(opts.help ?? name)
11
12
  const labels = opts.label != null ? [normaliseString(opts.label)] : []
@@ -18,9 +19,7 @@ export class PrometheusMetric implements Metric {
18
19
  collect = async function () {
19
20
  const value = await calculate()
20
21
 
21
- // prom-client does not support bigints for values
22
- // https://github.com/siimon/prom-client/issues/259
23
- this.set(Number(value))
22
+ this.set(value)
24
23
  }
25
24
  }
26
25
 
@@ -28,26 +27,21 @@ export class PrometheusMetric implements Metric {
28
27
  name,
29
28
  help,
30
29
  labelNames: labels,
30
+ registers: opts.registry !== undefined ? [opts.registry] : undefined,
31
31
  collect
32
32
  })
33
33
  }
34
34
 
35
- update (value: number | bigint): void {
36
- // prom-client does not support bigints for values
37
- // https://github.com/siimon/prom-client/issues/259
38
- this.gauge.set(Number(value))
35
+ update (value: number): void {
36
+ this.gauge.set(value)
39
37
  }
40
38
 
41
- increment (value: number | bigint = 1): void {
42
- // prom-client does not support bigints for values
43
- // https://github.com/siimon/prom-client/issues/259
44
- this.gauge.inc(Number(value))
39
+ increment (value: number = 1): void {
40
+ this.gauge.inc(value)
45
41
  }
46
42
 
47
- decrement (value: number | bigint = 1): void {
48
- // prom-client does not support bigints for values
49
- // https://github.com/siimon/prom-client/issues/259
50
- this.gauge.dec(Number(value))
43
+ decrement (value: number = 1): void {
44
+ this.gauge.dec(value)
51
45
  }
52
46
 
53
47
  reset (): void {