Module: Gitlab::Database::Sos

Defined in:
lib/gitlab/database/sos.rb,
lib/gitlab/database/sos/output.rb,
lib/gitlab/database/sos/ar_schema_dump.rb,
lib/gitlab/database/sos/db_stats_activity.rb,
lib/gitlab/database/sos/pg_stat_statements.rb,
lib/gitlab/database/sos/platform_config_info.rb,
lib/gitlab/database/sos/base_db_stats_handler.rb,
lib/gitlab/database/sos/db_loop_stats_activity.rb

Defined Under Namespace

Classes: ArSchemaDump, BaseDbStatsHandler, DbLoopStatsActivity, DbStatsActivity, Output, PgStatStatements, PlatformConfigInfo

Constant Summary collapse

DURATION =
5.minutes
SAMPLING_INTERVAL =
3.seconds
SINGLE_TASKS =
[
  Sos::PlatformConfigInfo,
  Sos::ArSchemaDump,
  Sos::DbStatsActivity
].freeze
LONG_RUNNING_TASKS =
[
  Sos::PgStatStatements,
  Sos::DbLoopStatsActivity
].freeze

Class Method Summary collapse

Class Method Details

.run(output_file) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/gitlab/database/sos.rb', line 21

def self.run(output_file)
  Output.writing(output_file, mode: :zip) do |output|
    Gitlab::Database::EachDatabase.each_connection(include_shared: false) do |conn, name|
      SINGLE_TASKS.each do |t|
        t.new(conn, name, output).run
      end
    end

    duration = DURATION.from_now

    while duration.future?
      Gitlab::Database::EachDatabase.each_connection(include_shared: false) do |conn, name|
        LONG_RUNNING_TASKS.each do |t|
          t.new(conn, name, output).run
        end
      end
      sleep(SAMPLING_INTERVAL)
    end
  end
end