From b324fcf53b37f97bc5bcbba1b6ac1d4c8dcaaaf9 Mon Sep 17 00:00:00 2001 From: Stuart Taylor Date: Sat, 2 Sep 2017 12:40:06 +0100 Subject: [PATCH] Add pmx for metrics (#30) --- package-lock.json | 81 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + server/index.js | 9 ++++++ 3 files changed, 91 insertions(+) diff --git a/package-lock.json b/package-lock.json index 1f04df2..c7d397b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -167,6 +167,15 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" }, + "async-listener": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.7.tgz", + "integrity": "sha512-6Bmzy9dHE1WWZdru7teS6kecmOy42cCzumQOn57vHa/49kjPMExdPLozDvr25J0hbQf5wMwFitJKnO7O3eqh2A==", + "requires": { + "semver": "5.3.0", + "shimmer": "1.1.0" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -538,6 +547,15 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" }, + "continuation-local-storage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.0.tgz", + "integrity": "sha1-4Z/Da1lwkKXU5KOy6j68XilpSiQ=", + "requires": { + "async-listener": "0.6.7", + "emitter-listener": "1.0.1" + } + }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -797,6 +815,21 @@ "lodash.trimend": "4.5.1" } }, + "emitter-listener": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.0.1.tgz", + "integrity": "sha1-skmepuWCMKUsJo1d8mHuzZ8Q/pc=", + "requires": { + "shimmer": "1.0.0" + }, + "dependencies": { + "shimmer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.0.0.tgz", + "integrity": "sha1-ScLXHGeDYLgCvhiyeDgtHLuAXDk=" + } + } + }, "encodeurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", @@ -1557,6 +1590,11 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz", "integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew=" }, + "is": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", + "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=" + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -1891,6 +1929,11 @@ "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" }, + "lodash.findindex": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.findindex/-/lodash.findindex-4.6.0.tgz", + "integrity": "sha1-oyRd7mH7m24GJLU1ElYku2nBEQY=" + }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", @@ -1911,6 +1954,11 @@ "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, "lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", @@ -2308,6 +2356,16 @@ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", "dev": true }, + "pmx": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pmx/-/pmx-1.2.0.tgz", + "integrity": "sha1-cSqeH96lOpsGEWnMdnaxSDjIdYU=", + "requires": { + "debug": "2.6.7", + "json-stringify-safe": "5.0.1", + "vxx": "1.2.2" + } + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -2774,6 +2832,11 @@ "rechoir": "0.6.2" } }, + "shimmer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", + "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=" + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -3182,6 +3245,24 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, + "vxx": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vxx/-/vxx-1.2.2.tgz", + "integrity": "sha1-dB+1HG8R0zg9pvm5IBil17qAdhE=", + "requires": { + "continuation-local-storage": "3.2.0", + "debug": "2.6.7", + "extend": "3.0.1", + "is": "3.2.1", + "lodash.findindex": "4.6.0", + "lodash.isequal": "4.5.0", + "lodash.merge": "4.6.0", + "methods": "1.1.2", + "semver": "5.3.0", + "shimmer": "1.1.0", + "uuid": "3.1.0" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", diff --git a/package.json b/package.json index 4800fa8..06622f9 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "helmet": "^3.6.1", "morgan": "^1.8.2", "node-svn-ultimate": "^1.0.4", + "pmx": "^1.2.0", "pug": "^2.0.0-rc.2", "request": "^2.81.0", "rss-parser": "^2.9.0", diff --git a/server/index.js b/server/index.js index f02882a..27c02e2 100644 --- a/server/index.js +++ b/server/index.js @@ -4,7 +4,15 @@ const express = require('express'); const bodyParser = require('body-parser'); const helmet = require('helmet'); const Rx = require('rx'); +const pmx = require('pmx'); + const app = express(); +const probe = pmx.probe(); + +const reqPerHour = probe.meter({ + name: 'Requests per hour', + samples: 60 * 60 +}); const { findTheThings, getAllTitleFields } = require('../elastic'); const cors = require('./middleware/cors'); @@ -24,6 +32,7 @@ app.set('views', './views'); app.set('view engine', 'pug'); app.get('/search', cors, (req, res) => { + reqPerHour.mark(); const { q: query } = req.query; Observable.fromPromise(findTheThings(query)) .subscribe(