class Fluent::Plugin::ForwardOutput::FailureDetector

def phi(now)

def phi(now)
  size = @window.size
  return 0.0 if size == 0
  # Calculate weighted moving average
  mean_usec = 0
  fact = 0
  @window.each_with_index {|gap,i|
    mean_usec += gap * (1+i)
    fact += (1+i)
  }
  mean_usec = mean_usec / fact
  # Normalize arrive intervals into 1sec
  mean = (mean_usec.to_f / 1e6) - @heartbeat_interval + 1
  # Calculate phi of the phi accrual failure detector
  t = now - @last - @heartbeat_interval + 1
  phi = PHI_FACTOR * t / mean
  return phi
end