@zenvark/prom 1.1.1 → 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/get-or-create-metric.d.ts +2 -1
- package/dist/get-or-create-metric.js +8 -1
- package/dist/get-or-create-metric.js.map +1 -1
- package/dist/prometheus-breaker-metrics.d.ts +11 -1
- package/dist/prometheus-breaker-metrics.js +26 -1
- package/dist/prometheus-breaker-metrics.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { Counter, type CounterConfiguration, Histogram, type HistogramConfiguration, type Registry } from 'prom-client';
|
|
1
|
+
import { Counter, type CounterConfiguration, Gauge, type GaugeConfiguration, Histogram, type HistogramConfiguration, type Registry } from 'prom-client';
|
|
2
2
|
export declare const getOrCreateCounter: <TLabels extends string>(register: Registry, config: CounterConfiguration<TLabels>) => Counter<TLabels>;
|
|
3
3
|
export declare const getOrCreateHistogram: <TLabels extends string>(register: Registry, config: HistogramConfiguration<TLabels>) => Histogram<TLabels>;
|
|
4
|
+
export declare const getOrCreateGauge: <TLabels extends string>(register: Registry, config: GaugeConfiguration<TLabels>) => Gauge<TLabels>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Counter, Histogram, } from 'prom-client';
|
|
1
|
+
import { Counter, Gauge, Histogram, } from 'prom-client';
|
|
2
2
|
const getTypeParam = (obj) => {
|
|
3
3
|
if (typeof obj === 'object' &&
|
|
4
4
|
obj !== null &&
|
|
@@ -21,4 +21,11 @@ export const getOrCreateHistogram = (register, config) => {
|
|
|
21
21
|
const existingMetric = register.getSingleMetric(config.name);
|
|
22
22
|
return isHistogram(existingMetric) ? existingMetric : new Histogram(config);
|
|
23
23
|
};
|
|
24
|
+
const isGauge = (metric) => {
|
|
25
|
+
return metric instanceof Gauge || getTypeParam(metric) === 'gauge';
|
|
26
|
+
};
|
|
27
|
+
export const getOrCreateGauge = (register, config) => {
|
|
28
|
+
const existingMetric = register.getSingleMetric(config.name);
|
|
29
|
+
return isGauge(existingMetric) ? existingMetric : new Gauge(config);
|
|
30
|
+
};
|
|
24
31
|
//# sourceMappingURL=get-or-create-metric.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-or-create-metric.js","sourceRoot":"","sources":["../src/get-or-create-metric.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,SAAS,GAGV,MAAM,aAAa,CAAC;AAErB,MAAM,YAAY,GAAG,CAAC,GAAY,EAAsB,EAAE;IACxD,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACb,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAC5B,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAAe,EAAqB,EAAE;IACvD,OAAO,MAAM,YAAY,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAkB,EAClB,MAAqC,EACnB,EAAE;IACpB,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7D,OAAO,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,MAAe,EAAuB,EAAE;IAC3D,OAAO,MAAM,YAAY,SAAS,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,QAAkB,EAClB,MAAuC,EACnB,EAAE;IACtB,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7D,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAC9E,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"get-or-create-metric.js","sourceRoot":"","sources":["../src/get-or-create-metric.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,KAAK,EAEL,SAAS,GAGV,MAAM,aAAa,CAAC;AAErB,MAAM,YAAY,GAAG,CAAC,GAAY,EAAsB,EAAE;IACxD,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACb,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAC5B,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAAe,EAAqB,EAAE;IACvD,OAAO,MAAM,YAAY,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAkB,EAClB,MAAqC,EACnB,EAAE;IACpB,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7D,OAAO,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,MAAe,EAAuB,EAAE;IAC3D,OAAO,MAAM,YAAY,SAAS,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,QAAkB,EAClB,MAAuC,EACnB,EAAE;IACtB,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7D,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,MAAe,EAAmB,EAAE;IACnD,OAAO,MAAM,YAAY,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,QAAkB,EAClB,MAAmC,EACnB,EAAE;IAClB,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7D,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AACtE,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Registry } from 'prom-client';
|
|
2
|
-
import type { BreakerMetricsRecorder, RecordBlockedRequestParams, RecordCallParams, RecordHealthCheckParams } from 'zenvark';
|
|
2
|
+
import type { BreakerMetricsRecorder, RecordBlockedRequestParams, RecordCallParams, RecordHealthCheckParams, RecordStateChangeParams } from 'zenvark';
|
|
3
3
|
export type PrometheusBreakerMetricsOptions = {
|
|
4
4
|
/**
|
|
5
5
|
* Prometheus registry instance
|
|
@@ -19,6 +19,7 @@ export declare class PrometheusBreakerMetrics implements BreakerMetricsRecorder
|
|
|
19
19
|
private readonly callDurationHistogram;
|
|
20
20
|
private readonly blockedRequestsCounter;
|
|
21
21
|
private readonly healthcheckDurationHistogram;
|
|
22
|
+
private readonly stateGauge;
|
|
22
23
|
constructor(options: PrometheusBreakerMetricsOptions);
|
|
23
24
|
/**
|
|
24
25
|
* Initialize metrics for a circuit breaker.
|
|
@@ -38,4 +39,13 @@ export declare class PrometheusBreakerMetrics implements BreakerMetricsRecorder
|
|
|
38
39
|
* Record healthcheck attempt
|
|
39
40
|
*/
|
|
40
41
|
recordHealthCheck(params: RecordHealthCheckParams): void;
|
|
42
|
+
/**
|
|
43
|
+
* Record a circuit state change. Sets the active state label to 1 and all others to 0.
|
|
44
|
+
*/
|
|
45
|
+
recordStateChange(params: RecordStateChangeParams): void;
|
|
46
|
+
/**
|
|
47
|
+
* Remove all state gauge series for a breaker. Called when this node loses leadership
|
|
48
|
+
* so the ex-leader's stale values disappear from scrapes.
|
|
49
|
+
*/
|
|
50
|
+
clearState(breakerId: string): void;
|
|
41
51
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CircuitState } from 'zenvark';
|
|
2
|
+
import { getOrCreateCounter, getOrCreateGauge, getOrCreateHistogram, } from "./get-or-create-metric.js";
|
|
2
3
|
export class PrometheusBreakerMetrics {
|
|
3
4
|
customLabels;
|
|
4
5
|
callDurationHistogram;
|
|
5
6
|
blockedRequestsCounter;
|
|
6
7
|
healthcheckDurationHistogram;
|
|
8
|
+
stateGauge;
|
|
7
9
|
constructor(options) {
|
|
8
10
|
const prefix = options.prefix ?? 'zenvark';
|
|
9
11
|
this.customLabels = options.customLabels ?? {};
|
|
@@ -28,6 +30,12 @@ export class PrometheusBreakerMetrics {
|
|
|
28
30
|
buckets: [0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10],
|
|
29
31
|
registers: [options.registry],
|
|
30
32
|
});
|
|
33
|
+
this.stateGauge = getOrCreateGauge(options.registry, {
|
|
34
|
+
name: `${prefix}_state`,
|
|
35
|
+
help: 'Current state of the circuit breaker. The active state label has value 1, all others 0.',
|
|
36
|
+
labelNames: ['breaker_id', 'state', ...customLabelNames],
|
|
37
|
+
registers: [options.registry],
|
|
38
|
+
});
|
|
31
39
|
}
|
|
32
40
|
/**
|
|
33
41
|
* Initialize metrics for a circuit breaker.
|
|
@@ -70,5 +78,22 @@ export class PrometheusBreakerMetrics {
|
|
|
70
78
|
});
|
|
71
79
|
this.healthcheckDurationHistogram.observe(labels, params.durationMs / 1000);
|
|
72
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Record a circuit state change. Sets the active state label to 1 and all others to 0.
|
|
83
|
+
*/
|
|
84
|
+
recordStateChange(params) {
|
|
85
|
+
for (const state of Object.values(CircuitState)) {
|
|
86
|
+
this.stateGauge.set(this.getLabels(params.breakerId, { state }), params.state === state ? 1 : 0);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Remove all state gauge series for a breaker. Called when this node loses leadership
|
|
91
|
+
* so the ex-leader's stale values disappear from scrapes.
|
|
92
|
+
*/
|
|
93
|
+
clearState(breakerId) {
|
|
94
|
+
for (const state of Object.values(CircuitState)) {
|
|
95
|
+
this.stateGauge.remove(this.getLabels(breakerId, { state }));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
73
98
|
}
|
|
74
99
|
//# sourceMappingURL=prometheus-breaker-metrics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prometheus-breaker-metrics.js","sourceRoot":"","sources":["../src/prometheus-breaker-metrics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prometheus-breaker-metrics.js","sourceRoot":"","sources":["../src/prometheus-breaker-metrics.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zenvark/prom",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Prometheus metrics for Zenvark Circuit Breaker",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"zenvark",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"rimraf": "^6.0.1",
|
|
55
55
|
"typescript": "5.9.3",
|
|
56
56
|
"vitest": "^4.0.15",
|
|
57
|
-
"zenvark": "^1.
|
|
57
|
+
"zenvark": "^1.2.0"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"prom-client": "^15.0.0",
|