cloud-red
Version:
Harnessing Serverless for your cloud integration needs
82 lines (74 loc) • 2.27 kB
JavaScript
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
const child_process = require('child_process');
const { util } = require('../../util');
var events;
function logLines(id, type, data) {
events.emit('event-log', {
id: id,
payload: { ts: Date.now(), data: data, type: type }
});
}
module.exports = {
init: function(_runtime) {
events = _runtime.events;
},
run: function(command, args, options, emit) {
var invocationId = util.generateId();
emit &&
events.emit('event-log', {
ts: Date.now(),
id: invocationId,
payload: { ts: Date.now(), data: command + ' ' + args.join(' ') }
});
return new Promise((resolve, reject) => {
let stdout = '';
let stderr = '';
const child = child_process.spawn(command, args, options);
child.stdout.on('data', data => {
const str = '' + data;
stdout += str;
emit && logLines(invocationId, 'out', str);
});
child.stderr.on('data', data => {
const str = '' + data;
stderr += str;
emit && logLines(invocationId, 'err', str);
});
child.on('error', function(err) {
stderr = err.toString();
emit && logLines(invocationId, 'err', stderr);
});
child.on('close', code => {
let result = {
code: code,
stdout: stdout,
stderr: stderr
};
emit &&
events.emit('event-log', {
id: invocationId,
payload: { ts: Date.now(), data: 'rc=' + code }
});
if (code === 0) {
resolve(result);
} else {
reject(result);
}
});
});
}
};