module HireFire::Macro::QC

Public Instance Methods

job_queue_latency(*queues) click to toggle source

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

@param queues [Array<String, Symbol>] (optional) Names of the queues for latency

measurement. If not provided, latency is measured across all queues.

@return [Float] Maximum job queue latency in seconds. @example Calculate latency across all queues

HireFire::Macro::QC.job_queue_latency

@example Calculate latency for the “default” queue

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

@example Calculate latency across “default” and “mailer” queues

HireFire::Macro::QC.job_queue_latency(:default, :mailer)
# File lib/hirefire/macro/queue_classic.rb, line 24
      def job_queue_latency(*queues)
        queues = normalize_queues(queues, allow_empty: true)

        query = <<~SQL
          SELECT EXTRACT(EPOCH FROM (now() - scheduled_at)) AS latency
          FROM #{::QC.table_name}
          WHERE scheduled_at <= now()
          #{filter_by_queues_if_any(queues)}
          ORDER BY scheduled_at ASC
          LIMIT 1
        SQL

        connection = ::QC.default_conn_adapter

        result = if queues.any?
          connection.execute(query, "{#{queues.to_a.join(",")}}")
        else
          connection.execute(query)
        end

        (result && result["latency"]) ? result["latency"].to_f : 0.0
      end
job_queue_size(*queues) click to toggle source

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

@param queues [Array<String, Symbol>] (optional) Names of the queues for size measurement.

If not provided, size is measured across all queues.

@return [Integer] Total job queue size. @example Calculate size across all queues

HireFire::Macro::QC.job_queue_size

@example Calculate size for the “default” queue

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

@example Calculate size across “default” and “mailer” queues

HireFire::Macro::QC.job_queue_size(:default, :mailer)
# File lib/hirefire/macro/queue_classic.rb, line 59
      def job_queue_size(*queues)
        queues = normalize_queues(queues, allow_empty: true)

        query = <<~SQL
          SELECT COUNT(*) FROM #{::QC.table_name}
          WHERE scheduled_at <= now()
          #{filter_by_queues_if_any(queues)}
        SQL

        connection = ::QC.default_conn_adapter

        result = if queues.any?
          connection.execute(query, "{#{queues.to_a.join(",")}}")
        else
          connection.execute(query)
        end

        result["count"].to_i
      end

Private Instance Methods

filter_by_queues_if_any(queues) click to toggle source
# File lib/hirefire/macro/queue_classic.rb, line 81
def filter_by_queues_if_any(queues)
  queues.any? ? "AND q_name = ANY($1::text[])" : ""
end