Module: Libis::Workflow::Base::Run

Included in:
Run
Defined in:
lib/libis/workflow/base/run.rb

Overview

Base module for all workflow runs. It is created by an associated workflow when the workflow is executed.

This module lacks the implementation for the data attributes. It functions as an interface that describes the common functionality regardless of the storage implementation. These attributes require some implementation:

  • start_date: [Time] the timestamp of the execution of the run

  • job: [Object] a reference to the Job this Run belongs to

  • id: [String] (Optional) a unique run number

Note that ::Libis::Workflow::Base::WorkItem is a parent module and therefore requires implementation of the attributes of that module too.

A simple in-memory implementation can be found in ::Libis::Workflow::Run

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#actionObject

Returns the value of attribute action.



25
26
27
# File 'lib/libis/workflow/base/run.rb', line 25

def action
  @action
end

#tasksObject

Returns the value of attribute tasks.



25
26
27
# File 'lib/libis/workflow/base/run.rb', line 25

def tasks
  @tasks
end

Instance Method Details

#loggerObject



50
51
52
# File 'lib/libis/workflow/base/run.rb', line 50

def logger
  self.properties['logger'] || self.job.logger rescue ::Libis::Workflow::Config.logger
end

#nameObject



34
35
36
# File 'lib/libis/workflow/base/run.rb', line 34

def name
  self.job.run_name(self.start_date)
end

#namepathObject



42
43
44
# File 'lib/libis/workflow/base/run.rb', line 42

def namepath
  self.name
end

#namesObject



38
39
40
# File 'lib/libis/workflow/base/run.rb', line 38

def names
  Array.new
end

#run(action = :run) ⇒ Object

Execute the workflow.

The action parameter defines how the execution of the tasks will behave:

- With the default :run action each task will be executed regardsless how the task performed on the item
  previously.
- When using the :retry action a task will not perform on an item if it was successful the last time. This
  allows you to retry a run when an temporary error (e.g. asynchronous wait or halt) occured.

Parameters:

  • action (Symbol) (defaults to: :run)

    the type of action to take during this run. :run or :retry



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/libis/workflow/base/run.rb', line 63

def run(action = :run)
  self.action = action

  unless action == :retry
    self.start_date = Time.now
    self.options = workflow.prepare_input(self.options)
  end


  self.tasks = workflow.tasks
  configure_tasks self.options

  self.save!

  runner = Libis::Workflow::TaskRunner.new nil

  self.tasks.each do |task|
    runner << task
  end

  runner.run self

end

#work_dirObject



27
28
29
30
31
32
# File 'lib/libis/workflow/base/run.rb', line 27

def work_dir
  # noinspection RubyResolve
  dir = File.join(Libis::Workflow::Config.workdir, self.name)
  FileUtils.mkpath dir unless Dir.exist?(dir)
  dir
end

#workflowObject



46
47
48
# File 'lib/libis/workflow/base/run.rb', line 46

def workflow
  self.job.workflow
end