Class: SolidAgents::Run

Inherits:
Record
  • Object
show all
Defined in:
app/models/solid_agents/run.rb

Constant Summary collapse

STATUSES =
{
  queued: "queued",
  running: "running",
  blocked: "blocked",
  pr_opened: "pr_opened",
  succeeded: "succeeded",
  failed: "failed",
  canceled: "canceled"
}.freeze

Instance Method Summary collapse

Instance Method Details

#append_event!(event_type, message:, payload: nil, actor: nil) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'app/models/solid_agents/run.rb', line 30

def append_event!(event_type, message:, payload: nil, actor: nil)
  next_sequence = (events.maximum(:sequence) || 0) + 1
  events.create!(
    event_type: event_type,
    message: message,
    payload: payload || {},
    actor: actor || stage_owner,
    event_time: Time.current,
    sequence: next_sequence
  )
end

#complete!(result_payload:, actor:) ⇒ Object



53
54
55
56
57
# File 'app/models/solid_agents/run.rb', line 53

def complete!(result_payload:, actor:)
  update!(status: :succeeded, stage: "done", stage_owner: SolidAgents::Workflow.stage_agent("done"), finished_at: Time.current, result_payload: result_payload)
  work_item&.update!(column_key: "done")
  append_event!("run_completed", message: "Run completed successfully", payload: result_payload, actor: actor)
end

#fail!(error_payload:, actor:) ⇒ Object



59
60
61
62
63
# File 'app/models/solid_agents/run.rb', line 59

def fail!(error_payload:, actor:)
  update!(status: :failed, finished_at: Time.current, error_payload: error_payload)
  work_item&.update!(column_key: "failed")
  append_event!("run_failed", message: "Run failed", payload: error_payload, actor: actor)
end

#start_stage!(actor:) ⇒ Object



48
49
50
51
# File 'app/models/solid_agents/run.rb', line 48

def start_stage!(actor:)
  update!(status: :running, started_at: (started_at || Time.current))
  append_event!("stage_started", message: "Stage #{stage} started", payload: {"stage" => stage}, actor: actor)
end

#transition_to!(next_stage, actor:, message:, payload: {}) ⇒ Object



42
43
44
45
46
# File 'app/models/solid_agents/run.rb', line 42

def transition_to!(next_stage, actor:, message:, payload: {})
  update!(stage: next_stage, stage_owner: SolidAgents::Workflow.stage_agent(next_stage))
  work_item&.update!(column_key: next_stage)
  append_event!("stage_transitioned", message: message, payload: payload.merge("next_stage" => next_stage), actor: actor)
end