#!/usr/bin/env node /* -*- Mode:Js */ /* vim: set expandtab ts=4 sw=4: */ /* * You may redistribute this program and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation, * either version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ var Cjdns = require('../contrib/nodejs/cjdnsadmin/cjdnsadmin'); var usage = function () { console.log("Usage: cjdnslog.js [-v ] [-f ] [-l ]"); console.log("cjdnslog.js -v INFO <-- log all INFO and higher (WARN, ERROR, or CRITICAL) messages."); console.log("cjdnslog.js <-- log everything"); console.log("cjdnslog.js -f CryptoAuth.c <-- log everything in CryptoAuth.c"); console.log("cjdnslog.js -v INFO -f CryptoAuth.c <-- log INFO and higher in CryptoAuth.c"); console.log("cjdnslog.js -f CryptoAuth.c -l 747 <-- print messages from log statement on line 747 of CryptoAuth.c"); console.log("cjdnslog.js -l 747 <-- print messages from log statements on line 747 of any file at all."); }; if (process.argv[process.argv.length-1] === '--help') { usage(); process.exit(0); } var printMsg = function (data) { console.log(data['time'] + ' ' + data['level'] + ' ' + data['file'] + ':' + data['line'] + ' ' + data['message']); } Cjdns.connectWithAdminInfo(function (cjdns) { var n; var verbosity; var file; var line; if ((n = process.argv.indexOf('-v')) !== -1) { verbosity = process.argv[n+1]; } if ((n = process.argv.indexOf('-f')) !== -1) { file = process.argv[n+1]; } if ((n = process.argv.indexOf('-l')) !== -1) { line = process.argv[n+1]; } cjdns.setDefaultHandler(function (err, msg) { if (err) { throw err; } printMsg(msg); }); cjdns.AdminLog_subscribe(line, verbosity, file, function (err, ret) { if (err) { throw err; } if (ret.error !== 'none') { throw new Error(ret.error); } // make sure cjdns doesn't think we've gone missing! setInterval(function () { cjdns.ping(function (err, ret) { if (err) { throw err; } }); }, 10000); var sigint = false; process.on('SIGINT', function () { if (sigint) { process.exit(100); } console.error('Disconnecting...'); cjdns.AdminLog_unsubscribe(ret.streamId, function (err, ret) { if (err) { throw err; } console.error('done'); cjdns.disconnect(); process.exit(0); }); }); }); });