UNPKG

cloud-red

Version:

Harnessing Serverless for your cloud integration needs

82 lines (74 loc) 2.27 kB
/** * 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); } }); }); } };