当前位置: 首页>>代码示例>>TypeScript>>正文


TypeScript tasks.DecisionTask类代码示例

本文整理汇总了TypeScript中simple-swf/build/src/tasks.DecisionTask的典型用法代码示例。如果您正苦于以下问题:TypeScript DecisionTask类的具体用法?TypeScript DecisionTask怎么用?TypeScript DecisionTask使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了DecisionTask类的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。

示例1: makeDecisions

 makeDecisions(task: DecisionTask, cb: {(Error?)}): any {
   const input = task.getWorkflowInput()
   if (input.handler !== 'taskGraph') return cb(new Error('invalid handler for taskGrah'))
   const parameters = input.parameters
   try {
     this.decide(parameters, task)
   } catch (err) {
     task.failWorkflow('error in decider', JSON.stringify(err).slice(0, 250))
   }
   cb()
 }
开发者ID:instructure,项目名称:ftl-engine,代码行数:11,代码来源:TaskGraph.ts

示例2: buildTaskMeta

 buildTaskMeta(task: DecisionTask, meta?: Object): Object {
   let wfMeta = task.getWorkflowInfo() as WorkflowWithParent
   let parentWf = task.getParentWorkflowInfo()
   if (parentWf) {
     wfMeta.parentWorkflowId = parentWf.workflowId
   }
   let taskMeta = {
     task: { type: 'taskGraph', id: task.id },
     workflow: wfMeta
   }
   return _.defaults(taskMeta || {}, meta || {})
 }
开发者ID:instructure,项目名称:ftl-engine,代码行数:12,代码来源:DeciderWorker.ts

示例3: decide

  decide(parameters: TaskGraphParameters, decisionTask: DecisionTask) {
    const graph = parameters.graph
    const groupedEvents = decisionTask.getGroupedEvents()
    let next = this.getNextNodes(graph, groupedEvents)
    let startCountByHandler = {}
    let startCountSubWorkflows = 0
    for (let node of next.nodes) {
      if (node.type === 'decision') {
        // TODO: somehow hand off to a child? need to make this more generic but just hard code for now...
        if (node.handler === 'taskGraph') {
          let tgNode = node as TaskGraphGraphNode
          const shouldThrottle = this.throttleWorkflows(tgNode, graph, groupedEvents, startCountSubWorkflows)
          if (!shouldThrottle) {
            startCountSubWorkflows++
            const maxRetry = tgNode.maxRetry || this.ftlConfig.getOpt('maxRetry')
            decisionTask.startChildWorkflow(tgNode.id, tgNode, {maxRetry: maxRetry})
          }
        }
        else if (node.handler === 'recordMarker') {
          decisionTask.addMarker(node.id, node.parameters.status)
        }
        else {
          this.logger.warn('couldn\'t find hander for child node', node)
        }
      }
      else {
        const shouldThrottle = this.throttle(node, graph, groupedEvents, startCountByHandler)
        if (!shouldThrottle) {
          startCountByHandler[node.handler] = startCountByHandler[node.handler] || 0
          startCountByHandler[node.handler]++
          const handlerActType = this.activities.getModule(node.handler)
          if (!handlerActType) throw new Error('missing activity type ' + node.handler)
          let opts = this.buildOpts(node)
          opts['maxRetry'] = node.maxRetry || handlerActType.getMaxRetry() || this.ftlConfig.getOpt('maxRetry')
          decisionTask.scheduleTask(node.id, node, handlerActType, opts)
        }
      }
    }
    const failedToReFail = decisionTask.rescheduleFailedEvents()
    const failedToReTimeOut = decisionTask.rescheduleTimedOutEvents()
    const failedToReStart = decisionTask.rescheduleFailedToSchedule()
    const failedToReschedule = failedToReFail
    .concat(failedToReTimeOut)
    .concat(failedToReStart)
    if (failedToReschedule.length > 0) {
      this.logger.warn('failed to reschedule all previously failed events')
      decisionTask.failWorkflow('failed to reschedule previously failed events', JSON.stringify(failedToReschedule).slice(0, 250))
    }
    else if (next.finished) {
      // TODO: better results
      decisionTask.completeWorkflow({status: 'success'})
    }

  }
开发者ID:instructure,项目名称:ftl-engine,代码行数:54,代码来源:TaskGraph.ts

示例4: onDecisionMade

 onDecisionMade(task: DecisionTask) {
   const finishTime = this.decisionTimers[task.id]
   delete this.decisionTimers[task.id]
   this.ftlConfig.metricReporter.decrement('decider.running')
   this.ftlConfig.metricReporter.increment('decider.completed')
   this.ftlConfig.metricReporter.timing('decider.timer', finishTime)
   this.logInfo('responded to decision task', this.buildTaskMeta(task, { results: task.getDecisionInfo() }))
   const failedWorkflows = task.decisions.filter((d) => d.decision.decisionType === 'FailWorkflowExecution')
   // there should only really be one failedWorkflow
   if (failedWorkflows.length) {
     const wf = failedWorkflows[0]
     this.ftlConfig.notifier.sendError('workflowFailed', {
       workflow: task.getWorkflowInfo(),
       control: task.getWorkflowTaskInput().control,
       parentWf: task.getParentWorkflowInfo(),
       originWorkflow: task.getOriginWorkflow(),
       details: wf.decision.failWorkflowExecutionDecisionAttributes!.details,
       reason: wf.decision.failWorkflowExecutionDecisionAttributes!.reason
     })
   }
   this.emit('decisionCompleted', task.decisions.map((d) => d.decision ))
 }
开发者ID:instructure,项目名称:ftl-engine,代码行数:22,代码来源:DeciderWorker.ts


注:本文中的simple-swf/build/src/tasks.DecisionTask类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。