@autocodingsystems/gateway-client
Version:
Library and commandline utility to control the acs gateway - device drivers for the most common industrial production line devices
79 lines (65 loc) • 2.73 kB
JavaScript
var api = require('../api');
var globToRegExp = require('glob-to-regexp');
async function clear_command(argv, conf, options) {
var target = require('../parameters/target')(argv);
var name = require('../parameters/namenodefault')(argv);
var nowait = require('../parameters/nowait')(argv);
var timeout = require('../parameters/timeout')(argv);
var raw = require('../parameters/raw')(argv);
if (!target.value || !name.value) {
usage();
return;
}
var filter = globToRegExp(name.value, {extended: true});
try {
var devices = await api(target.value).raw.getDevices();
devices = devices.filter(d => filter.test(d.Name));
var clearResults = await Promise.all(devices.map(async d => {
var result = Object.assign({}, d, {Removed: false, Success: false, Message: 'Request not sent'});
if (!d.Classes.some(c => c === 'DeviceControl')) {
result.Removed = true;
result.Message = 'Device does not support jobs';
return result;
}
try {
await api(target.value).raw.removeDeviceJob(d.Id);
result.Removed = true;
result.Message = 'Did not wait for result';
if (!nowait.value) {
var jobstatus = await api(target.value).waitForJobStatusChange(d.Id, 'Clearing', timeout.value);
if (jobstatus.Status !== 'Clear') {
result.Message = jobstatus.Message || `Job status: ${jobstatus.Status}`;
} else {
result.Success = true;
result.Message = '';
}
}
return result;
} catch (e) {
result.Success = false;
result.Message = e.Message;
}
return result;
}));
clearResults.forEach(cr => {
if (raw.value) {
console.log(JSON.stringify());
} else if (cr.Success || nowait.value) {
console.log(`Removed Job From ${cr.Id}: ${cr.Name}`);
} else {
console.log(`Remove Job Failed From ${cr.Id}: ${cr.Name}, ${cr.Message}`);
}
});
} catch (e) {
throw e;
}
function usage() {
console.log('clear: remove job from a device on the gateway: ');
console.log(' ' + target.description);
console.log(' ' + name.description);
console.log(' ' + nowait.description);
console.log(' ' + timeout.description);
console.log(' ' + raw.description);
}
}
module.exports = clear_command;