Class: ActionAgent::SandboxProvisionJob

Inherits:
ApplicationJob
  • Object
show all
Defined in:
app/jobs/action_agent/sandbox_provision_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(sandbox_session_id) ⇒ Object

Provision a Cloud Run sandbox for the session Each sandbox is an instance of the ActiveAgents application running in sandbox mode



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/jobs/action_agent/sandbox_provision_job.rb', line 9

def perform(sandbox_session_id)
  sandbox = SandboxSession.find(sandbox_session_id)
  return if sandbox.ready? || sandbox.expired?

  # In development/test, simulate provisioning
  if Rails.env.development? || Rails.env.test?
    simulate_provisioning(sandbox)
    return
  end

  # Hand off to whichever backend this install registered — the engine
  # ships only the in-memory one, so a real container/job comes from the
  # host app's backend (see ActionAgent.sandbox_backends).
  result = SandboxOrchestrator.new.create_sandbox(sandbox)

  sandbox.mark_ready!(
    cloud_run_url: result[:url],
    cloud_run_job_id: result[:sandbox_id]
  )

  # Broadcast status update
  broadcast_sandbox_update(sandbox)
rescue StandardError => e
  Rails.logger.error("Sandbox provision failed: #{e.message}")
  sandbox.update!(status: :failed)
  broadcast_sandbox_update(sandbox)
end