-
Notifications
You must be signed in to change notification settings - Fork 15
Open
Description
It's will be appreciable to add ssl support on mongo connection for database using ssl protocol with auth method.
For example on our server we used ssl protocol with auth method to login on database.
This tools is very good but we dont have ssl support for authentification.
For example we apply some change on installed module :
- modified app/mongostat.js
var shelljs = require('shelljs');
var pmx = require('pmx');
var probe = pmx.probe();
var refresh = function() {
var mongostat = "mongostat --noheaders --port " + pmx.getConf().port + " -n 1";
if (pmx.getConf().ip && pmx.getConf().ip !== ''){
mongostat += ' -h ' + pmx.getConf().ip;
}
if (pmx.getConf().username != 0 && pmx.getConf().password != false && pmx.getConf().authDB != false) {
mongostat += ' -u ' + pmx.getConf().username + ' -p "' + pmx.getConf().password + '" --authenticationDatabase ' + pmx.getConf().authDB;
}
// get ssl value
var ssl = pmx.getConf().ssl;
var auth = pmx.getConf().auth;
// here process ssl config if defined
if (ssl !== false) {
// enable ssl
mongostat += ' --ssl ';
// has ca ?
if (ssl.ca) {
// add command
mongostat += ' --sslCAFile ' + ssl.ca;
}
// has key ?
if (ssl.cert) {
// add command
mongostat += ' --sslPEMKeyFile ' + ssl.cert;
}
// check identify ?
if (!ssl.checkServerIdentity) {
// add command
mongostat += ' --sslAllowInvalidHostnames';
}
}
// enable auth mechanism
if (auth.authenticationMechanism !== false && auth.authenticationMechanism !== '') {
// add command
mongostat += ' --authenticationMechanism "' + auth.authenticationMechanism + '"';
}
var top_cpu_process = shelljs.exec(mongostat, { async : true, silent : false }, function(err, out) {
if (err) {
return console.error('Fail: could not retrieve mongostat metrics', err);
}
var str_info = out.replace( /[\s\n\r]+/g,' ');
var data = str_info.split(' ');
insert.set(data[1]);
query.set(data[2]);
update.set(data[3]);
deleted.set(data[4]);
command.set(data[6]);
mapped.set(data[8]);
vsize.set(data[9]);
netIn.set(data[14]);
netOut.set(data[15]);
conn.set(data[16]);
});
};
setInterval(refresh, 5000);
var insert = probe.metric({
name: 'Insert',
value: 'N/A'
});
var query = probe.metric({
name: 'Query',
value: 'N/A'
});
var update = probe.metric({
name: 'Update',
value: 'N/A'
});
var deleted = probe.metric({
name: 'Delete',
value: 'N/A'
});
var netIn = probe.metric({
name: 'netIn',
value: 'N/A'
});
var netOut = probe.metric({
name: 'netOut',
value: 'N/A'
});
var conn = probe.metric({
name: 'Connections',
value: 'N/A'
});
var mapped = probe.metric({
name: 'Mapped',
value: 'N/A'
});
var vsize = probe.metric({
name: 'Vsize',
value: 'N/A'
});
var command = probe.metric({
name: 'Command',
value: 'N/A'
});
refresh();- modified app.js
'use strict';
var pmx = require('pmx');
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var fs = require('fs');
pmx.initModule({
widget : {
pid : pmx.resolvePidPaths(['/var/run/mongodb.pid',
'/var/run/mongodb/mongodb.pid']),
logo : 'http://mongodb.org/static/images/mongodb-logo.png',
theme : ['#262E35', '#222222', '#3ff', '#3ff'],
el : {
probes : true,
actions : true
},
block : {
actions : false,
issues : false,
meta : true,
main_probes : ['Insert', 'Query', 'Update', 'Delete', 'Command', 'netOut', 'netIn']
}
}
}, function(err, conf) {
conf.ssl = {
ca : 'CA_PATH_FILE',
cert : 'CERT_PATH_FILE',
key : 'KEY_PATH_FILE',
sslValidate : true,
checkServerIdentity : false
};
// default auth conf
// maybe add here user password alreday defined on current module ?
conf.auth = {
authenticationMechanism : 'SCRAM-SHA-1'
}
// default value
var url = 'mongodb://' + conf.ip + ':' + conf.port + '/test';
var options = {};
// add ssl property
if (conf.ssl !== false) {
//add ssl flag on url for mongoclient
url += '?ssl=true';
// Build options
options = {
server : {
sslValidate : conf.ssl.sslValidate,
checkServerIdentity : conf.ssl.checkServerIdentity
}
}
// has ca ?
if (conf.ssl.ca) {
options.server.sslCA = [fs.readFileSync(conf.ssl.ca)]
}
// has key ?
if (conf.ssl.key) {
options.server.sslKey = fs.readFileSync(conf.ssl.key);
}
// has cert ?
if (conf.ssl.cert) {
options.server.sslCert = fs.readFileSync(conf.ssl.cert);
}
}
MongoClient.connect(url, options, function(err, db) {
assert.equal(null, err);
console.log("Connected correctly to server.");
db.close();
});
require('./lib/mongostat.js');
});Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels