app/models/good_job/execution.rb in good_job-4.1.0 vs app/models/good_job/execution.rb in good_job-4.1.1

- old
+ new

@@ -1,8 +1,63 @@ # frozen_string_literal: true -module GoodJob - # Created at the time a Job begins executing. - # Behavior from +DiscreteExecution+ will be merged into this class. - class Execution < DiscreteExecution +module GoodJob # :nodoc: + class Execution < BaseRecord + include ErrorEvents + + self.table_name = 'good_job_executions' + self.implicit_order_column = 'created_at' + + belongs_to :job, class_name: 'GoodJob::Job', foreign_key: 'active_job_id', primary_key: 'id', inverse_of: :executions, optional: true + + scope :finished, -> { where.not(finished_at: nil) } + + alias_attribute :performed_at, :created_at + + # TODO: Remove when support for Rails 6.1 is dropped + attribute :duration, :interval if ActiveJob.version.canonical_segments.take(2) == [6, 1] + + def number + serialized_params.fetch('executions', 0) + 1 + end + + # Time between when this job was expected to run and when it started running + def queue_latency + created_at - scheduled_at + end + + # Monotonic time between when this job started and finished + def runtime_latency + duration + end + + def last_status_at + finished_at || created_at + end + + def status + if finished_at.present? + if error.present? && job.finished_at.present? + :discarded + elsif error.present? + :retried + else + :succeeded + end + else + :running + end + end + + def display_serialized_params + serialized_params.merge({ + _good_job_execution: attributes.except('serialized_params'), + }) + end + + def filtered_error_backtrace + Rails.backtrace_cleaner.clean(error_backtrace || []) + end end end + +ActiveSupport.run_load_hooks(:good_job_execution, GoodJob::Execution)