diff --git a/package.json b/package.json index 616627fea6..7c248903c3 100644 --- a/package.json +++ b/package.json @@ -128,9 +128,8 @@ "lodash.get": "^4.4.2", "lodash.sortby": "^4.7.0", "lodash.values": "^4.3.0", - "mime-types": "^2.1.13", - "mafmt": "^2.1.8", "mime-types": "^2.1.16", + "mafmt": "^2.1.8", "mkdirp": "~0.5.1", "multiaddr": "^2.3.0", "multihashes": "~0.4.9", diff --git a/src/http/api/routes/debug.js b/src/http/api/routes/debug.js new file mode 100644 index 0000000000..d5ae1e434d --- /dev/null +++ b/src/http/api/routes/debug.js @@ -0,0 +1,31 @@ +'use strict' + +const register = require('prom-client').register +const client = require('prom-client') + +// Endpoint for handling debug metrics +module.exports = (server) => { + const api = server.select('API') + // Clear the register to make sure we're not registering multiple ones + register.clear() + const gauge = new client.Gauge({ name: 'number_of_peers', help: 'the_number_of_currently_connected_peers' }) + + api.route({ + method: 'GET', + path: '/debug/metrics/prometheus', + handler: (request, reply) => { + if (!process.env.IPFS_MONITORING) { + return reply('Monitoring is disabled. Enable it by setting environment variable IPFS_MONITORING') + .code(501) // 501 = Not Implemented + } + server.app.ipfs.swarm.peers((err, res) => { + if (err) { + return reply(err).code(500) + } + const count = res.length + gauge.set(count) + reply(register.metrics()).header('Content-Type', register.contentType) + }) + } + }) +}