gitlab-org--gitlab-foss/lib/gitlab/database/background_migration/batch_metrics.rb

45 lines
1.0 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