Module: RailsOpsDashboard::BackgroundTaskRunner

Extended by:
ActiveSupport::Concern
Included in:
RakeTasksController, SeedsController
Defined in:
app/controllers/concerns/rails_ops_dashboard/background_task_runner.rb

Constant Summary collapse

TASKS =
Concurrent::Map.new

Instance Method Summary collapse

Instance Method Details

#run_in_background(task_id, task_name) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'app/controllers/concerns/rails_ops_dashboard/background_task_runner.rb', line 9

def run_in_background(task_id, task_name)
  TASKS[task_id] = { name: task_name, status: 'running', started_at: Time.current.iso8601 }

  Thread.new do
    yield
    TASKS[task_id][:status] = 'completed'
  rescue StandardError => e
    TASKS[task_id][:status] = 'failed'
    TASKS[task_id][:error] = e.message
    Rails.logger.error("[RailsOpsDashboard] Task #{task_name} failed: #{e.message}")
  ensure
    TASKS[task_id][:finished_at] = Time.current.iso8601
  end
end

#task_status(task_id) ⇒ Object



24
25
26
# File 'app/controllers/concerns/rails_ops_dashboard/background_task_runner.rb', line 24

def task_status(task_id)
  TASKS[task_id]
end