setupListener() { const queue = new taskcluster.Queue(), queueEvents = new taskcluster.QueueEvents(), { params } = this.props; this.listener = new taskcluster.WebListener(); this.listener.bind(queueEvents.taskPending({ taskGroupId: params.taskGroupId })); this.listener.bind(queueEvents.taskCompleted({ taskGroupId: params.taskGroupId })); this.listener.on("message", (message) => { console.log('MESSAGE: ', message.payload.status); this.props.fetchTasks(params.taskGroupId); // message.payload.status is the only property that is consistent across all exchanges // message.payload.task never changes because its the task definition // updateReduxStore(); }); this.listener.on("error", function(err) { console.log('ERROR: ', err); // Perhaps display an error banner on top of the dashboard. This happens when a user puts him laptop to sleep // A smart way is to restart listening from scratch. // If you reconnect, make sure there is a limit. if more than 5 times in the 5 min interval, then stop reconnecting. }); this.listener.resume(); }
function main(parser, args) { var listener = new taskcluster.WebListener(); var queueEvents = new taskcluster.QueueEvents(); var taskId = slugid.v4(); listener.bind(queueEvents.taskCompleted({ taskId: taskId })); task.workerType = args.workerType; listener.resume().then(function() { return queue.createTask(taskId, task); }).catch(function(err) { console.error('Error creating task:'); console.error(err.stack); }); listener.on('message', function() { process.stdout.write(taskId); process.exit(); }); }