Class: Gitlab::Database::Sos::BaseDbStatsHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/database/sos/base_db_stats_handler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection, name, output) ⇒ BaseDbStatsHandler

Returns a new instance of BaseDbStatsHandler.



9
10
11
12
13
# File 'lib/gitlab/database/sos/base_db_stats_handler.rb', line 9

def initialize(connection, name, output)
  @connection = connection
  @name = name
  @output = output
end

Instance Attribute Details

#connectionObject (readonly)

Returns the value of attribute connection.



7
8
9
# File 'lib/gitlab/database/sos/base_db_stats_handler.rb', line 7

def connection
  @connection
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/gitlab/database/sos/base_db_stats_handler.rb', line 7

def name
  @name
end

#outputObject (readonly)

Returns the value of attribute output.



7
8
9
# File 'lib/gitlab/database/sos/base_db_stats_handler.rb', line 7

def output
  @output
end

Instance Method Details

#execute_query(query) ⇒ Object



15
16
17
18
19
20
# File 'lib/gitlab/database/sos/base_db_stats_handler.rb', line 15

def execute_query(query)
  connection.execute(query)
rescue StandardError => e
  Gitlab::AppLogger.error("Error executing on DB:#{name} query:#{query} error message:#{e.message}")
  []
end

#write_to_csv(query_name, result, include_timestamp: false) ⇒ Object



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

def write_to_csv(query_name, result, include_timestamp: false)
  timestamp = Time.zone.now.strftime("%Y%m%d_%H%M%S")

  file_path = if include_timestamp
                File.join(name, query_name.to_s, "#{timestamp}.csv")
              else
                File.join(name, "#{query_name}.csv")
              end

  output.write_file(file_path) do |f|
    CSV.open(f, "w+") do |csv|
      csv << result.fields
      result.each { |row| csv << row.values }
    end
  end
rescue StandardError => e
  Gitlab::AppLogger.error("Error writing CSV for DB:#{name} query:#{query_name} error_message:#{e.message}")
end