class Symian::PerformanceAnalyzer

Public Class Methods

new(config) click to toggle source
# File lib/symian/performance_analyzer.rb, line 10
def initialize(config)
  @warmup_threshold = config.start_time + config.warmup_duration
end

Public Instance Methods

calculate_kpis(trace) click to toggle source
# File lib/symian/performance_analyzer.rb, line 14
def calculate_kpis(trace)
  raise ArgumentError, 'Argument must be a TraceCollector' unless TraceCollector === trace

  kpis = {}

  # these metrics are considered as kpis
  kpis[:all_incidents]        = trace.incidents
  kpis[:incidents_considered] = 0
  kpis[:closed_incidents]     = 0
  kpis[:mean_ttr]             = 0
  kpis[:max_ttr]              = 0
  kpis[:mean_waiting_time]    = 0

  max_ttr = 0
  ttr_sum = 0
  wt_sum  = 0
  trace.with_incidents do |i|

    next if @warmup_threshold and i.arrival_time < @warmup_threshold

    kpis[:incidents_considered] += 1

    if i.closed?
      kpis[:closed_incidents] += 1
      ttr = i.total_work_time
      ttr_sum += ttr
      wt_sum  += i.total_queue_time
      max_ttr = ttr if ttr > max_ttr
    end

  end

  kpis[:max_ttr] = max_ttr
  if kpis[:closed_incidents] == 0
    kpis[:mean_ttr]          = Float::MAX
    kpis[:mean_waiting_time] = Float::MAX
  else
    kpis[:mean_ttr]          = ttr_sum / kpis[:closed_incidents]
    kpis[:mean_waiting_time] = wt_sum / kpis[:closed_incidents]
  end

  # return kpis
  kpis
end