Class: Que::Scheduler::Jobs::QueSchedulerAuditClearDownJob

Inherits:
Job
  • Object
show all
Defined in:
lib/que/scheduler/jobs/que_scheduler_audit_clear_down_job.rb

Constant Summary collapse

DELETE_AUDIT_ENQUEUED_SQL =
build_sql("que_scheduler_audit_enqueued").freeze
DELETE_AUDIT_SQL =
build_sql("que_scheduler_audit").freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build_sql(table_name) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/que/scheduler/jobs/que_scheduler_audit_clear_down_job.rb', line 10

def build_sql(table_name)
  <<~SQL
    WITH deleted AS (
      DELETE FROM #{table_name}
      WHERE scheduler_job_id <= (
        SELECT scheduler_job_id FROM que_scheduler_audit
        ORDER BY scheduler_job_id DESC
        LIMIT 1 OFFSET $1
      ) RETURNING *
    ) SELECT count(*) FROM deleted;
  SQL
end

Instance Method Details

#run(options) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/que/scheduler/jobs/que_scheduler_audit_clear_down_job.rb', line 30

def run(options)
  retain_row_count = options.symbolize_keys.fetch(:retain_row_count)
  Que::Scheduler::Db.transaction do
    # This may delete zero or more than `retain_row_count` depending on if anything was
    # scheduled in each of the past schedule runs
    Que::Scheduler::VersionSupport.execute(DELETE_AUDIT_ENQUEUED_SQL, [retain_row_count])
    # This will delete all but `retain_row_count` oldest rows
    count = Que::Scheduler::VersionSupport.execute(DELETE_AUDIT_SQL, [retain_row_count])
    log = "#{self.class} cleared down #{count.first.fetch(:count)} rows"
    ::Que.log(event: :"que-scheduler", message: log)
  end
end