Module: Mxrb::Oql::WorkloadBaseline

Defined in:
lib/mxrb/oql/workload_baseline.rb

Overview

Serializable workload snapshot and deterministic regression comparison.

Constant Summary collapse

METRICS =
%w[total_time_ms mean_time_ms io_time_ms temp_writes rows].freeze

Class Method Summary collapse

Class Method Details

.compare(report, baseline) ⇒ Object



36
37
38
39
40
# File 'lib/mxrb/oql/workload_baseline.rb', line 36

def compare(report, baseline)
  previous = load(baseline).fetch('queries')
  deltas = report.queries.flat_map { query_deltas(_1, previous[_1.query_id.to_s]) }
  WorkloadComparison.new(deltas.freeze)
end

.dump(report) ⇒ Object



20
21
22
23
24
25
# File 'lib/mxrb/oql/workload_baseline.rb', line 20

def dump(report)
  JSON.pretty_generate(
    version: 1, engine: report.engine, captured_at: Time.now.utc.iso8601,
    queries: report.queries.to_h { [_1.query_id.to_s, _1.to_h] }
  ) << "\n"
end

.load(source) ⇒ Object



27
28
29
30
31
32
33
34
# File 'lib/mxrb/oql/workload_baseline.rb', line 27

def load(source)
  payload = source.is_a?(Hash) ? source : JSON.parse(File.read(source))
  raise ArgumentError, 'unsupported workload baseline version' unless payload['version'] == 1

  payload
rescue JSON::ParserError, Errno::ENOENT => e
  raise ArgumentError, "cannot read workload baseline: #{e.message}"
end