Class: JobWorkflow::WorkflowStatus

Inherits:
Object
  • Object
show all
Defined in:
lib/job_workflow/workflow_status.rb

Defined Under Namespace

Classes: NotFoundError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context:, job_class_name:, status:, completed_task_names: []) ⇒ WorkflowStatus

: (

  context: Context,
  job_class_name: String,
  status: status_type,
  ?completed_task_names: Array[Symbol]
) -> void


84
85
86
87
88
89
# File 'lib/job_workflow/workflow_status.rb', line 84

def initialize(context:, job_class_name:, status:, completed_task_names: [])
  @context = context #: Context
  @job_class_name = job_class_name #: String
  @status = status #: Symbol
  @completed_task_names = completed_task_names
end

Instance Attribute Details

#completed_task_namesObject (readonly)

: Array



13
14
15
# File 'lib/job_workflow/workflow_status.rb', line 13

def completed_task_names
  @completed_task_names
end

#contextObject (readonly)

@rbs!

type status_type = :pending | :running | :completed | :failed


10
11
12
# File 'lib/job_workflow/workflow_status.rb', line 10

def context
  @context
end

#job_class_nameObject (readonly)

: String



11
12
13
# File 'lib/job_workflow/workflow_status.rb', line 11

def job_class_name
  @job_class_name
end

#statusObject (readonly)

: status_type



12
13
14
# File 'lib/job_workflow/workflow_status.rb', line 12

def status
  @status
end

Class Method Details

.find(job_id) ⇒ Object

: (String) -> WorkflowStatus

Raises:



17
18
19
20
21
22
# File 'lib/job_workflow/workflow_status.rb', line 17

def find(job_id)
  workflow_status = find_by(job_id:)
  raise NotFoundError, "Workflow with job_id '#{job_id}' not found" if workflow_status.nil?

  workflow_status
end

.find_by(job_id:) ⇒ Object

: (job_id: String) -> WorkflowStatus?



25
26
27
28
29
30
31
# File 'lib/job_workflow/workflow_status.rb', line 25

def find_by(job_id:)
  data = QueueAdapter.current.find_job(job_id)
  return if data.nil?
  return if data["class_name"] == JobWorkflow::SubTaskJob.name

  WorkflowStatus.from_job_data(data)
end

.from_job_data(data) ⇒ Object

: (Hash[String, untyped]) -> WorkflowStatus



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/job_workflow/workflow_status.rb', line 34

def from_job_data(data)
  job_class_name = data["class_name"]
  job_class = job_class_name.constantize
  workflow = job_class._workflow
  context = context_from_job_data(data, workflow)

  new(
    context:,
    job_class_name:,
    status: data["status"],
    completed_task_names: completed_task_names_from_job_data(data)
  )
end

Instance Method Details

#argumentsObject

: () -> Arguments



97
98
99
# File 'lib/job_workflow/workflow_status.rb', line 97

def arguments
  context.arguments
end

#completed?Boolean

: () -> bool

Returns:

  • (Boolean)


117
118
119
# File 'lib/job_workflow/workflow_status.rb', line 117

def completed?
  status == :succeeded
end

#current_task_nameObject

: () -> Symbol?



92
93
94
# File 'lib/job_workflow/workflow_status.rb', line 92

def current_task_name
  context._task_context.task&.task_name
end

#failed?Boolean

: () -> bool

Returns:

  • (Boolean)


122
123
124
# File 'lib/job_workflow/workflow_status.rb', line 122

def failed?
  status == :failed
end

#job_statusObject

: () -> JobStatus



107
108
109
# File 'lib/job_workflow/workflow_status.rb', line 107

def job_status
  context.job_status
end

#outputObject

: () -> Output



102
103
104
# File 'lib/job_workflow/workflow_status.rb', line 102

def output
  context.output
end

#pending?Boolean

: () -> bool

Returns:

  • (Boolean)


127
128
129
# File 'lib/job_workflow/workflow_status.rb', line 127

def pending?
  status == :pending
end

#running?Boolean

: () -> bool

Returns:

  • (Boolean)


112
113
114
# File 'lib/job_workflow/workflow_status.rb', line 112

def running?
  status == :running
end

#to_hObject

: () -> Hash[Symbol, untyped]



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/job_workflow/workflow_status.rb', line 132

def to_h
  {
    status:,
    job_class_name:,
    current_task_name:,
    arguments: arguments.to_h,
    output: output.flat_task_outputs.map do |task_output|
      {
        task_name: task_output.task_name,
        each_index: task_output.each_index,
        data: task_output.data
      }
    end
  }
end