UNPKG

dnsd-name

Version:

Dynamic authoritative name server for Iris services

123 lines (100 loc) 4.01 kB
!/usr/bin/env node var program = require('commander'); var cluster = require('cluster'); var path = require('path'); var async = require('async'); var tld = require('tldjs'); var Logger = require('raft-logger-redis').Logger; var N = require('../nameserver') var dnsd = require('../') program.version(require('../package.json').version); var server = program.command('server'); server.description('Run the nameserver.'); server.option('-i, --ipv6', 'use ipv6 (default: false)', false); server.option('-I, --ipv6-addr [HOST]', 'use ipv6 (default: ::)', "::"); server.option('-a, --addr [HOST]', 'Bind to HOST address (default: 127.0.0.1)', '127.0.0.1'); server.option('-p, --port [PORT]', 'Use PORT (default: 53)', 53); server.option('-p, --port-udp [PORT-UDP]', 'Use PORT (default: 53)', 53); server.option('-A, --redis-addr [HOST]', 'Connect to redis HOST address (default: 127.0.0.1)', '127.0.0.1'); server.option('-P, --redis-port [PORT]', 'Connect to redis PORT (default: 6379)', 6379); server.option('-o, --redis-auth [PASSWORD]', 'Use redis auth'); server.option('-t, --tcp', 'Start TCP-Server', false); server.option('-u, --udp', 'Start UDP-Server', false); server.option('-c, --cluster', 'Start server as cluster', false); server.option('-l, --logging', 'Start logging (default: false)', false); server.option('-v, --log-udp-port [LOG-UDP-PORT]', 'Use PORT (default: 5001)', 5001); server.option('-x, --log-tcp-port [LOG-TCP-PORT]', 'Use PORT (default: 5000)', 5000); server.option('-y, --log-host [HOST]', 'Use HOST (default: 127.0.0.1)', '127.0.0.1'); server.option('-z, --session [SESSION]', 'Use SESSION (default: dns)', 'DNS'); server.option('-f, --channel [CHANNEL]', 'Use CHANNEL (default: ns.0)', 'ns.0'); server.option('-g, --source [SOURCE]', 'Use SOURCE (default: dns)', 'dns'); server.action(function (options) { var logHandler; var redis = { host: options.redisAddr, port: options.redisPort }; if (options.redisAuth) { redis.auth = options.redisAuth; } if (options.logging) { var logs = Logger.createLogger({ "web": { "port": options.logTcpPort, "host": options.logHost }, "udp": { "port": options.logUdpPort, "host": options.logHost }, "view": { "port": options.logTcpPort, "host": options.logHost } }); logHandler = logs.create({ source: options.source, channel: options.channel, session: options.session, bufferSize: 1 }); } var cache = new (require('../cache'))(redis, { logHandler: logHandler || console }); var n = new N(cache, logHandler || console) if (options.cluster) { var numCPUs = require('os').cpus().length; if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) cluster.fork(); cluster.on('exit', function(worker, code, signal) { var m = 'Worker died (pid: ' + worker.process.pid + ', suicide: ' + (worker.suicide === undefined ? 'false' : worker.suicide.toString()); if (worker.suicide === false) { if (code !== null) { m += ', exitcode: ' + code; } if (signal !== null) { m += ', signal: ' + signal; } } m += '). Spawning a new one.'; console.log(m); cluster.fork(); }) } else { setupServer() } } else { setupServer(); } function setupServer() { var server = dnsd.createServer(function (req, res) { n.handler(req, res) }) server.listen(options.port, options.addr) } }); program.parse(process.argv); if (!program.args.length) program.help();