diff --git a/examples/counterAndGauge.js b/examples/counterAndGauge.js index b3a476a..07903bb 100644 --- a/examples/counterAndGauge.js +++ b/examples/counterAndGauge.js @@ -9,7 +9,7 @@ var counter = client.newCounter({ help: "The number of counter intervals that have elapsed." }); -gauge = client.newGauge({ +var gauge = client.newGauge({ namespace: "counter_test", name: "random_number", help: "A random number we occasionally set." diff --git a/js/base_metric.js b/js/base_metric.js index e16a433..791e710 100644 --- a/js/base_metric.js +++ b/js/base_metric.js @@ -1,9 +1,7 @@ -var BaseMetric, debug, hash, _; +var BaseMetric, debug, hash; debug = require("debug")("prometheus-client:metric"); -_ = require("underscore"); - hash = require("object-hash"); module.exports = BaseMetric = (function() { @@ -22,7 +20,9 @@ module.exports = BaseMetric = (function() { if (!this.help) { throw "Help is required"; } - this._full_name = _.compact([this.namespace, this.subsystem, this.name]).join("_"); + this._full_name = [this.namespace, this.subsystem, this.name].filter(function(s) { + return s; + }).join("_"); } BaseMetric.prototype.type = function() { @@ -64,7 +64,7 @@ module.exports = BaseMetric = (function() { if (/^__/.test(k)) { throw "Label " + k + " must not start with __"; } - if (_(['instance', 'job']).contains(k)) { + if ('instance' === k || 'job' === k) { throw "Label " + k + " is reserved"; } } diff --git a/js/base_metric.js.map b/js/base_metric.js.map index 89fc77b..ca81bc2 100644 --- a/js/base_metric.js.map +++ b/js/base_metric.js.map @@ -6,5 +6,5 @@ "base_metric.coffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/js/client.js b/js/client.js index 50b9463..f39b793 100644 --- a/js/client.js +++ b/js/client.js @@ -1,11 +1,9 @@ -var Client, debug, express, _; +var Client, debug, express; debug = require("debug")("prometheus-client"); express = require("express"); -_ = require("underscore"); - module.exports = Client = (function() { Client._globalRegistry = null; diff --git a/js/client.js.map b/js/client.js.map index cc073e7..7c0d624 100644 --- a/js/client.js.map +++ b/js/client.js.map @@ -6,5 +6,5 @@ "client.coffee" ], "names": [], - "mappings": "AAAA,IAAA,yBAAA;;AAAA,KAAA,GAAQ,OAAA,CAAQ,OAAR,CAAA,CAAiB,mBAAjB,CAAR,CAAA;;AAAA,OACA,GAAU,OAAA,CAAQ,SAAR,CADV,CAAA;;AAAA,CAEA,GAAI,OAAA,CAAQ,YAAR,CAFJ,CAAA;;AAAA,MAIM,CAAC,OAAP,GAAuB;AACnB,EAAA,MAAC,CAAA,eAAD,GAAoB,IAApB,CAAA;;AAAA,EAEA,MAAC,CAAA,KAAD,GAAY,OAAA,CAAQ,SAAR,CAFZ,CAAA;;AAAA,EAGA,MAAC,CAAA,OAAD,GAAY,OAAA,CAAQ,WAAR,CAHZ,CAAA;;AAAA,EAIA,MAAC,CAAA,QAAD,GAAY,OAAA,CAAQ,YAAR,CAJZ,CAAA;;AAMa,EAAA,gBAAC,IAAD,GAAA;AACT,IAAA,IAAC,CAAA,QAAD,mBAAY,IAAI,CAAE,kBAAN,IAAkB,CAAC,MAAM,CAAC,oBAAP,MAAM,CAAC,kBAAoB,GAAA,CAAA,MAAU,CAAC,SAAvC,CAA9B,CADS;EAAA,CANb;;AAAA,mBAWA,QAAA,GAAU,SAAC,MAAD,GAAA;WACN,IAAC,CAAA,QAAQ,CAAC,QAAV,CAAmB,MAAnB,EADM;EAAA,CAXV,CAAA;;AAAA,mBAgBA,WAAA,GAAa,SAAA,GAAA;WACT,IAAC,CAAA,QAAQ,CAAC,YADD;EAAA,CAhBb,CAAA;;AAAA,mBAqBA,UAAA,GAAY,SAAC,IAAD,GAAA;WACR,IAAC,CAAA,QAAD,CAAc,IAAA,MAAM,CAAC,OAAP,CAAe,IAAf,CAAd,EADQ;EAAA,CArBZ,CAAA;;AAAA,mBA0BA,QAAA,GAAU,SAAC,IAAD,GAAA;WACN,IAAC,CAAA,QAAD,CAAc,IAAA,MAAM,CAAC,KAAP,CAAa,IAAb,CAAd,EADM;EAAA,CA1BV,CAAA;;AAAA,mBA+BA,MAAA,GAAQ,SAAC,IAAD,GAAA;AACJ,QAAA,GAAA;AAAA,IAAA,GAAA,GAAM,OAAA,CAAA,CAAN,CAAA;AAAA,IACA,GAAG,CAAC,GAAJ,CAAQ,UAAR,EAAoB,IAAC,CAAA,QAAQ,CAAC,WAA9B,CADA,CAAA;AAAA,IAEA,GAAG,CAAC,MAAJ,CAAW,IAAX,EAAiB,SAAA,GAAA;aACb,KAAA,CAAO,eAAA,GAAe,IAAtB,EADa;IAAA,CAAjB,CAFA,CAAA;AAAA,IAIA,GAAG,CAAC,EAAJ,CAAO,OAAP,EAAgB,SAAC,GAAD,GAAA;aACZ,KAAA,CAAO,uBAAA,GAAuB,GAA9B,EADY;IAAA,CAAhB,CAJA,CAAA;WAOA,IARI;EAAA,CA/BR,CAAA;;gBAAA;;IALJ,CAAA" + "mappings": "AAAA,IAAA,sBAAA;;AAAA,KAAA,GAAQ,OAAA,CAAQ,OAAR,CAAA,CAAiB,mBAAjB,CAAR,CAAA;;AAAA,OACA,GAAU,OAAA,CAAQ,SAAR,CADV,CAAA;;AAAA,MAGM,CAAC,OAAP,GAAuB;AACnB,EAAA,MAAC,CAAA,eAAD,GAAoB,IAApB,CAAA;;AAAA,EAEA,MAAC,CAAA,KAAD,GAAY,OAAA,CAAQ,SAAR,CAFZ,CAAA;;AAAA,EAGA,MAAC,CAAA,OAAD,GAAY,OAAA,CAAQ,WAAR,CAHZ,CAAA;;AAAA,EAIA,MAAC,CAAA,QAAD,GAAY,OAAA,CAAQ,YAAR,CAJZ,CAAA;;AAMa,EAAA,gBAAC,IAAD,GAAA;AACT,IAAA,IAAC,CAAA,QAAD,mBAAY,IAAI,CAAE,kBAAN,IAAkB,CAAC,MAAM,CAAC,oBAAP,MAAM,CAAC,kBAAoB,GAAA,CAAA,MAAU,CAAC,SAAvC,CAA9B,CADS;EAAA,CANb;;AAAA,mBAWA,QAAA,GAAU,SAAC,MAAD,GAAA;WACN,IAAC,CAAA,QAAQ,CAAC,QAAV,CAAmB,MAAnB,EADM;EAAA,CAXV,CAAA;;AAAA,mBAgBA,WAAA,GAAa,SAAA,GAAA;WACT,IAAC,CAAA,QAAQ,CAAC,YADD;EAAA,CAhBb,CAAA;;AAAA,mBAqBA,UAAA,GAAY,SAAC,IAAD,GAAA;WACR,IAAC,CAAA,QAAD,CAAc,IAAA,MAAM,CAAC,OAAP,CAAe,IAAf,CAAd,EADQ;EAAA,CArBZ,CAAA;;AAAA,mBA0BA,QAAA,GAAU,SAAC,IAAD,GAAA;WACN,IAAC,CAAA,QAAD,CAAc,IAAA,MAAM,CAAC,KAAP,CAAa,IAAb,CAAd,EADM;EAAA,CA1BV,CAAA;;AAAA,mBA+BA,MAAA,GAAQ,SAAC,IAAD,GAAA;AACJ,QAAA,GAAA;AAAA,IAAA,GAAA,GAAM,OAAA,CAAA,CAAN,CAAA;AAAA,IACA,GAAG,CAAC,GAAJ,CAAQ,UAAR,EAAoB,IAAC,CAAA,QAAQ,CAAC,WAA9B,CADA,CAAA;AAAA,IAEA,GAAG,CAAC,MAAJ,CAAW,IAAX,EAAiB,SAAA,GAAA;aACb,KAAA,CAAO,eAAA,GAAe,IAAtB,EADa;IAAA,CAAjB,CAFA,CAAA;AAAA,IAIA,GAAG,CAAC,EAAJ,CAAO,OAAP,EAAgB,SAAC,GAAD,GAAA;aACZ,KAAA,CAAO,uBAAA,GAAuB,GAA9B,EADY;IAAA,CAAhB,CAJA,CAAA;WAOA,IARI;EAAA,CA/BR,CAAA;;gBAAA;;IAJJ,CAAA" } \ No newline at end of file diff --git a/package.json b/package.json index 3209346..4240ad0 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "node": ">=0.10.0" }, "dependencies": { - "underscore": "~1.7.0", "debug": "~2.1.2", "express": "~4.12.3", "object-hash": "~0.5.0" diff --git a/src/base_metric.coffee b/src/base_metric.coffee index 75c4f22..27ec0d3 100644 --- a/src/base_metric.coffee +++ b/src/base_metric.coffee @@ -1,5 +1,4 @@ debug = require("debug")("prometheus-client:metric") -_ = require "underscore" hash = require "object-hash" module.exports = class BaseMetric @@ -21,7 +20,7 @@ module.exports = class BaseMetric throw "Name is required" if !@name throw "Help is required" if !@help - @_full_name = _.compact([ @namespace, @subsystem, @name ]).join("_") + @_full_name = [ @namespace, @subsystem, @name ].filter((s)->s).join("_") #---------- @@ -59,7 +58,7 @@ module.exports = class BaseMetric # Validate each label key for k,v of labels throw "Label #{k} must not start with __" if /^__/.test(k) - throw "Label #{k} is reserved" if _(['instance','job']).contains(k) + throw "Label #{k} is reserved" if 'instance'==k || 'job'==k # Validate that the set of keys is correct if @_labelKeys && hash.keys(labels) != @_labelKeys @@ -69,4 +68,4 @@ module.exports = class BaseMetric @_labelKeys = hash.keys(labels) if !@_labelKeys @_labelCache[lh] = labels - lh \ No newline at end of file + lh diff --git a/src/client.coffee b/src/client.coffee index 69b408d..ba0bbfc 100644 --- a/src/client.coffee +++ b/src/client.coffee @@ -1,6 +1,5 @@ debug = require("debug")("prometheus-client") express = require "express" -_ = require "underscore" module.exports = class Client @_globalRegistry: null @@ -46,4 +45,4 @@ module.exports = class Client #---------- - #---------- \ No newline at end of file + #---------- diff --git a/test/common.coffee b/test/common.coffee index 2e8794f..dc59fd6 100644 --- a/test/common.coffee +++ b/test/common.coffee @@ -2,4 +2,4 @@ chai = require "chai" global.expect = chai.expect path = require "path" -global.$src = (module) -> require path.resolve(__dirname,"..","lib",module) \ No newline at end of file +global.$src = (module) -> require path.resolve(__dirname,"..","js",module) diff --git a/test/metrics.coffee b/test/metrics.coffee new file mode 100644 index 0000000..08a9a5d --- /dev/null +++ b/test/metrics.coffee @@ -0,0 +1,71 @@ +Prometheus = $src "client" +Registry = $src "registry" + +describe 'Counter', -> + client = null + counter = null + before -> + client = new Prometheus(registry: new Registry) + + counter = client.newCounter({ + namespace: "counter_test", + name: "elapsed_counters_total", + help: "The number of counter intervals that have elapsed." + }) + + counter.increment(period:"1sec") + counter.increment(period:"2sec") + + it 'should generate some counter metrics', -> + lineCount = 0 + lines=[ + '# HELP counter_test_elapsed_counters_total The number of counter intervals that have elapsed.\n' + + '# TYPE counter_test_elapsed_counters_total counter\n', + 'counter_test_elapsed_counters_total{period="1sec"} 1\n', + 'counter_test_elapsed_counters_total{period="2sec"} 1\n' + ] + mockRes = + writeHead: (statusCode, header) -> + expect(statusCode).to.equal(200) + expect(header).to.deep.equal('content-type': 'text/plain; version=0.0.4') + write: (line) -> + expect(line).to.equal lines[lineCount] + lineCount++ + end: () -> + expect(lineCount).to.equal lines.length + + client.metricsFunc()(null, mockRes) + +describe 'Gauge', -> + client = null + gauge = null + before -> + client = new Prometheus(registry: new Registry) + + gauge = client.newGauge({ + namespace: "gauge_test", + name: "fixed_test_number", + help: "A few test numbers we set." + }); + + gauge.set({ period: "1sec" }, 123); + gauge.set({ period: "1sec" }, 456); + + it 'should generate some gauge metrics', -> + lineCount = 0 + lines=[ + '# HELP gauge_test_fixed_test_number A few test numbers we set.\n' + + '# TYPE gauge_test_fixed_test_number gauge\n', + 'gauge_test_fixed_test_number{period="1sec"} 456\n' + ] + mockRes = + writeHead: (statusCode, header) -> + expect(statusCode).to.equal(200) + expect(header).to.deep.equal('content-type': 'text/plain; version=0.0.4') + write: (line) -> + expect(line).to.equal lines[lineCount] + lineCount++ + end: () -> + expect(lineCount).to.equal lines.length + + client.metricsFunc()(null, mockRes)