Sha256: 436b500ff3b86b42bcade3ee286753f261a2c1416fcb0fbe2e53c6e190b1ef2f

Contents?: true

Size: 1.52 KB

Versions: 4

Compression:

Stored size: 1.52 KB

Contents

module Postgres
  module Vacuum
    module Jobs
      class MonitorJob

        AUTOVACUUM_QUERY_EVENT = 'AutoVacuumLagging'.freeze
        LONG_QUERIES = 'LongQueries'.freeze

        def perform(*)
          ActiveRecord::Base.connection.execute(Postgres::Vacuum::Monitor::Query.long_running_queries).each do |row|
            reporter_class.report_event(
              LONG_QUERIES,
              start_time: row['xact_start'],
              running_time: row['seconds'],
              application_name: row['application_name'],
              query: row['query']
            )
          end

          ActiveRecord::Base.connection.execute(Postgres::Vacuum::Monitor::Query.tables_eligible_vacuuming).each do |row|
            reporter_class.report_event(
              AUTOVACUUM_QUERY_EVENT,
              table: row['relation'],
              table_size: row['table_size'],
              dead_tuples: row['dead_tuples'].to_i,
              tuples_over_limit: row['dead_tuples'].to_i - row['autovacuum_vacuum_tuples'].to_i
            )
          end

          true
        end

        def reporter_class
          return @reporter_class_name if @reporter_class_name

          @reporter_class_name = Postgres::Vacuum::Monitor.configuration.monitor_reporter_class_name&.safe_constantize
          raise ConfigurationError.new('Missing or invalid report class name. Check your configuration') if @reporter_class_name.nil?

          @reporter_class_name
        end

        ConfigurationError = Class.new(StandardError)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
postgres-vacuum-monitor-0.3.1 lib/postgres/vacuum/jobs/monitor_job.rb
postgres-vacuum-monitor-0.3.0 lib/postgres/vacuum/jobs/monitor_job.rb
postgres-vacuum-monitor-0.2.3 lib/postgres/vacuum/jobs/monitor_job.rb
postgres-vacuum-monitor-0.2.2 lib/postgres/vacuum/jobs/monitor_job.rb