Sha256: 3382488d35e1f749e5adc2fddcc0a1dcc2c6004e9ca6130c0aef511b08364d21

Contents?: true

Size: 1.58 KB

Versions: 2

Compression:

Stored size: 1.58 KB

Contents

module SolidQueueDashboard
  module Decorators
    class JobDecorator < SimpleDelegator
      def color
        Job.status_color(status)
      end

      def status
        return @status if defined?(@status)

        @status = if retried?
          Job::RETRIED
        elsif failed?
          Job::FAILED
        elsif success?
          Job::SUCCESS
        elsif scheduled?
          Job::SCHEDULED
        else
          Job::PENDING
        end
      end

      def success?
        return @success if defined?(@success)
        @success = finished_at.present? && !failed? && !retried?
      end

      def retried?
        return @retried if defined?(@retried)
        @retried = finished_at.present? && !failed_execution.present? &&
          (arguments["executions"].to_i > 0 || execution_history.where(scheduled_at: finished_at..).any?)
      end

      def failed?
        return @failed if defined?(@failed)
        @failed = failed_execution.present?
      end

      def scheduled?
        return @scheduled if defined?(@scheduled)
        @scheduled = scheduled_at.present? && scheduled_at > Time.current
      end

      def pending?
        return @pending if defined?(@pending)
        @pending = !finished_at.present?
      end

      def execution_history
        SolidQueue::Job.where(active_job_id: active_job_id)
      end

      def error_message
        return @error_message if defined?(@error_message)

        @error_message = failed_execution ?
          "#{failed_execution.error["exception_class"]}: #{failed_execution.error["message"]}" :
          nil
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
solid_queue_dashboard-0.1.1 lib/solid_queue_dashboard/decorators/job_decorator.rb
solid_queue_dashboard-0.1.0 lib/solid_queue_dashboard/decorators/job_decorator.rb