Class: Gitlab::Database::Migrations::Observers::TransactionDuration

Inherits:
MigrationObserver
  • Object
show all
Defined in:
lib/gitlab/database/migrations/observers/transaction_duration.rb

Instance Attribute Summary

Attributes inherited from MigrationObserver

#connection, #observation, #output_dir

Instance Method Summary collapse

Methods inherited from MigrationObserver

#initialize

Constructor Details

This class inherits a constructor from Gitlab::Database::Migrations::Observers::MigrationObserver

Instance Method Details

#afterObject



18
19
20
21
22
23
# File 'lib/gitlab/database/migrations/observers/transaction_duration.rb', line 18

def after
  ActiveSupport::Notifications.unsubscribe(@subscriber)
  @writer.pop_all
  @writer.flush
  @file.close
end

#beforeObject



8
9
10
11
12
13
14
15
16
# File 'lib/gitlab/database/migrations/observers/transaction_duration.rb', line 8

def before
  file_path = File.join(output_dir, "transaction-duration.json")
  @file = File.open(file_path, 'wb')
  @writer = Oj::StreamWriter.new(@file, {})
  @writer.push_array
  @subscriber = ActiveSupport::Notifications.subscribe('transaction.active_record') do |*args|
    record_sql_event(*args)
  end
end

#recordObject



25
26
27
# File 'lib/gitlab/database/migrations/observers/transaction_duration.rb', line 25

def record
  # no-op
end

#record_sql_event(_name, started, finished, _unique_id, payload) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/gitlab/database/migrations/observers/transaction_duration.rb', line 29

def record_sql_event(_name, started, finished, _unique_id, payload)
  return if payload[:transaction_type] == :fake_transaction

  @writer.push_value({
                       start_time: started.iso8601(6),
                       end_time: finished.iso8601(6),
                       transaction_type: payload[:transaction_type]
                     })
end