Skip to content

Commit ab207ef

Browse files
committed
bug: support array argument to labels() again
This was undocumented and untested, and broke in 13.1.0. Fixes #499
1 parent 0f872ff commit ab207ef

File tree

5 files changed

+64
-1
lines changed

5 files changed

+64
-1
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ project adheres to [Semantic Versioning](http://semver.org/).
1717
avoid failures from the server when using `Content-Encoding: gzip` header.
1818
- Refactor `escapeString` helper in `lib/registry.js` to improve performance and
1919
avoid an unnecessarily complex regex.
20+
- Support array argument to `metric.labels()`. This was supported prior to
21+
version 13.1 (undocumented). [#553](https://github.com/siimon/prom-client/pull/553)
2022

2123
### Added
2224

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,8 @@ gauge.set({ method: 'GET', statusCode: '200' }, 100);
315315
gauge.labels({ method: 'GET', statusCode: '200' }).set(100);
316316
// 3rd version: And again the same effect as above
317317
gauge.labels('GET', '200').set(100);
318+
// 4th version: And again the same effect as above
319+
gauge.labels(['GET', '200']).set(100);
318320
```
319321

320322
It is also possible to use timers with labels, both before and after the timer

index.d.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,13 @@ export class Counter<T extends string = string> {
258258
*/
259259
get(): Promise<MetricObjectWithValues<MetricValue<T>>>;
260260

261+
/**
262+
* Return the child for given labels
263+
* @param values Label values
264+
* @return Configured counter with given labels
265+
*/
266+
labels(values: string[]): Counter.Internal;
267+
261268
/**
262269
* Return the child for given labels
263270
* @param values Label values
@@ -277,6 +284,12 @@ export class Counter<T extends string = string> {
277284
*/
278285
reset(): void;
279286

287+
/**
288+
* Remove metrics for the given label values
289+
* @param values Label values
290+
*/
291+
remove(values: string[]): void;
292+
280293
/**
281294
* Remove metrics for the given label values
282295
* @param values Label values
@@ -373,6 +386,13 @@ export class Gauge<T extends string = string> {
373386
*/
374387
startTimer(labels?: LabelValues<T>): (labels?: LabelValues<T>) => number;
375388

389+
/**
390+
* Return the child for given labels
391+
* @param values Label values
392+
* @return Configured gauge with given labels
393+
*/
394+
labels(values: string[]): Gauge.Internal<T>;
395+
376396
/**
377397
* Return the child for given labels
378398
* @param values Label values
@@ -392,6 +412,12 @@ export class Gauge<T extends string = string> {
392412
*/
393413
reset(): void;
394414

415+
/**
416+
* Remove metrics for the given label values
417+
* @param values Label values
418+
*/
419+
remove(values: string[]): void;
420+
395421
/**
396422
* Remove metrics for the given label values
397423
* @param values Label values
@@ -497,6 +523,13 @@ export class Histogram<T extends string = string> {
497523
*/
498524
zero(labels: LabelValues<T>): void;
499525

526+
/**
527+
* Return the child for given labels
528+
* @param values Label values
529+
* @return Configured histogram with given labels
530+
*/
531+
labels(values: string[]): Histogram.Internal<T>;
532+
500533
/**
501534
* Return the child for given labels
502535
* @param values Label values
@@ -511,6 +544,12 @@ export class Histogram<T extends string = string> {
511544
*/
512545
labels(labels: LabelValues<T>): Histogram.Internal<T>;
513546

547+
/**
548+
* Remove metrics for the given label values
549+
* @param values Label values
550+
*/
551+
remove(values: string[]): void;
552+
514553
/**
515554
* Remove metrics for the given label values
516555
* @param values Label values
@@ -598,6 +637,13 @@ export class Summary<T extends string = string> {
598637
*/
599638
reset(): void;
600639

640+
/**
641+
* Return the child for given labels
642+
* @param values Label values
643+
* @return Configured summary with given labels
644+
*/
645+
labels(values: string[]): Summary.Internal<T>;
646+
601647
/**
602648
* Return the child for given labels
603649
* @param values Label values
@@ -612,6 +658,12 @@ export class Summary<T extends string = string> {
612658
*/
613659
labels(labels: LabelValues<T>): Summary.Internal<T>;
614660

661+
/**
662+
* Remove metrics for the given label values
663+
* @param values Label values
664+
*/
665+
remove(values: string[]): void;
666+
615667
/**
616668
* Remove metrics for the given label values
617669
* @param values Label values

lib/util.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ exports.setValueDelta = function setValueDelta(
4444
};
4545

4646
exports.getLabels = function (labelNames, args) {
47-
if (typeof args[0] === 'object') {
47+
if (typeof args[0] === 'object' && !Array.isArray(args[0])) {
4848
return args[0];
4949
}
5050

test/gaugeTest.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,13 @@ describe.each([
162162
it('should handle labels provided as an object', async () => {
163163
instance.labels({ code: '200' }).inc();
164164

165+
const values = (await instance.get()).values;
166+
expect(values).toHaveLength(1);
167+
expect(values[0].labels).toEqual({ code: '200' });
168+
});
169+
it('should handle labels provided as an array', async () => {
170+
instance.labels([200]).inc();
171+
165172
const values = (await instance.get()).values;
166173
expect(values).toHaveLength(1);
167174
expect(values[0].labels).toEqual({ code: '200' });

0 commit comments

Comments
 (0)