class WorkerStatusController < ApplicationController
  def show
    start = Time.now
    events = current_user.events

    if params[:since_id].present?
      since_id = params[:since_id].to_i
      events = events.where('id > ?', since_id)
    end

    result = events.select('COUNT(id) AS count', 'MIN(id) AS min_id', 'MAX(id) AS max_id').reorder(Arel.sql('min(created_at)')).first
    count, min_id, max_id = result.count, result.min_id, result.max_id

    case max_id
    when nil
    when min_id
      events_url = events_path(hl: max_id)
    else
      events_url = events_path(hl: "#{min_id}-#{max_id}")
    end

    render json: {
      pending: Delayed::Job.pending.where("run_at <= ?", start).count,
      awaiting_retry: Delayed::Job.awaiting_retry.count,
      recent_failures: Delayed::Job.failed_jobs.where('failed_at > ?', 5.days.ago).count,
      event_count: count,
      max_id: max_id || 0,
      events_url: events_url,
      compute_time: Time.now - start
    }
  end
end