class Peek::Views::Dalli

Public Class Methods

new(options = {}) click to toggle source
# File lib/peek/views/dalli.rb, line 6
def initialize(options = {})
  @duration = Concurrent::AtomicReference.new(0)
  @calls    = Concurrent::AtomicReference.new(0)

  @reads  = Concurrent::AtomicReference.new(0)
  @misses = Concurrent::AtomicReference.new(0)
  @writes = Concurrent::AtomicReference.new(0)
  @others = Concurrent::AtomicReference.new(0)

  setup_subscribers
end

Public Instance Methods

context() click to toggle source
# File lib/peek/views/dalli.rb, line 27
def context
  {
    :reads  => @reads.value,
    :misses => @misses.value,
    :writes => @writes.value,
    :others => @others.value,
  }
end
formatted_duration() click to toggle source
# File lib/peek/views/dalli.rb, line 18
def formatted_duration
  ms = @duration.value * 1000
  if ms >= 1000
    "%.2fs" % (ms / 1e3)
  else
    "%.0fms" % ms
  end
end
results() click to toggle source
# File lib/peek/views/dalli.rb, line 36
def results
  {
    :duration => formatted_duration,
    :calls    => @calls.value,
  }
end

Private Instance Methods

setup_subscribers() click to toggle source
# File lib/peek/views/dalli.rb, line 45
def setup_subscribers
  # Reset each counter when a new request starts
  before_request do
    @duration.value = 0
    @calls.value    = 0

    @reads.value  = 0
    @misses.value = 0
    @writes.value = 0
    @others.value = 0
  end

  subscribe(/cache_(.*).active_support/) do |name, start, finish, id, payload|
    case name
    when 'cache_read.active_support'
      @reads.update { |value| value + 1 }
    when 'cache_miss.active_support'
      @misses.update { |value| value + 1 }
    when 'cache_write.active_support'
      @writes.update { |value| value + 1 }
    else
      @others.update { |value| value + 1 }
    end

    duration = (finish - start)
    @duration.update { |value| value + duration }
    @calls.update { |value| value + 1 }
  end
end