Module: HireFire::Macro::Que

Extended by:
Deprecated::Que, Que, Utility
Included in:
Que
Defined in:
lib/hirefire/macro/que.rb

Instance Method Summary collapse

Methods included from Deprecated::Que

queue

Instance Method Details

#job_queue_latency(*queues) ⇒ Float

Calculates the maximum job queue latency using Que. If no queues are specified, it measures latency across all available queues.

Examples:

Calculate latency across all queues

HireFire::Macro::Que.job_queue_latency

Calculate latency for the “default” queue

HireFire::Macro::Que.job_queue_latency(:default)

Calculate latency across “default” and “mailer” queues

HireFire::Macro::Que.job_queue_latency(:default, :mailer)

Parameters:

  • queues (Array<String, Symbol>)

    (optional) Names of the queues for latency measurement. If not provided, latency is measured across all queues.

Returns:

  • (Float)

    Maximum job queue latency in seconds.



24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/hirefire/macro/que.rb', line 24

def job_queue_latency(*queues)
  query = <<~SQL
    SELECT run_at FROM que_jobs
    WHERE run_at <= NOW()
    AND finished_at IS NULL
    AND expired_at IS NULL
    #{filter_by_queues_if_any(queues)}
    ORDER BY run_at ASC LIMIT 1
  SQL

  result = ::Que.execute(query).first
  result ? (Time.now - result[:run_at].to_time) : 0.0
end

#job_queue_size(*queues) ⇒ Integer

Calculates the total job queue size using Que. If no queues are specified, it measures size across all available queues.

Examples:

Calculate size across all queues

HireFire::Macro::Que.job_queue_size

Calculate size for the “default” queue

HireFire::Macro::Que.job_queue_size(:default)

Calculate size across “default” and “mailer” queues

HireFire::Macro::Que.job_queue_size(:default, :mailer)

Parameters:

  • queues (Array<String, Symbol>)

    (optional) Names of the queues for size measurement. If not provided, size is measured across all queues.

Returns:

  • (Integer)

    Total job queue size.



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/hirefire/macro/que.rb', line 50

def job_queue_size(*queues)
  query = <<~SQL
    SELECT COUNT(*) AS total FROM que_jobs
    WHERE run_at <= NOW()
    AND finished_at IS NULL
    AND expired_at IS NULL
    #{filter_by_queues_if_any(queues)}
  SQL

  ::Que.execute(query).first.fetch(:total).to_i
end