Exemple #1
1
 server.listen(function() {
   var port = server.address().port;
   var url = "http://localhost:" + port + "/blah/foo"
   var task = Plan.createTask(definition);
   var plan = new Plan();
   var hadError = false;
   plan.addTask(task);
   plan.on('error', function(err) {
     hadError = true;
   });
   plan.on('end', function() {
     assert.ok(hadError);
     server.close(done);
   });
   plan.start({
     callbackUrl: url,
     callbackData: {foo: true}
   });
 });
Exemple #2
0
 server.listen(function() {
   var port = server.address().port;
   var url = "http://localhost:" + port + "/blah/foo"
   var task = Plan.createTask(definition);
   var plan = new Plan();
   plan.addTask(task);
   plan.on('error', done);
   plan.on('end', function() {
     assert.strictEqual(task.exports.url, url);
     assert.ok(hitServer);
     server.close();
     done();
   });
   plan.start({
     callbackUrl: url,
     callbackData: data
   });
 });
Exemple #3
0
Jobs.prototype.create = function(context, template, doneCallback){
  var self = this;
  var job = {
    id: makeUuid(),
    progress: 0,
    state: 'processing',
    error: null,
    message: null,
    startDate: new Date(),
    endDate: null,
    info: {}
  };
  context.callbackData = job;
  self.table[job.id] = job;
  assert.ok(template.id);
  var plan = new Plan(template.id);
  var taskInstances = {};
  var templateScopeOptions = template.options || {};
  var taskName, taskConfig, nonlocalOptions, taskScopeOptions;
  var optionsToUse, taskDefinition, task;
  for (taskName in template.tasks) {
    taskConfig = template.tasks[taskName];
    nonlocalOptions = templateScopeOptions[taskConfig.task] || {};
    taskScopeOptions = taskConfig.options || {};
    optionsToUse = extend(extend({}, nonlocalOptions), taskScopeOptions);
    taskDefinition = self.tasks[taskConfig.task];
    if (! taskDefinition) {
      job.state = 'complete';
      job.error = 'InvalidTask';
      job.message = "invalid task name: " + taskConfig.task;
      doneCallback();
      return job;
    }
    task = Plan.createTask(taskDefinition, taskName, optionsToUse);
    task.exports.task = taskConfig.task;
    taskInstances[taskName] = task;
    job.info[taskName] = task.exports;
    plan.addTask(task);
  }
  var targetTask, i, depName, depTask;
  for (taskName in template.tasks) {
    taskConfig = template.tasks[taskName];
    targetTask = taskInstances[taskName];
    if (! taskConfig.dependencies) continue;
    for (i = 0; i < taskConfig.dependencies.length; ++i) {
      depName = taskConfig.dependencies[i];
      depTask = taskInstances[depName];
      if (! depTask) {
        job.state = 'complete';
        job.error = 'InvalidTemplate';
        job.message = "invalid dependency name: " + depName;
        doneCallback();
        return job;
      }
      plan.addDependency(targetTask, depTask);
    }
  }
  plan.on('progress', function(amountDone, amountTotal){
    job.progress = amountDone / amountTotal;
    emitUpdate();
  });
  plan.on('error', function(err, task){
    console.error("Task", task.name, "error", err.stack, "\n");
    job.error = 'ProcessingError';
    job.message = "Error processing job.";
  });
  plan.on('end', function(){
    onDone();
  });
  plan.start(context);
  self.emit('new', job);
  return job;
  function onDone(){
    job.progress = 1;
    job.state = 'complete';
    job.endDate = new Date();
    emitUpdate();
    emitComplete();
    doneCallback();
  }
  function emitUpdate(){
    self.emit("update." + job.id, job);
  }
  function emitComplete(){
    self.emit('complete');
    self.emit("complete." + job.id);
  }
  return emitComplete;
};
Exemple #4
0
 self.state.addJob(job, function(err) {
   if (err) {
     console.error("unable to add job:", err.stack);
     job.state = 'complete';
     job.error = 'InternalError';
     job.message = "Internal error creating job.";
     doneCallback();
     return job;
   }
   assert.ok(template.id);
   var plan = new Plan(template.id);
   var taskInstances = {};
   var templateScopeOptions = template.options || {};
   var taskName, taskConfig, nonlocalOptions, taskScopeOptions;
   var optionsToUse, taskDefinition, task;
   for (taskName in template.tasks) {
     taskConfig = template.tasks[taskName];
     nonlocalOptions = templateScopeOptions[taskConfig.task] || {};
     taskScopeOptions = taskConfig.options || {};
     optionsToUse = extend(extend({}, nonlocalOptions), taskScopeOptions);
     taskDefinition = self.tasks[taskConfig.task];
     if (! taskDefinition) {
       job.state = 'complete';
       job.error = 'InvalidTask';
       job.message = "invalid task name: " + taskConfig.task;
       doneCallback();
       return job;
     }
     task = Plan.createTask(taskDefinition, taskName, optionsToUse);
     task.exports.task = taskConfig.task;
     taskInstances[taskName] = task;
     job.info[taskName] = task.exports;
     plan.addTask(task);
   }
   var targetTask, i, depName, depTask;
   for (taskName in template.tasks) {
     taskConfig = template.tasks[taskName];
     targetTask = taskInstances[taskName];
     if (! taskConfig.dependencies) continue;
     for (i = 0; i < taskConfig.dependencies.length; ++i) {
       depName = taskConfig.dependencies[i];
       depTask = taskInstances[depName];
       if (! depTask) {
         job.state = 'complete';
         job.error = 'InvalidTemplate';
         job.message = "invalid dependency name: " + depName;
         doneCallback();
         return job;
       }
       plan.addDependency(targetTask, depTask);
     }
   }
   plan.on('progress', function(amountDone, amountTotal){
     job.progress = amountDone / amountTotal;
     self.state.onUpdate(job);
   });
   plan.on('error', function(err, task){
     console.error("Task", task.name, "error", err.stack, "\n");
     job.error = 'ProcessingError';
     job.message = "Error processing job.";
   });
   plan.on('end', onDone);
   plan.start(context);
 });