Sha256: 8ed440157d660c935b23a241ca27244b5185cd57be948a7b13ab00aacfbe6a9c

Contents?: true

Size: 1.73 KB

Versions: 11

Compression:

Stored size: 1.73 KB

Contents

module GitLab
  module Exporter
    module Database
      # A helper class to collect tuple stats from the database
      #
      # It takes a connection string (e.g. "dbname=test port=5432")
      class TupleStatsCollector < Base
        COLUMNS = %w[relname seq_tup_read idx_tup_fetch n_tup_ins n_tup_upd n_tup_del n_tup_hot_upd n_dead_tup seq_scan]
                  .join(",")
        QUERY   = <<-SQL.freeze
          SELECT #{COLUMNS}
          FROM pg_stat_user_tables
          WHERE relname IN (SELECT tablename FROM pg_tables WHERE tableowner = 'gitlab')
          GROUP BY #{COLUMNS}
        SQL

        def run
          with_connection_pool do |conn|
            conn.exec(QUERY).each.with_object({}) do |row, stats|
              stats[row.delete("relname")] = row
            end
          end
        end
      end

      # Probes the DB specified by opts[:connection_string] for tuple stats, then converts them to metrics
      class TuplesProber
        def initialize(opts, metrics: PrometheusMetrics.new, logger: nil)
          @metrics   = metrics
          @collector = TupleStatsCollector.new(connection_string: opts[:connection_string], logger: logger)
        end

        def probe_db
          result = @collector.run

          result.each do |table_name, tuple_stats|
            tuple_stats.each do |column_name, value|
              next if value.is_a?(Numeric)

              @metrics.add("gitlab_database_stat_table_#{column_name}",
                           value.to_f,
                           table_name: table_name)
            end
          end

          self
        rescue PG::ConnectionBad
          self
        end

        def write_to(target)
          target.write(@metrics.to_s)
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
gitlab-exporter-11.1.0 lib/gitlab_exporter/database/tuple_stats.rb
gitlab-exporter-11.0.1 lib/gitlab_exporter/database/tuple_stats.rb
gitlab-exporter-11.0.0 lib/gitlab_exporter/database/tuple_stats.rb
gitlab-exporter-10.5.0 lib/gitlab_exporter/database/tuple_stats.rb
gitlab-exporter-10.4.0 lib/gitlab_exporter/database/tuple_stats.rb
gitlab-exporter-10.3.0 lib/gitlab_exporter/database/tuple_stats.rb
gitlab-exporter-10.2.0 lib/gitlab_exporter/database/tuple_stats.rb
gitlab-exporter-10.1.0 lib/gitlab_exporter/database/tuple_stats.rb
gitlab-exporter-10.0.0 lib/gitlab_exporter/database/tuple_stats.rb
gitlab-exporter-9.1.0 lib/gitlab_exporter/database/tuple_stats.rb
gitlab-exporter-9.0.0 lib/gitlab_exporter/database/tuple_stats.rb