class PgqPrometheus::SqlCaller::ActiveRecord

Public Class Methods

new(model_class_name) click to toggle source

@param model_class_name [Class<Object>,String] class or class name

# File lib/pgq_prometheus/sql_caller/active_record.rb, line 14
def initialize(model_class_name)
  @model_class_name = model_class_name.to_s
end

Public Instance Methods

consumer_info(queue, consumer = nil) click to toggle source

Returns pgq.get_consumer_info for one or all consumers of queue. @param queue [String] queue name @param consumer [String, nil] consumer name @return [Hash<Symbol>] when queue is present. @return [Array<Hash<Symbol>>] when queue is nil.

# File lib/pgq_prometheus/sql_caller/active_record.rb, line 35
def consumer_info(queue, consumer = nil)
  if consumer
    select_hashes('SELECT * FROM pgq.get_consumer_info(?, ?)', queue.to_s, consumer.to_s).first
  else
    select_hashes('SELECT * FROM pgq.get_consumer_info(?)', queue.to_s)
  end
end
queue_info(queue = nil) click to toggle source

Returns pgq.get_queue_info for one or all queues. @param queue [String, nil] queue name @return [Hash<Symbol>] when queue is present. @return [Array<Hash<Symbol>>] when queue is nil.

# File lib/pgq_prometheus/sql_caller/active_record.rb, line 22
def queue_info(queue = nil)
  if queue
    select_hashes('SELECT * FROM pgq.get_queue_info(?)', queue.to_s).first
  else
    select_hashes('SELECT * FROM pgq.get_queue_info()')
  end
end
release_connection() click to toggle source

Releases active pg connection in thread. Do nothing if no connection captured.

# File lib/pgq_prometheus/sql_caller/active_record.rb, line 45
def release_connection
  model_class.connection_pool.release_connection
end
with_connection() { || ... } click to toggle source

Acquires pg connection during block execution. Release it after block executed. @yield

# File lib/pgq_prometheus/sql_caller/active_record.rb, line 52
def with_connection
  model_class.connection_pool.with_connection { yield }
end

Private Instance Methods

model_class() click to toggle source
# File lib/pgq_prometheus/sql_caller/active_record.rb, line 58
def model_class
  @model_class ||= Kernel.const_get(@model_class_name)
end
select_hashes(sql, *bindings) click to toggle source
# File lib/pgq_prometheus/sql_caller/active_record.rb, line 62
def select_hashes(sql, *bindings)
  sql = model_class.send :sanitize_sql_array, bindings.unshift(sql) unless bindings.empty?
  result = model_class.connection.select_all(sql)
  result.map do |row|
    row.map { |k, v| [k.to_sym, result.column_types[k].deserialize(v)] }.to_h
  end
end