44 lines
1 KiB
Ruby
44 lines
1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Database
|
|
module BackgroundMigration
|
|
class BatchMetrics
|
|
attr_reader :timings
|
|
attr_reader :affected_rows
|
|
|
|
def initialize
|
|
@timings = {}
|
|
@affected_rows = {}
|
|
end
|
|
|
|
def time_operation(label, &blk)
|
|
instrument_operation(label, instrument_affected_rows: false, &blk)
|
|
end
|
|
|
|
def instrument_operation(label, instrument_affected_rows: true)
|
|
start_time = monotonic_time
|
|
|
|
count = yield
|
|
|
|
timings_for_label(label) << monotonic_time - start_time
|
|
affected_rows_for_label(label) << count if instrument_affected_rows && count.is_a?(Integer)
|
|
end
|
|
|
|
private
|
|
|
|
def timings_for_label(label)
|
|
timings[label] ||= []
|
|
end
|
|
|
|
def affected_rows_for_label(label)
|
|
affected_rows[label] ||= []
|
|
end
|
|
|
|
def monotonic_time
|
|
Gitlab::Metrics::System.monotonic_time
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|