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