Class: SolidAgents::Run
- 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
- #append_event!(event_type, message:, payload: nil, actor: nil) ⇒ Object
- #complete!(result_payload:, actor:) ⇒ Object
- #fail!(error_payload:, actor:) ⇒ Object
- #start_stage!(actor:) ⇒ Object
- #transition_to!(next_stage, actor:, message:, payload: {}) ⇒ Object
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: , 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: , payload: payload.merge("next_stage" => next_stage), actor: actor) end |