diff --git a/package.json b/package.json index 2a1c383..2030b59 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "express-prom-bundle", - "version": "1.2.2", + "version": "1.2.3", "description": "express middleware with popular prometheus metrics in one bundle", "main": "src/index.js", "keywords": [ @@ -16,7 +16,7 @@ "license": "MIT", "dependencies": { "on-finished": "^2.3.0", - "prom-client": "^6.1.2", + "prom-client": "^6.2.0", "url-value-parser": "^1.0.0" }, "devDependencies": { diff --git a/spec/PromFactorySpec.js b/spec/PromFactorySpec.js index b6d7531..91f9490 100644 --- a/spec/PromFactorySpec.js +++ b/spec/PromFactorySpec.js @@ -49,5 +49,17 @@ describe("PromFactory", () => { expect(metric.help).toBe("help for test4"); expect(metric.percentiles).toEqual([0.1, 0.5]); }); - + it("when regsitered with same name, just return old instance", () => { + const metric1 = factory.newSummary( + "test4", + "help for test4", + {percentiles: [0.1, 0.5]} + ); + const metric2 = factory.newSummary( + "test4", + "help for test4", + {percentiles: [0.1, 0.5]} + ); + expect(metric1).toBe(metric2); + }); }); diff --git a/src/PromFactory.js b/src/PromFactory.js index 44f6647..1d06508 100644 --- a/src/PromFactory.js +++ b/src/PromFactory.js @@ -15,6 +15,12 @@ module.exports = class { const applyParams = Array.prototype.slice.call(args); const name = applyParams[0]; const realName = this.makeRealName(name); + + const existing = this.promClient.register.getSingleMetric(realName); + if (existing) { + return existing; + } + applyParams[0] = realName; applyParams.unshift(null); // add some dummy context for apply