diff --git a/README.md b/README.md index 7f5668f..e19546a 100644 --- a/README.md +++ b/README.md @@ -23,11 +23,8 @@ $ pm2 install pm2-mongodb **NODE** : User should have access to `admin` database to query statistics (see [mongo doc](http://mongodb.github.io/node-mongodb-native/2.2/api/Admin.html)) -* `ip` (Defaults to `127.0.0.1`) IP of mongodb server -* `port` (Defaults to `27017`) Port of mongodb server -* `username` (Defaults to `none`) used for authentication -* `password` (Defaults to `none`) used for authentication -* `authDB` (Defaults to `none`) used for authentication +* `MONGODB_URI` (Defaults to `mongodb://localhost:27017/`) +* `DB_NAME` (Defaults to `none`) used for authentication * `refresh_rate` (Defaults to `5000` in ms): Control the refresh rate of the worker #### How to set these values ? diff --git a/lib/stats/client.js b/lib/stats/client.js index c3bb202..dd9e2b2 100644 --- a/lib/stats/client.js +++ b/lib/stats/client.js @@ -1,60 +1,54 @@ var MongoClient = require('mongodb').MongoClient; var client; +var conf; -module.exports.refresh = function refresh(metrics, refresh_rate) { - client.serverStatus().then(function (data) { - metrics.mapped.set(data.mem.mapped); - metrics.vsize.set(data.mem.virtual); - metrics.conn.set(data.connections.current); - - if (typeof lastInsert != 'undefined') { - metrics.insert.set(Math.round((data.opcounters.insert - lastInsert) * 1000 / refresh_rate)); - metrics.query.set(Math.round((data.opcounters.query - lastQuery) * 1000 / refresh_rate)); - metrics.update.set(Math.round((data.opcounters.update - lastUpdate) * 1000 / refresh_rate)); - metrics.deleted.set(Math.round((data.opcounters.delete - lastDelete) * 1000 / refresh_rate)); - metrics.command.set(Math.round((data.opcounters.command - lastCommand) * 1000 / refresh_rate)); - metrics.netIn.set(Math.round((data.network.bytesIn - lastBytesIn) * 1000 / refresh_rate)); - metrics.netOut.set(Math.round((data.network.bytesOut - lastBytesOut) * 1000 / refresh_rate)); - } - lastInsert = data.opcounters.insert; - lastQuery = data.opcounters.query; - lastUpdate = data.opcounters.update; - lastDelete = data.opcounters.delete; - lastCommand = data.opcounters.command; - lastBytesIn = data.network.bytesIn; - lastBytesOut = data.network.bytesOut; - if (data.repl) { - metrics.replName.set(data.repl.setName); - if (data.repl.ismaster) - metrics.replStatus.set("PRIMARY"); - else if (data.repl.secondary) - metrics.replStatus.set("SECONDARY"); - else - metrics.replStatus.set("UNKNOWN"); - } +module.exports.refresh = function refresh(metrics, refresh_rate) { + MongoClient.connect((process.env.MONGODB_URI || conf.MONGODB_URI) || 'mongodb://localhost:27017/', { + useNewUrlParser: true + }, (err, cl) => { + // Client returned + var db = cl.db(process.env.DB_NAME || conf.DB_NAME); + client = db.admin() + client.serverStatus().then(function (data) { + metrics.mapped.set(data.mem.mapped); + metrics.vsize.set(data.mem.virtual); + metrics.conn.set(data.connections.current); + if (typeof lastInsert != 'undefined') { + metrics.insert.set(Math.round((data.opcounters.insert - lastInsert) * 1000 / refresh_rate)); + metrics.query.set(Math.round((data.opcounters.query - lastQuery) * 1000 / refresh_rate)); + metrics.update.set(Math.round((data.opcounters.update - lastUpdate) * 1000 / refresh_rate)); + metrics.deleted.set(Math.round((data.opcounters.delete - lastDelete) * 1000 / refresh_rate)); + metrics.command.set(Math.round((data.opcounters.command - lastCommand) * 1000 / refresh_rate)); + metrics.netIn.set(Math.round((data.network.bytesIn - lastBytesIn) * 1000 / refresh_rate)); + metrics.netOut.set(Math.round((data.network.bytesOut - lastBytesOut) * 1000 / refresh_rate)); + } + lastInsert = data.opcounters.insert; + lastQuery = data.opcounters.query; + lastUpdate = data.opcounters.update; + lastDelete = data.opcounters.delete; + lastCommand = data.opcounters.command; + lastBytesIn = data.network.bytesIn; + lastBytesOut = data.network.bytesOut; + + if (data.repl) { + metrics.replName.set(data.repl.setName); + if (data.repl.ismaster) + metrics.replStatus.set("PRIMARY"); + else if (data.repl.secondary) + metrics.replStatus.set("SECONDARY"); + else + metrics.replStatus.set("UNKNOWN"); + } + cl.close() + }).catch(function (err) { + throw err + }); }); }; -module.exports.init = function init(conf, done) { - var dbName = process.env.MONGODB_DBNAME || conf.authDB; - var host = process.env.MONGODB_HOST || conf.ip; - var port = process.env.MONGODB_PORT || conf.port; - var username = process.env.MONGODB_USERNAME || conf.username; - var password = process.env.MONGODB_PASSWORD || conf.password; - var login = ''; - - if (username && password) { - login = username + ':' + password + '@'; - } - var url = 'mongodb://' + login + host + ':' + port + '/' + dbName; - - MongoClient.connect(url).then(function (db) { - client = db.admin(); - done(); - }).catch(function (err) { - done(err); - }); - -}; +module.exports.init = function init(config, done) { + conf = config + done() +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..73a4b1c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,218 @@ +{ + "name": "pm2-mongodb", + "version": "1.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "async-listener": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.9.tgz", + "integrity": "sha512-E7Z2/QMs0EPt/o9wpYO/J3hmMCDdr1aVDS3ttlur5D5JlZtxhfuOwi4e7S8zbYIxA5qOOYdxfqGj97XAfdNvkQ==", + "requires": { + "semver": "5.6.0", + "shimmer": "1.2.0" + } + }, + "bson": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz", + "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" + }, + "continuation-local-storage": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", + "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", + "requires": { + "async-listener": "0.6.9", + "emitter-listener": "1.1.2" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "2.1.1" + } + }, + "deep-metrics": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deep-metrics/-/deep-metrics-0.0.1.tgz", + "integrity": "sha512-732WmZgCWxOkf4QBvrCjPPuT6wTEzaGye/4JqYsU/sO0J53UNX4PBwK0JV262BZ5cxgLmKhU+NlrtKdPDgybkg==", + "requires": { + "semver": "5.6.0" + } + }, + "emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", + "requires": { + "shimmer": "1.2.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "is": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", + "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "lodash.findindex": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.findindex/-/lodash.findindex-4.6.0.tgz", + "integrity": "sha1-oyRd7mH7m24GJLU1ElYku2nBEQY=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" + }, + "memory-pager": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.1.0.tgz", + "integrity": "sha512-Mf9OHV/Y7h6YWDxTzX/b4ZZ4oh9NSXblQL8dtPCOomOtZciEHxePR78+uHFLLlsk01A6jVHhHsQZZ/WcIPpnzg==", + "optional": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mongodb": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.8.tgz", + "integrity": "sha512-yNKwYxQ6m00NV6+pMoWoheFTHSQVv1KkSrfOhRDYMILGWDYtUtQRqHrFqU75rmPIY8hMozVft8zdC4KYMWaM3Q==", + "requires": { + "mongodb-core": "3.1.7", + "safe-buffer": "5.1.2" + } + }, + "mongodb-core": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.7.tgz", + "integrity": "sha512-YffpSrLmgFNmrvkGx+yX00KyBNk64C0BalfEn6vHHkXtcMUGXw8nxrMmhq5eXPLLlYeBpD/CsgNxE2Chf0o4zQ==", + "requires": { + "bson": "1.1.0", + "require_optional": "1.0.1", + "safe-buffer": "5.1.2", + "saslprep": "1.0.2" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "pmx": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/pmx/-/pmx-1.6.7.tgz", + "integrity": "sha512-CoyZD1EWj/fvpuEPnndB11s5onzN5p/0bxGsBuwbyb8uFtg3lMxXys1pXs88gReiRnMSYCSt25J3GCc6AnxoFQ==", + "requires": { + "debug": "3.2.6", + "deep-metrics": "0.0.1", + "json-stringify-safe": "5.0.1", + "semver": "5.6.0", + "vxx": "1.2.2" + } + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "2.0.0", + "semver": "5.6.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "saslprep": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz", + "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==", + "optional": true, + "requires": { + "sparse-bitfield": "3.0.3" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + }, + "shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-xTCx2vohXC2EWWDqY/zb4+5Mu28D+HYNSOuFzsyRDRvI/e1ICb69afwaUwfjr+25ZXldbOLyp+iDUZHq8UnTag==" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "1.1.0" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "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.1", + "debug": "2.6.9", + "extend": "3.0.2", + "is": "3.2.1", + "lodash.findindex": "4.6.0", + "lodash.isequal": "4.5.0", + "lodash.merge": "4.6.1", + "methods": "1.1.2", + "semver": "5.6.0", + "shimmer": "1.2.0", + "uuid": "3.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + } + } +} diff --git a/package.json b/package.json index 5fd9cf3..c1de766 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "PM2 MongoDB Module", "main": "app.js", "dependencies": { - "pmx": "latest", - "mongodb": "latest" + "pmx": "^1.6.7", + "mongodb": "^3.1.8" }, "repository": { "type": "git", @@ -19,13 +19,11 @@ "authDB": "", "refresh_rate": 5000 }, - "apps": [ - { - "merge_logs": true, - "max_memory_restart": "200M", - "script": "app.js" - } - ], + "apps": [{ + "merge_logs": true, + "max_memory_restart": "200M", + "script": "app.js" + }], "author": "Keymetrics Inc.", "license": "MIT" -} +} \ No newline at end of file