1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-06 03:50:04 +02:00
OpenSTF/lib/roles/console.js

87 lines
2.1 KiB
JavaScript

var readline = require('readline')
var zmq = require('zmq')
var Promise = require('bluebird')
var logger = require('../util/logger')
var tx = require('../util/tx')
module.exports = function(options) {
var log = logger.createLogger('console')
// Input
var sub = zmq.socket('sub')
sub.subscribe('ALL')
options.endpoints.sub.forEach(function(endpoint) {
log.info('SUB connected to %s', endpoint)
sub.connect(endpoint)
})
// Output
var push = zmq.socket('push')
options.endpoints.push.forEach(function(endpoint) {
log.info('PUSH connected to %s', endpoint)
push.connect(endpoint)
})
// User input
var rl = readline.createInterface({
input: process.stdin
, output: process.stdout
})
rl.setPrompt('stf> ')
rl.prompt()
rl.on('line', function(line) {
var args = line.trim().split(/\s+/g)
switch (args.shift()) {
case 'help':
console.log()
console.log('Available commands:')
console.log()
console.log(' help - show help')
console.log()
rl.prompt()
break
case 'ls':
tx.q(push, sub, 'ALL', ['ls'])
.timeout(1000)
.then(function(results) {
results.forEach(function(result) {
console.log('%s', result.serial)
})
})
.catch(Promise.TimeoutError, function(err) {
console.log(err.message)
})
.finally(function() {
rl.prompt()
})
break
case 'shell':
tx.q(push, sub, 'ALL', ['shell', args.join(' ')])
.timeout(1000)
.then(function(results) {
results.forEach(function(result) {
console.log('%s: %s', result.serial, result.value.toString().trim())
})
})
.catch(Promise.TimeoutError, function(err) {
console.log(err.message)
})
.finally(function() {
rl.prompt()
})
break
case 'exit':
case 'quit':
process.exit(0)
break
default:
console.log('Unknown command')
rl.prompt()
break
}
})
}