Class: VpsbClient::Metrics::IntervalBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/vpsb_client/metrics/interval_builder.rb

Defined Under Namespace

Classes: FileNotFound

Constant Summary collapse

VALID_METRIC_KEYS =
[ :trial_id, :started_at, :duration_seconds, :num_requests, :resptime_total_ms, :resptime_db_ms, :resptime_view_ms, :cpu_idle, :cpu_steal, :iowait, :p50_total_ms, :p75_total_ms, :p95_total_ms, :p99_total_ms, :p75_iowait_pct, :p95_iowait_pct, :p99_iowait_pct,:p75_cpusteal_pct, :p95_cpusteal_pct, :p99_cpusteal_pct, :p75_cpuidle_pct, :p95_cpuidle_pct, :p99_cpuidle_pct ]

Instance Method Summary collapse

Constructor Details

#initialize(sar_path, timing_path, pole_time, interval_length) ⇒ IntervalBuilder

Returns a new instance of IntervalBuilder.



11
12
13
14
15
16
# File 'lib/vpsb_client/metrics/interval_builder.rb', line 11

def initialize(sar_path, timing_path, pole_time, interval_length)
  @sar_path = sar_path
  @timing_path = timing_path
  @pole_time = pole_time
  @interval_length = interval_length
end

Instance Method Details

#each(&block) ⇒ Object

Raises:



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/vpsb_client/metrics/interval_builder.rb', line 18

def each(&block)
  return enum_for(:each) unless block_given?

  sar_filenames = Dir.glob("#{@sar_path}/formatted_sa*")
  timing_filenames = Dir.glob("#{@timing_path}/timings.log*")

  sar_filenames.reject!    { |f| f =~ /\.gz$/ }
  timing_filenames.reject! { |f| f =~ /\.gz$/ }

  raise FileNotFound, "No file matching #{@sar_path}/formatted_sa*" unless sar_filenames.any?
  raise FileNotFound, "No file matching #{@timing_path}/timings.log*" unless timing_filenames.any?

  builder_options = { offset_by_start_time: @pole_time }

  sar_files = LogfileInterval::LogfileSet.new(sar_filenames, Datafiles::FormattedSarLogParser, :desc)
  timing_files = LogfileInterval::LogfileSet.new(timing_filenames, Datafiles::TimingLogParser, :desc)

  begin
    sar_builder = LogfileInterval::IntervalBuilder.new(sar_files, Datafiles::FormattedSarLogParser, @interval_length, builder_options)
    timing_builder = LogfileInterval::IntervalBuilder.new(timing_files, Datafiles::TimingLogParser, @interval_length, builder_options)

    sar_enum = sar_builder.each_interval
    timing_enum = timing_builder.each_interval
    while(timing_interval = timing_enum.next) do
      while(sar_interval = sar_enum.next) do
        break if sar_interval.start_time == timing_interval.start_time
        raise "sar_interval older than timing_interval: #{sar_interval.start_time} > #{timing_interval.start_time}" if sar_interval.start_time > timing_interval.start_time
      end

      yield convert_to_metric(timing_interval, sar_interval)
    end
  rescue StopIteration
  end
end