Sha256: 015f45f1dcd0e366a3b246c27666b3048d2e52d0e7a420a5cd80c2d66178dd27

Contents?: true

Size: 1.93 KB

Versions: 1

Compression:

Stored size: 1.93 KB

Contents

module PgqPrometheus
  module SqlCaller
    class ActiveRecord
      # Simple Sql caller for active record.
      # Usage:
      #
      #   require 'pgq_prometheus'
      #   require 'pgq_prometheus/sql_caller/active_record'
      #   PgqPrometheus::Processor.sql_caller = PgqPrometheus::SqlCaller::ActiveRecord.new('ApplicationRecord')

      # @param model_class_name [Class<Object>,String] class or class name
      def initialize(model_class_name)
        @model_class_name = model_class_name.to_s
      end

      # 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.
      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

      # 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.
      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

      private

      def model_class
        @model_class ||= Kernel.const_get(@model_class_name)
      end

      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
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pgq_prometheus-0.1.0 lib/pgq_prometheus/sql_caller/active_record.rb