// Start starts a workflow func (s *schedulerWorkflow) Start(t *task) { s.state = WorkflowStarted j := newCollectorJob(s.metrics, t.deadlineDuration, t.metricsManager, t.workflow.configTree) // dispatch 'collect' job to be worked // Block until the job has been either run or skipped. errors := t.manager.Work(j).Promise().Await() if len(errors) != 0 { t.failedRuns++ t.lastFailureTime = t.lastFireTime t.lastFailureMessage = j.Errors()[len(j.Errors())-1].Error() event := new(scheduler_event.MetricCollectionFailedEvent) event.TaskID = t.id event.Errors = errors defer s.eventEmitter.Emit(event) return } // Send event event := new(scheduler_event.MetricCollectedEvent) event.TaskID = t.id event.Metrics = j.(*collectorJob).metrics defer s.eventEmitter.Emit(event) // walk through the tree and dispatch work s.workJobs(s.processNodes, s.publishNodes, t, j) }
// Start starts a workflow func (s *schedulerWorkflow) Start(t *task) { workflowLogger.WithFields(log.Fields{ "_block": "workflow-start", "task-id": t.id, "task-name": t.name, }).Info(fmt.Sprintf("Starting workflow for task (%s\\%s)", t.id, t.name)) s.state = WorkflowStarted j := newCollectorJob(s.metrics, t.deadlineDuration, t.metricsManager, t.workflow.configTree, t.id, s.tags) // dispatch 'collect' job to be worked // Block until the job has been either run or skipped. errors := t.manager.Work(j).Promise().Await() if len(errors) > 0 { t.RecordFailure(errors) event := new(scheduler_event.MetricCollectionFailedEvent) event.TaskID = t.id event.Errors = errors defer s.eventEmitter.Emit(event) return } // Send event event := new(scheduler_event.MetricCollectedEvent) event.TaskID = t.id event.Metrics = j.(*collectorJob).metrics defer s.eventEmitter.Emit(event) // walk through the tree and dispatch work workJobs(s.processNodes, s.publishNodes, t, j) }