occaecatidicta
Version:
124 lines (114 loc) • 3.41 kB
text/typescript
import * as readline from 'readline';
import { AdminClient } from 'omelox-admin';
import * as command from './command';
import { consts } from './consts';
import * as util from './util';
import { argv } from 'optimist';
let username = argv['u'] = argv['u'] || 'monitor';
let password = argv['p'] = argv['p'] || 'monitor';
let host = argv['h'] = argv['h'] || 'localhost';
let port = argv['P'] = argv['P'] || 3005;
let context = 'all';
let client: AdminClient = null;
export default function doConnect() {
client = new AdminClient({
username: username,
password: password,
md5: true
});
let id = 'omelo_cli_' + Date.now();
client.connect(id, host, port, function (err: Error) {
if (err) {
util.log('\n' + err + '\n');
process.exit(0);
} else {
let ASCII_LOGO = consts.ASCII_LOGO;
for (let i = 0; i < ASCII_LOGO.length; i++) {
util.log(ASCII_LOGO[i]);
}
let WELCOME_INFO = consts.WELCOME_INFO;
for (let i = 0, l = WELCOME_INFO.length; i < l; i++) {
util.log(WELCOME_INFO[i]);
}
startCli();
}
});
client.on('close', function () {
client.socket.disconnect();
util.log('\ndisconnect from master');
process.exit(0);
});
}
function startCli() {
let rl = readline.createInterface(process.stdin, process.stdout, completer);
let PROMPT = username + consts.PROMPT + context + '>';
rl.setPrompt(PROMPT);
rl.prompt();
let rootCommand = command.default();
rl.on('line', function (line) {
let key = line.trim();
if (!key) {
util.help();
rl.prompt();
return;
}
switch (key) {
case 'help':
util.help();
rl.prompt();
break;
case '?':
util.help();
rl.prompt();
break;
case 'quit':
rootCommand.quit(rl);
break;
case 'kill':
rootCommand.kill(rl, client);
break;
default:
rootCommand.handle(key, {
user: username
}, rl, client);
break;
}
}).on('close', function () {
util.log('bye ' + username);
process.exit(0);
});
}
function completer(line: string) {
line = line.trim();
let completions = consts.COMANDS_COMPLETE;
let hits = [];
// commands tab for infos
if (consts.COMPLETE_TWO[line as keyof typeof consts.COMPLETE_TWO]) {
if (line === 'show') {
for (let k in consts.SHOW_COMMAND) {
hits.push(k);
}
} else if (line === 'help') {
for (let k in consts.COMANDS_COMPLETE_INFO) {
hits.push(k);
}
} else if (line === 'enable' || line === 'disable') {
hits.push('app');
hits.push('module');
} else if (line === 'dump') {
hits.push('memory');
hits.push('cpu');
}
}
hits = util.tabComplete(hits, line, consts.COMANDS_COMPLETE_INFO, 'complete');
hits = util.tabComplete(hits, line, consts.COMANDS_COMPLETE_INFO, 'help');
hits = util.tabComplete(hits, line, consts.SHOW_COMMAND, 'show');
hits = util.tabComplete(hits, line, null, 'enable');
hits = util.tabComplete(hits, line, null, 'disable');
hits = util.tabComplete(hits, line, null, 'disable');
hits = util.tabComplete(hits, line, null, 'dump');
hits = util.tabComplete(hits, line, null, 'use');
hits = util.tabComplete(hits, line, null, 'stop');
// show all completions if none found
return [hits.length ? hits : completions, line];
}