Sha256: c0f683cc321b4c32b64ada3eda91fc6f41584ad7f5a5b5c10b07a538e09a9ca7
Contents?: true
Size: 1.78 KB
Versions: 3
Compression:
Stored size: 1.78 KB
Contents
module ActiveJobLog module Loggeable extend ActiveSupport::Concern STATUSES = %i{queued pending finished failed} included do extend Enumerize validates :job_id, presence: true enumerize :status, in: STATUSES, scope: true serialize :params, Array serialize :stack_trace, Array before_save :set_queued_duration before_save :set_execution_duration before_save :set_total_duration def set_queued_duration return if queued_at.blank? || started_at.blank? self.queued_duration = (started_at.to_f - queued_at.to_f).to_i end def set_execution_duration return if started_at.blank? || ended_at.blank? self.execution_duration = (ended_at.to_f - started_at.to_f).to_i end def set_total_duration from = queued_at || started_at return if from.blank? || ended_at.blank? self.total_duration = (ended_at.to_f - from.to_f).to_i end end module ClassMethods def update_job!(job_id, status, params = {}) params.merge!(status_to_params(status)) job = find_or_create_job(job_id) job.update!(params) job end def find_or_create_job(job_id) where(job_id: job_id).where.not(status: :failed).last || create(job_id: job_id) end def status_to_params(status) time_attr = infer_duration_attr_from_status(status) { time_attr => DateTime.current, status: status } end def infer_duration_attr_from_status(status) case status when :queued :queued_at when :pending :started_at when :finished, :failed :ended_at else fail "invalid status" end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
active_job_log-3.0.0 | lib/active_job_log/loggeable.rb |
active_job_log-2.1.0 | lib/active_job_log/loggeable.rb |
active_job_log-2.0.0 | lib/active_job_log/loggeable.rb |