class VpsbClient::Metrics::IntervalBuilder
Constants
- VALID_METRIC_KEYS
Public Class Methods
new(sar_path, timing_path, pole_time, interval_length)
click to toggle source
# 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
Public Instance Methods
each() { |convert_to_metric(timing_interval, sar_interval)| ... }
click to toggle source
# 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
Private Instance Methods
convert_to_metric(timing_interval, sar_interval)
click to toggle source
# File lib/vpsb_client/metrics/interval_builder.rb, line 55 def convert_to_metric(timing_interval, sar_interval) interval = timing_interval.to_hash.merge(sar_interval) interval[:duration_seconds] = timing_interval.length interval[:started_at] = timing_interval.start_time pxx_total_ms = timing_interval[:pxx_total_ms] interval[:p50_total_ms] = pxx_total_ms[50] interval[:p75_total_ms] = pxx_total_ms[75] interval[:p95_total_ms] = pxx_total_ms[95] interval[:p99_total_ms] = pxx_total_ms[99] pxx_iowait = sar_interval[:pxx_iowait] interval[:p75_iowait_pct] = pxx_iowait[75] interval[:p95_iowait_pct] = pxx_iowait[95] interval[:p99_iowait_pct] = pxx_iowait[99] pxx_cpusteal = sar_interval[:pxx_cpusteal] interval[:p75_cpusteal_pct] = pxx_cpusteal[75] interval[:p95_cpusteal_pct] = pxx_cpusteal[95] interval[:p99_cpusteal_pct] = pxx_cpusteal[99] pxx_cpuidle = sar_interval[:pxx_cpuidle] interval[:p75_cpuidle_pct] = 100.0 - pxx_cpuidle[75] interval[:p95_cpuidle_pct] = 100.0 - pxx_cpuidle[95] interval[:p99_cpuidle_pct] = 100.0 - pxx_cpuidle[99] interval.select! { |k| VALID_METRIC_KEYS.include?(k) } end