@libp2p/prometheus-metrics 1.1.3 → 1.1.5
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/src/counter-group.d.ts +2 -2
- package/dist/src/counter-group.d.ts.map +1 -1
- package/dist/src/counter-group.js +3 -0
- package/dist/src/counter-group.js.map +1 -1
- package/dist/src/counter.d.ts +2 -2
- package/dist/src/counter.d.ts.map +1 -1
- package/dist/src/counter.js +3 -1
- package/dist/src/counter.js.map +1 -1
- package/dist/src/index.d.ts +96 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +102 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/metric-group.d.ts +2 -2
- package/dist/src/metric-group.d.ts.map +1 -1
- package/dist/src/metric-group.js +3 -0
- package/dist/src/metric-group.js.map +1 -1
- package/dist/src/metric.d.ts +1 -1
- package/dist/src/metric.d.ts.map +1 -1
- package/dist/src/metric.js +3 -1
- package/dist/src/metric.js.map +1 -1
- package/package.json +14 -19
- package/src/counter-group.ts +4 -4
- package/src/counter.ts +5 -5
- package/src/index.ts +106 -10
- package/src/metric-group.ts +4 -4
- package/src/metric.ts +5 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { CalculatedMetric } from './utils.js';
|
|
1
|
+
import { type CalculatedMetric } from './utils.js';
|
|
3
2
|
import type { PrometheusCalculatedMetricOptions } from './index.js';
|
|
3
|
+
import type { CounterGroup, CalculateMetric } from '@libp2p/interface-metrics';
|
|
4
4
|
export declare class PrometheusCounterGroup implements CounterGroup, CalculatedMetric<Record<string, number>> {
|
|
5
5
|
private readonly counter;
|
|
6
6
|
private readonly label;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"counter-group.d.ts","sourceRoot":"","sources":["../../src/counter-group.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"counter-group.d.ts","sourceRoot":"","sources":["../../src/counter-group.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE9E,qBAAa,sBAAuB,YAAW,YAAY,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgD;gBAE/D,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgC1F,aAAa,CAAE,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;IAIzE,SAAS,CAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAQ1D,KAAK,IAAK,IAAI;CAGf"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Counter as PromCounter } from 'prom-client';
|
|
2
2
|
import { normaliseString } from './utils.js';
|
|
3
3
|
export class PrometheusCounterGroup {
|
|
4
|
+
counter;
|
|
5
|
+
label;
|
|
6
|
+
calculators;
|
|
4
7
|
constructor(name, opts) {
|
|
5
8
|
name = normaliseString(name);
|
|
6
9
|
const help = normaliseString(opts.help ?? name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"counter-group.js","sourceRoot":"","sources":["../../src/counter-group.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"counter-group.js","sourceRoot":"","sources":["../../src/counter-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAwB,MAAM,aAAa,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAyB,MAAM,YAAY,CAAA;AAInE,MAAM,OAAO,sBAAsB;IAChB,OAAO,CAAa;IACpB,KAAK,CAAQ;IACb,WAAW,CAAgD;IAE5E,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;QAC1D,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QAErB,oBAAoB;QACpB,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrC,MAAM,IAAI,GAAG,IAAI,CAAA;YAEjB,OAAO,GAAG,KAAK;gBACb,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE;oBACvD,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;oBAEhC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;wBAC9C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;oBACnC,CAAC,CAAC,CAAA;gBACJ,CAAC,CAAC,CAAC,CAAA;YACL,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,aAAa,CAAE,UAAmD;QAChE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACnC,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"}
|
package/dist/src/counter.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type CalculatedMetric } from './utils.js';
|
|
2
2
|
import type { PrometheusCalculatedMetricOptions } from './index.js';
|
|
3
|
-
import {
|
|
3
|
+
import type { CalculateMetric, Counter } from '@libp2p/interface-metrics';
|
|
4
4
|
export declare class PrometheusCounter implements Counter, CalculatedMetric {
|
|
5
5
|
private readonly counter;
|
|
6
6
|
private readonly calculators;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../src/counter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../src/counter.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAEzE,qBAAa,iBAAkB,YAAW,OAAO,EAAE,gBAAgB;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;gBAElC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC;IA6BlE,aAAa,CAAE,UAAU,EAAE,eAAe,GAAG,IAAI;IAIjD,SAAS,CAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAInC,KAAK,IAAK,IAAI;CAGf"}
|
package/dist/src/counter.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Counter as PromCounter } from 'prom-client';
|
|
2
2
|
import { normaliseString } from './utils.js';
|
|
3
3
|
export class PrometheusCounter {
|
|
4
|
+
counter;
|
|
5
|
+
calculators;
|
|
4
6
|
constructor(name, opts) {
|
|
5
7
|
name = normaliseString(name);
|
|
6
8
|
const help = normaliseString(opts.help ?? name);
|
|
@@ -12,7 +14,7 @@ export class PrometheusCounter {
|
|
|
12
14
|
this.calculators.push(opts.calculate);
|
|
13
15
|
const self = this;
|
|
14
16
|
collect = async function () {
|
|
15
|
-
const values = await Promise.all(self.calculators.map(async (calculate) =>
|
|
17
|
+
const values = await Promise.all(self.calculators.map(async (calculate) => calculate()));
|
|
16
18
|
const sum = values.reduce((acc, curr) => acc + curr, 0);
|
|
17
19
|
this.inc(sum);
|
|
18
20
|
};
|
package/dist/src/counter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"counter.js","sourceRoot":"","sources":["../../src/counter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"counter.js","sourceRoot":"","sources":["../../src/counter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,OAAO,IAAI,WAAW,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAyB,MAAM,YAAY,CAAA;AAInE,MAAM,OAAO,iBAAiB;IACX,OAAO,CAAa;IACpB,WAAW,CAAmB;IAE/C,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;QAC1D,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QAErB,oBAAoB;QACpB,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrC,MAAM,IAAI,GAAG,IAAI,CAAA;YAEjB,OAAO,GAAG,KAAK;gBACb,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;gBACtF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;gBAEvD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACf,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,aAAa,CAAE,UAA2B;QACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACnC,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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
*
|
|
4
|
+
* Collect libp2p metrics for scraping by Prometheus or Graphana.
|
|
5
|
+
* @module libp2p-prometheus-metrics
|
|
6
|
+
*
|
|
7
|
+
* A tracked metric can be created by calling either `registerMetric` on the metrics object
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
*
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
13
|
+
*
|
|
14
|
+
* const metrics = prometheusMetrics()()
|
|
15
|
+
* const myMetric = metrics.registerMetric({
|
|
16
|
+
* name: 'my_metric',
|
|
17
|
+
* label: 'my_label',
|
|
18
|
+
* help: 'my help text'
|
|
19
|
+
* })
|
|
20
|
+
*
|
|
21
|
+
* myMetric.update(1)
|
|
22
|
+
* ```
|
|
23
|
+
* A metric that is expensive to calculate can be created by passing a `calculate` function that will only be invoked when metrics are being scraped:
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
*
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
29
|
+
*
|
|
30
|
+
* const metrics = prometheusMetrics()()
|
|
31
|
+
* const myMetric = metrics.registerMetric({
|
|
32
|
+
* name: 'my_metric',
|
|
33
|
+
* label: 'my_label',
|
|
34
|
+
* help: 'my help text',
|
|
35
|
+
* calculate: async () => {
|
|
36
|
+
* // do something expensive
|
|
37
|
+
* return 1
|
|
38
|
+
* }
|
|
39
|
+
* })
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* If several metrics should be grouped together (e.g. for graphing purposes) `registerMetricGroup` can be used instead:
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
*
|
|
46
|
+
* ```typescript
|
|
47
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
48
|
+
*
|
|
49
|
+
* const metrics = prometheusMetrics()()
|
|
50
|
+
* const myMetricGroup = metrics.registerMetricGroup({
|
|
51
|
+
* name: 'my_metric_group',
|
|
52
|
+
* label: 'my_label',
|
|
53
|
+
* help: 'my help text'
|
|
54
|
+
* })
|
|
55
|
+
*
|
|
56
|
+
* myMetricGroup.increment({ my_label: 'my_value' })
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* There are specific metric groups for tracking libp2p connections and streams:
|
|
60
|
+
*
|
|
61
|
+
* Track a newly opened multiaddr connection:
|
|
62
|
+
* @example
|
|
63
|
+
*
|
|
64
|
+
* ```typescript
|
|
65
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
66
|
+
* import { createLibp2p } from 'libp2p'
|
|
67
|
+
*
|
|
68
|
+
*
|
|
69
|
+
* const metrics = prometheusMetrics()()
|
|
70
|
+
*
|
|
71
|
+
* const libp2p = await createLibp2p({
|
|
72
|
+
* metrics: metrics,
|
|
73
|
+
* })
|
|
74
|
+
* // set up a multiaddr connection
|
|
75
|
+
* const connection = await libp2p.dial('multiaddr')
|
|
76
|
+
* const connections = metrics.trackMultiaddrConnection(connection)
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* Track a newly opened stream:
|
|
80
|
+
* @example
|
|
81
|
+
*
|
|
82
|
+
* ```typescript
|
|
83
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
84
|
+
* import { createLibp2p } from 'libp2p'
|
|
85
|
+
*
|
|
86
|
+
* const metrics = prometheusMetrics()()
|
|
87
|
+
*
|
|
88
|
+
* const libp2p = await createLibp2p({
|
|
89
|
+
* metrics: metrics,
|
|
90
|
+
* })
|
|
91
|
+
*
|
|
92
|
+
* const stream = await connection.newStream('/my/protocol')
|
|
93
|
+
* const streams = metrics.trackProtocolStream(stream)
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
import { type DefaultMetricsCollectorConfiguration, type Registry } from 'prom-client';
|
|
1
97
|
import type { CalculatedMetricOptions, Metrics } from '@libp2p/interface-metrics';
|
|
2
|
-
import { DefaultMetricsCollectorConfiguration, Registry } from 'prom-client';
|
|
3
98
|
export interface PrometheusMetricsInit {
|
|
4
99
|
/**
|
|
5
100
|
* Use a custom registry to register metrics.
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8FG;AAIH,OAAO,EAAyB,KAAK,oCAAoC,EAAY,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAMvH,OAAO,KAAK,EAAE,uBAAuB,EAA6D,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAQ5I,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;AAoND,wBAAgB,iBAAiB,CAAE,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAIvF"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,14 +1,111 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
*
|
|
4
|
+
* Collect libp2p metrics for scraping by Prometheus or Graphana.
|
|
5
|
+
* @module libp2p-prometheus-metrics
|
|
6
|
+
*
|
|
7
|
+
* A tracked metric can be created by calling either `registerMetric` on the metrics object
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
*
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
13
|
+
*
|
|
14
|
+
* const metrics = prometheusMetrics()()
|
|
15
|
+
* const myMetric = metrics.registerMetric({
|
|
16
|
+
* name: 'my_metric',
|
|
17
|
+
* label: 'my_label',
|
|
18
|
+
* help: 'my help text'
|
|
19
|
+
* })
|
|
20
|
+
*
|
|
21
|
+
* myMetric.update(1)
|
|
22
|
+
* ```
|
|
23
|
+
* A metric that is expensive to calculate can be created by passing a `calculate` function that will only be invoked when metrics are being scraped:
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
*
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
29
|
+
*
|
|
30
|
+
* const metrics = prometheusMetrics()()
|
|
31
|
+
* const myMetric = metrics.registerMetric({
|
|
32
|
+
* name: 'my_metric',
|
|
33
|
+
* label: 'my_label',
|
|
34
|
+
* help: 'my help text',
|
|
35
|
+
* calculate: async () => {
|
|
36
|
+
* // do something expensive
|
|
37
|
+
* return 1
|
|
38
|
+
* }
|
|
39
|
+
* })
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* If several metrics should be grouped together (e.g. for graphing purposes) `registerMetricGroup` can be used instead:
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
*
|
|
46
|
+
* ```typescript
|
|
47
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
48
|
+
*
|
|
49
|
+
* const metrics = prometheusMetrics()()
|
|
50
|
+
* const myMetricGroup = metrics.registerMetricGroup({
|
|
51
|
+
* name: 'my_metric_group',
|
|
52
|
+
* label: 'my_label',
|
|
53
|
+
* help: 'my help text'
|
|
54
|
+
* })
|
|
55
|
+
*
|
|
56
|
+
* myMetricGroup.increment({ my_label: 'my_value' })
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* There are specific metric groups for tracking libp2p connections and streams:
|
|
60
|
+
*
|
|
61
|
+
* Track a newly opened multiaddr connection:
|
|
62
|
+
* @example
|
|
63
|
+
*
|
|
64
|
+
* ```typescript
|
|
65
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
66
|
+
* import { createLibp2p } from 'libp2p'
|
|
67
|
+
*
|
|
68
|
+
*
|
|
69
|
+
* const metrics = prometheusMetrics()()
|
|
70
|
+
*
|
|
71
|
+
* const libp2p = await createLibp2p({
|
|
72
|
+
* metrics: metrics,
|
|
73
|
+
* })
|
|
74
|
+
* // set up a multiaddr connection
|
|
75
|
+
* const connection = await libp2p.dial('multiaddr')
|
|
76
|
+
* const connections = metrics.trackMultiaddrConnection(connection)
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* Track a newly opened stream:
|
|
80
|
+
* @example
|
|
81
|
+
*
|
|
82
|
+
* ```typescript
|
|
83
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
84
|
+
* import { createLibp2p } from 'libp2p'
|
|
85
|
+
*
|
|
86
|
+
* const metrics = prometheusMetrics()()
|
|
87
|
+
*
|
|
88
|
+
* const libp2p = await createLibp2p({
|
|
89
|
+
* metrics: metrics,
|
|
90
|
+
* })
|
|
91
|
+
*
|
|
92
|
+
* const stream = await connection.newStream('/my/protocol')
|
|
93
|
+
* const streams = metrics.trackProtocolStream(stream)
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
import { logger } from '@libp2p/logger';
|
|
2
97
|
import each from 'it-foreach';
|
|
3
|
-
import {
|
|
4
|
-
import { PrometheusMetricGroup } from './metric-group.js';
|
|
5
|
-
import { PrometheusCounter } from './counter.js';
|
|
98
|
+
import { collectDefaultMetrics, register } from 'prom-client';
|
|
6
99
|
import { PrometheusCounterGroup } from './counter-group.js';
|
|
7
|
-
import {
|
|
100
|
+
import { PrometheusCounter } from './counter.js';
|
|
101
|
+
import { PrometheusMetricGroup } from './metric-group.js';
|
|
102
|
+
import { PrometheusMetric } from './metric.js';
|
|
8
103
|
const log = logger('libp2p:prometheus-metrics');
|
|
9
104
|
// prom-client metrics are global
|
|
10
105
|
const metrics = new Map();
|
|
11
106
|
class PrometheusMetrics {
|
|
107
|
+
transferStats;
|
|
108
|
+
registry;
|
|
12
109
|
constructor(init) {
|
|
13
110
|
this.registry = init?.registry;
|
|
14
111
|
if (init?.preserveExistingMetrics !== true) {
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type CalculatedMetric } from './utils.js';
|
|
2
2
|
import type { PrometheusCalculatedMetricOptions } from './index.js';
|
|
3
|
-
import {
|
|
3
|
+
import type { CalculateMetric, MetricGroup, StopTimer } from '@libp2p/interface-metrics';
|
|
4
4
|
export declare class PrometheusMetricGroup implements MetricGroup, CalculatedMetric<Record<string, number>> {
|
|
5
5
|
private readonly gauge;
|
|
6
6
|
private readonly label;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric-group.d.ts","sourceRoot":"","sources":["../../src/metric-group.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metric-group.d.ts","sourceRoot":"","sources":["../../src/metric-group.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAExF,qBAAa,qBAAsB,YAAW,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgD;gBAE/D,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgC1F,aAAa,CAAE,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;IAIzE,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"}
|
package/dist/src/metric-group.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Gauge } from 'prom-client';
|
|
2
2
|
import { normaliseString } from './utils.js';
|
|
3
3
|
export class PrometheusMetricGroup {
|
|
4
|
+
gauge;
|
|
5
|
+
label;
|
|
6
|
+
calculators;
|
|
4
7
|
constructor(name, opts) {
|
|
5
8
|
name = normaliseString(name);
|
|
6
9
|
const help = normaliseString(opts.help ?? name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric-group.js","sourceRoot":"","sources":["../../src/metric-group.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metric-group.js","sourceRoot":"","sources":["../../src/metric-group.ts"],"names":[],"mappings":"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"}
|
package/dist/src/metric.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Metric, StopTimer, CalculateMetric } from '@libp2p/interface-metrics';
|
|
2
1
|
import type { PrometheusCalculatedMetricOptions } from './index.js';
|
|
2
|
+
import type { Metric, StopTimer, CalculateMetric } from '@libp2p/interface-metrics';
|
|
3
3
|
export declare class PrometheusMetric implements Metric {
|
|
4
4
|
private readonly gauge;
|
|
5
5
|
private readonly calculators;
|
package/dist/src/metric.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric.d.ts","sourceRoot":"","sources":["../../src/metric.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metric.d.ts","sourceRoot":"","sources":["../../src/metric.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAEnF,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;gBAElC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC;IA6BlE,aAAa,CAAE,UAAU,EAAE,eAAe,GAAG,IAAI;IAIjD,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"}
|
package/dist/src/metric.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Gauge } from 'prom-client';
|
|
2
2
|
import { normaliseString } from './utils.js';
|
|
3
3
|
export class PrometheusMetric {
|
|
4
|
+
gauge;
|
|
5
|
+
calculators;
|
|
4
6
|
constructor(name, opts) {
|
|
5
7
|
name = normaliseString(name);
|
|
6
8
|
const help = normaliseString(opts.help ?? name);
|
|
@@ -12,7 +14,7 @@ export class PrometheusMetric {
|
|
|
12
14
|
this.calculators.push(opts.calculate);
|
|
13
15
|
const self = this;
|
|
14
16
|
collect = async function () {
|
|
15
|
-
const values = await Promise.all(self.calculators.map(async (calculate) =>
|
|
17
|
+
const values = await Promise.all(self.calculators.map(async (calculate) => calculate()));
|
|
16
18
|
const sum = values.reduce((acc, curr) => acc + curr, 0);
|
|
17
19
|
this.set(sum);
|
|
18
20
|
};
|
package/dist/src/metric.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric.js","sourceRoot":"","sources":["../../src/metric.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metric.js","sourceRoot":"","sources":["../../src/metric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAI5C,MAAM,OAAO,gBAAgB;IACV,KAAK,CAAO;IACZ,WAAW,CAAmB;IAE/C,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;QACpD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QAErB,oBAAoB;QACpB,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrC,MAAM,IAAI,GAAG,IAAI,CAAA;YAEjB,OAAO,GAAG,KAAK;gBACb,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;gBACtF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;gBAEvD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACf,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,aAAa,CAAE,UAA2B;QACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACnC,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.1.
|
|
3
|
+
"version": "1.1.5",
|
|
4
4
|
"description": "Collect libp2p metrics for scraping by Prometheus or Graphana",
|
|
5
5
|
"author": "",
|
|
6
6
|
"license": "Apache-2.0 OR MIT",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"url": "https://github.com/libp2p/js-libp2p-prometheus-metrics/issues"
|
|
14
14
|
},
|
|
15
15
|
"engines": {
|
|
16
|
-
"node": ">=
|
|
17
|
-
"npm": ">=
|
|
16
|
+
"node": ">=18.0.0",
|
|
17
|
+
"npm": ">=8.6.0"
|
|
18
18
|
},
|
|
19
19
|
"type": "module",
|
|
20
20
|
"types": "./dist/src/index.d.ts",
|
|
@@ -133,25 +133,20 @@
|
|
|
133
133
|
"docs": "aegir docs"
|
|
134
134
|
},
|
|
135
135
|
"dependencies": {
|
|
136
|
-
"@libp2p/interface-connection": "^
|
|
136
|
+
"@libp2p/interface-connection": "^5.0.2",
|
|
137
137
|
"@libp2p/interface-metrics": "^4.0.2",
|
|
138
138
|
"@libp2p/logger": "^2.0.2",
|
|
139
|
-
"it-foreach": "^
|
|
140
|
-
"it-stream-types": "^
|
|
139
|
+
"it-foreach": "^2.0.3",
|
|
140
|
+
"it-stream-types": "^2.0.1",
|
|
141
|
+
"prom-client": "^14.1.0"
|
|
141
142
|
},
|
|
142
143
|
"devDependencies": {
|
|
143
|
-
"@libp2p/interface-mocks": "^
|
|
144
|
-
"@libp2p/peer-id-factory": "^
|
|
145
|
-
"@multiformats/multiaddr": "^
|
|
146
|
-
"aegir": "^
|
|
147
|
-
"it-drain": "^
|
|
148
|
-
"it-
|
|
149
|
-
"
|
|
150
|
-
"p-defer": "^4.0.0",
|
|
151
|
-
"prom-client": "^14.1.0",
|
|
152
|
-
"uint8arraylist": "^2.3.3"
|
|
153
|
-
},
|
|
154
|
-
"peerDependencies": {
|
|
155
|
-
"prom-client": "^14.1.0"
|
|
144
|
+
"@libp2p/interface-mocks": "^12.0.1",
|
|
145
|
+
"@libp2p/peer-id-factory": "^2.0.3",
|
|
146
|
+
"@multiformats/multiaddr": "^12.1.3",
|
|
147
|
+
"aegir": "^39.0.6",
|
|
148
|
+
"it-drain": "^3.0.2",
|
|
149
|
+
"it-pipe": "^3.0.1",
|
|
150
|
+
"p-defer": "^4.0.0"
|
|
156
151
|
}
|
|
157
152
|
}
|
package/src/counter-group.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import { normaliseString, CalculatedMetric } from './utils.js'
|
|
1
|
+
import { Counter as PromCounter, type CollectFunction } from 'prom-client'
|
|
2
|
+
import { normaliseString, type CalculatedMetric } from './utils.js'
|
|
4
3
|
import type { PrometheusCalculatedMetricOptions } from './index.js'
|
|
4
|
+
import type { CounterGroup, CalculateMetric } from '@libp2p/interface-metrics'
|
|
5
5
|
|
|
6
6
|
export class PrometheusCounterGroup implements CounterGroup, CalculatedMetric<Record<string, number>> {
|
|
7
7
|
private readonly counter: PromCounter
|
|
@@ -40,7 +40,7 @@ export class PrometheusCounterGroup implements CounterGroup, CalculatedMetric<Re
|
|
|
40
40
|
})
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
addCalculator (calculator: CalculateMetric<Record<string, number>>) {
|
|
43
|
+
addCalculator (calculator: CalculateMetric<Record<string, number>>): void {
|
|
44
44
|
this.calculators.push(calculator)
|
|
45
45
|
}
|
|
46
46
|
|
package/src/counter.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import {
|
|
1
|
+
import { type CollectFunction, Counter as PromCounter } from 'prom-client'
|
|
2
|
+
import { normaliseString, type CalculatedMetric } from './utils.js'
|
|
3
3
|
import type { PrometheusCalculatedMetricOptions } from './index.js'
|
|
4
|
-
import {
|
|
4
|
+
import type { CalculateMetric, Counter } from '@libp2p/interface-metrics'
|
|
5
5
|
|
|
6
6
|
export class PrometheusCounter implements Counter, CalculatedMetric {
|
|
7
7
|
private readonly counter: PromCounter
|
|
@@ -20,7 +20,7 @@ export class PrometheusCounter implements Counter, CalculatedMetric {
|
|
|
20
20
|
const self = this
|
|
21
21
|
|
|
22
22
|
collect = async function () {
|
|
23
|
-
const values = await Promise.all(self.calculators.map(async calculate =>
|
|
23
|
+
const values = await Promise.all(self.calculators.map(async calculate => calculate()))
|
|
24
24
|
const sum = values.reduce((acc, curr) => acc + curr, 0)
|
|
25
25
|
|
|
26
26
|
this.inc(sum)
|
|
@@ -36,7 +36,7 @@ export class PrometheusCounter implements Counter, CalculatedMetric {
|
|
|
36
36
|
})
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
addCalculator (calculator: CalculateMetric) {
|
|
39
|
+
addCalculator (calculator: CalculateMetric): void {
|
|
40
40
|
this.calculators.push(calculator)
|
|
41
41
|
}
|
|
42
42
|
|
package/src/index.ts
CHANGED
|
@@ -1,13 +1,109 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
*
|
|
4
|
+
* Collect libp2p metrics for scraping by Prometheus or Graphana.
|
|
5
|
+
* @module libp2p-prometheus-metrics
|
|
6
|
+
*
|
|
7
|
+
* A tracked metric can be created by calling either `registerMetric` on the metrics object
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
*
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
13
|
+
*
|
|
14
|
+
* const metrics = prometheusMetrics()()
|
|
15
|
+
* const myMetric = metrics.registerMetric({
|
|
16
|
+
* name: 'my_metric',
|
|
17
|
+
* label: 'my_label',
|
|
18
|
+
* help: 'my help text'
|
|
19
|
+
* })
|
|
20
|
+
*
|
|
21
|
+
* myMetric.update(1)
|
|
22
|
+
* ```
|
|
23
|
+
* A metric that is expensive to calculate can be created by passing a `calculate` function that will only be invoked when metrics are being scraped:
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
*
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
29
|
+
*
|
|
30
|
+
* const metrics = prometheusMetrics()()
|
|
31
|
+
* const myMetric = metrics.registerMetric({
|
|
32
|
+
* name: 'my_metric',
|
|
33
|
+
* label: 'my_label',
|
|
34
|
+
* help: 'my help text',
|
|
35
|
+
* calculate: async () => {
|
|
36
|
+
* // do something expensive
|
|
37
|
+
* return 1
|
|
38
|
+
* }
|
|
39
|
+
* })
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* If several metrics should be grouped together (e.g. for graphing purposes) `registerMetricGroup` can be used instead:
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
*
|
|
46
|
+
* ```typescript
|
|
47
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
48
|
+
*
|
|
49
|
+
* const metrics = prometheusMetrics()()
|
|
50
|
+
* const myMetricGroup = metrics.registerMetricGroup({
|
|
51
|
+
* name: 'my_metric_group',
|
|
52
|
+
* label: 'my_label',
|
|
53
|
+
* help: 'my help text'
|
|
54
|
+
* })
|
|
55
|
+
*
|
|
56
|
+
* myMetricGroup.increment({ my_label: 'my_value' })
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* There are specific metric groups for tracking libp2p connections and streams:
|
|
60
|
+
*
|
|
61
|
+
* Track a newly opened multiaddr connection:
|
|
62
|
+
* @example
|
|
63
|
+
*
|
|
64
|
+
* ```typescript
|
|
65
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
66
|
+
* import { createLibp2p } from 'libp2p'
|
|
67
|
+
*
|
|
68
|
+
*
|
|
69
|
+
* const metrics = prometheusMetrics()()
|
|
70
|
+
*
|
|
71
|
+
* const libp2p = await createLibp2p({
|
|
72
|
+
* metrics: metrics,
|
|
73
|
+
* })
|
|
74
|
+
* // set up a multiaddr connection
|
|
75
|
+
* const connection = await libp2p.dial('multiaddr')
|
|
76
|
+
* const connections = metrics.trackMultiaddrConnection(connection)
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* Track a newly opened stream:
|
|
80
|
+
* @example
|
|
81
|
+
*
|
|
82
|
+
* ```typescript
|
|
83
|
+
* import { prometheusMetrics } from '@libp2p/prometheus-metrics'
|
|
84
|
+
* import { createLibp2p } from 'libp2p'
|
|
85
|
+
*
|
|
86
|
+
* const metrics = prometheusMetrics()()
|
|
87
|
+
*
|
|
88
|
+
* const libp2p = await createLibp2p({
|
|
89
|
+
* metrics: metrics,
|
|
90
|
+
* })
|
|
91
|
+
*
|
|
92
|
+
* const stream = await connection.newStream('/my/protocol')
|
|
93
|
+
* const streams = metrics.trackProtocolStream(stream)
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
import { logger } from '@libp2p/logger'
|
|
5
98
|
import each from 'it-foreach'
|
|
6
|
-
import {
|
|
7
|
-
import { PrometheusMetricGroup } from './metric-group.js'
|
|
8
|
-
import { PrometheusCounter } from './counter.js'
|
|
99
|
+
import { collectDefaultMetrics, type DefaultMetricsCollectorConfiguration, register, type Registry } from 'prom-client'
|
|
9
100
|
import { PrometheusCounterGroup } from './counter-group.js'
|
|
10
|
-
import {
|
|
101
|
+
import { PrometheusCounter } from './counter.js'
|
|
102
|
+
import { PrometheusMetricGroup } from './metric-group.js'
|
|
103
|
+
import { PrometheusMetric } from './metric.js'
|
|
104
|
+
import type { MultiaddrConnection, Stream, Connection } from '@libp2p/interface-connection'
|
|
105
|
+
import type { CalculatedMetricOptions, Counter, CounterGroup, Metric, MetricGroup, MetricOptions, Metrics } from '@libp2p/interface-metrics'
|
|
106
|
+
import type { Duplex, Source } from 'it-stream-types'
|
|
11
107
|
|
|
12
108
|
const log = logger('libp2p:prometheus-metrics')
|
|
13
109
|
|
|
@@ -97,7 +193,7 @@ class PrometheusMetrics implements Metrics {
|
|
|
97
193
|
* Increment the transfer stat for the passed key, making sure
|
|
98
194
|
* it exists first
|
|
99
195
|
*/
|
|
100
|
-
_incrementValue (key: string, value: number) {
|
|
196
|
+
_incrementValue (key: string, value: number): void {
|
|
101
197
|
const existing = this.transferStats.get(key) ?? 0
|
|
102
198
|
|
|
103
199
|
this.transferStats.set(key, existing + value)
|
|
@@ -107,7 +203,7 @@ class PrometheusMetrics implements Metrics {
|
|
|
107
203
|
* Override the sink/source of the stream to count the bytes
|
|
108
204
|
* in and out
|
|
109
205
|
*/
|
|
110
|
-
_track (stream: Duplex<any
|
|
206
|
+
_track (stream: Duplex<Source<any>>, name: string): void {
|
|
111
207
|
const self = this
|
|
112
208
|
|
|
113
209
|
const sink = stream.sink
|
package/src/metric-group.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { type CollectFunction, Gauge } from 'prom-client'
|
|
2
|
+
import { normaliseString, type CalculatedMetric } from './utils.js'
|
|
3
3
|
import type { PrometheusCalculatedMetricOptions } from './index.js'
|
|
4
|
-
import {
|
|
4
|
+
import type { CalculateMetric, MetricGroup, StopTimer } from '@libp2p/interface-metrics'
|
|
5
5
|
|
|
6
6
|
export class PrometheusMetricGroup implements MetricGroup, CalculatedMetric<Record<string, number>> {
|
|
7
7
|
private readonly gauge: Gauge
|
|
@@ -40,7 +40,7 @@ export class PrometheusMetricGroup implements MetricGroup, CalculatedMetric<Reco
|
|
|
40
40
|
})
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
addCalculator (calculator: CalculateMetric<Record<string, number>>) {
|
|
43
|
+
addCalculator (calculator: CalculateMetric<Record<string, number>>): void {
|
|
44
44
|
this.calculators.push(calculator)
|
|
45
45
|
}
|
|
46
46
|
|
package/src/metric.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { CollectFunction, Gauge } from 'prom-client'
|
|
3
|
-
import type { PrometheusCalculatedMetricOptions } from './index.js'
|
|
1
|
+
import { type CollectFunction, Gauge } from 'prom-client'
|
|
4
2
|
import { normaliseString } from './utils.js'
|
|
3
|
+
import type { PrometheusCalculatedMetricOptions } from './index.js'
|
|
4
|
+
import type { Metric, StopTimer, CalculateMetric } from '@libp2p/interface-metrics'
|
|
5
5
|
|
|
6
6
|
export class PrometheusMetric implements Metric {
|
|
7
7
|
private readonly gauge: Gauge
|
|
@@ -20,7 +20,7 @@ export class PrometheusMetric implements Metric {
|
|
|
20
20
|
const self = this
|
|
21
21
|
|
|
22
22
|
collect = async function () {
|
|
23
|
-
const values = await Promise.all(self.calculators.map(async calculate =>
|
|
23
|
+
const values = await Promise.all(self.calculators.map(async calculate => calculate()))
|
|
24
24
|
const sum = values.reduce((acc, curr) => acc + curr, 0)
|
|
25
25
|
|
|
26
26
|
this.set(sum)
|
|
@@ -36,7 +36,7 @@ export class PrometheusMetric implements Metric {
|
|
|
36
36
|
})
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
addCalculator (calculator: CalculateMetric) {
|
|
39
|
+
addCalculator (calculator: CalculateMetric): void {
|
|
40
40
|
this.calculators.push(calculator)
|
|
41
41
|
}
|
|
42
42
|
|