jchaos
Version:
module to access chaos resources
313 lines (238 loc) • 8.24 kB
JavaScript
const { MongoClient } = require('mongodb');
const fs = require('fs');
;
function checker(value, vect) {
for (var i = 0; i < vect.length; i++) {
if (value == vect[i]) {
return true;
}
}
return false;
}
var server="localhost:27017";
function Usage() {
var pjson = require('../package.json');
console.log("Version:" + pjson.version);
console.log("Usage:\n" + process.argv[1] + "\n[ --server server[:port] ("+server+")]\n" +
"[--count_nodes] retrieves number of chaos nodes\n" +
"[--dump <collection name>] dump collection\n" +
"[--dumpall] dump all collections\n" +
"[--remove_node <node name>] remove node name\n" +
"[--clean_logs <all|log|error|alarm|tag|..>] logs\n" +
"[--clean_daq] remove all daq\n" +
"[--list_node] list chaos nodes\n" +
"[--list_collections] list all collections\n" +
"[--help]\n"
);
}
const args = require('minimist')(process.argv.slice(2))
if (args.hasOwnProperty("help")) {
Usage();
process.exit(0);
}
var cnode = {
uid: "",
desc: {}
};
if ((typeof args['server'] !== "undefined")&&typeof args['server'] === "string") {
server=args['server'];
}
console.log("* using mongo:"+server);
if (args.count_nodes !== undefined) {
const uri = "mongodb://" + server;
const client = new MongoClient(uri,{ useUnifiedTopology: true });
client.connect((err, cli) => {
if (err) {
console.error("Error connecting:" + err.message);
process.exit(-1);
} else {
cli.db("chaos").collection("mds_nodes").countDocuments((err, num) => {
if (err) {
console.error("Error getting mds_nodes:" + err.message);
process.exit(-1);
} else {
console.log(num);
process.exit(0);
}
});
}
});
return 0;
}
if (args['list_collections'] !== undefined) {
const uri = "mongodb://" + server;
const client = new MongoClient(uri,{ useUnifiedTopology: true });
client.connect((err, cli) => {
if (err) {
console.error("Error connecting:" + err.message);
process.exit(-1);
} else {
cli.db("chaos").listCollections().toArray((err, doc) => {
if (err) {
console.error("Error getting "+args['dump']+" :" + err.message);
process.exit(-1);
} else {
console.log(JSON.stringify(doc));
var names=[];
doc.forEach(ele=>{
names.push(ele.name);
});
console.log(JSON.stringify(names));
process.exit(0);
}
});
}
});
return 0;
}
if (args['list_node'] !== undefined) {
const uri = "mongodb://" + server;
const client = new MongoClient(uri,{ useUnifiedTopology: true });
client.connect((err, cli) => {
if (err) {
console.error("Error connecting:" + err.message);
process.exit(-1);
} else {
cli.db("chaos").collection('mds_nodes').find({}, { projection: { ndk_uid: 1} }).toArray((err, doc) => {
if (err) {
console.error("Error getting "+args['dump']+" :" + err.message);
process.exit(-1);
} else {
console.log(JSON.stringify(doc));
process.exit(0);
}
});
}
});
return 0;
}
if ((args['clean_logs'] !== undefined)&&(typeof args['clean_logs'] === "string")) {
const uri = "mongodb://" + server;
const client = new MongoClient(uri,{ useUnifiedTopology: true });
client.connect((err, cli) => {
if (err) {
console.error("Error connecting:" + err.message);
process.exit(-1);
} else {
var filter={"mdsndk_nl_ld":"alarm"};
if(args['clean_logs']=="all"){
filter={};
} else {
filter={"mdsndk_nl_ld":args['clean_logs']};
}
console.log("Cleaning logs of type :" + args['clean_logs']);
cli.db("chaos").collection('mds_logging').deleteMany(filter, (err, doc) => {
if (err) {
console.error("Error deleting logs :" + err.message);
process.exit(-1);
} else {
console.log(JSON.stringify(doc));
process.exit(0);
}
});
}
});
return 0;
}
if (args['clean_daq'] !== undefined) {
const uri = "mongodb://" + server;
const client = new MongoClient(uri,{ useUnifiedTopology: true });
client.connect((err, cli) => {
if (err) {
console.error("Error connecting:" + err.message);
process.exit(-1);
} else {
cli.db("chaos").collection('daq').deleteMany({}, (err, doc) => {
if (err) {
console.error("Error deleting logs :" + err.message);
process.exit(-1);
} else {
console.log(JSON.stringify(doc));
process.exit(0);
}
});
}
});
return 0;
}
if (typeof args['remove_node'] === "string") {
const uri = "mongodb://" + server;
const client = new MongoClient(uri,{ useUnifiedTopology: true });
client.connect((err, cli) => {
if (err) {
console.error("Error connecting:" + err.message);
process.exit(-1);
} else {
cli.db("chaos").collection('mds_nodes').deleteOne({'ndk_uid':args['remove_node']},(err, doc) => {
if (err) {
console.error("Error removing "+args['remove_node']+" :" + err.message);
process.exit(-1);
} else {
console.log("removed:"+args['remove_node']);
process.exit(0);
}
});
}
});
return 0;
}
if (typeof args['dump'] === "string") {
const uri = "mongodb://" + server;
const client = new MongoClient(uri,{ useUnifiedTopology: true });
client.connect((err, cli) => {
if (err) {
console.error("Error connecting:" + err.message);
process.exit(-1);
} else {
cli.db("chaos").collection(args['dump']).find().toArray((err, doc) => {
if (err) {
console.error("Error getting "+args['dump']+" :" + err.message);
process.exit(-1);
} else {
console.log(JSON.stringify(doc));
process.exit(0);
}
});
}
});
return 0;
}
if (args['dumpall'] !== undefined) {
const uri = "mongodb://" + server;
const client = new MongoClient(uri,{ useUnifiedTopology: true });
client.connect((err, cli) => {
if (err) {
console.error("Error connecting:" + err.message);
process.exit(-1);
} else {
cli.db("chaos").listCollections().toArray((err, doc) => {
if (err) {
console.error("Error getting "+args['dump']+" :" + err.message);
process.exit(-1);
} else {
doc.forEach(ele=>{
cli.db("chaos").collection(ele.name).find().toArray((err, d) => {
if (err) {
console.error("Error getting "+ele.name+" :" + err.message);
process.exit(-1);
} else {
console.log("dumping collection:"+ele.name+ " on:"+ele.name+".json");
fs.writeFile(ele.name+".json", JSON.stringify(d), function (err) {
if (err) throw err;
console.log("Generating "+ele.name+".json");
});
//console.log(JSON.stringify(doc));
}
});
});
process.exit(0);
}
});
}
});
return 0;
}
console.error("Uknown option:")
Usage();
process.exit(-1);