class Sidewatch::Sidekiq

Attributes

namespace[RW]

Public Class Methods

new(config = {}) click to toggle source
# File lib/sidewatch/sidekiq.rb, line 8
def initialize(config = {})
  self.namespace = config.fetch(:namespace){ "Sidekiq" }
  ::Sidekiq.redis = config[:redis].symbolize_keys if config[:redis]
end

Public Instance Methods

global_metrics() click to toggle source
# File lib/sidewatch/sidekiq.rb, line 20
def global_metrics
  stats = sidekiq_stats
  metrics = []
  [:failed, :enqueued, :processed, :retry_size, :scheduled_size].each do |stat|
    name = camelcase(stat)
    value = stats.send(stat)
    metrics << Metric.new(namespace: namespace, name: name, value: value, unit: "Count", dimensions: default_dimensions)
  end
  metrics
end
metrics() click to toggle source
# File lib/sidewatch/sidekiq.rb, line 13
def metrics
  metrics = []
  metrics += global_metrics
  metrics += per_queue_metrics
  metrics
end
per_queue_metrics() click to toggle source
# File lib/sidewatch/sidekiq.rb, line 31
def per_queue_metrics
  metrics = []
  sidekiq_queues.each do |queue|
    dimensions = default_dimensions.merge("QueueName" => queue.name)
    metrics << Metric.new(namespace: namespace, name: "Enqueued", value: queue.size, unit: "Count", dimensions: dimensions)
    metrics << Metric.new(namespace: namespace, name: "Latency", value: queue.latency, unit: "Seconds", dimensions: dimensions)
  end
  metrics
end

Private Instance Methods

camelcase(term) click to toggle source
# File lib/sidewatch/sidekiq.rb, line 66
def camelcase(term)
  string = term.to_s
  string.gsub(/(?:^|_)([a-z\d]*)/){ $1.capitalize }
end
default_dimensions() click to toggle source
# File lib/sidewatch/sidekiq.rb, line 62
def default_dimensions
  { "RedisURI" => redis_uri }
end
redis_uri() click to toggle source
# File lib/sidewatch/sidekiq.rb, line 51
def redis_uri
  # is there a simpler way to get this?
  uri = ::Sidekiq.redis {|redis|
    redis = redis.redis if redis.is_a?(Redis::Namespace)
    redis.client.id
  }
  uri = URI.parse(uri)
  uri.password = "*****" if uri.password
  uri.to_s
end
sidekiq_queues() click to toggle source
# File lib/sidewatch/sidekiq.rb, line 47
def sidekiq_queues
  ::Sidekiq::Queue.all
end
sidekiq_stats() click to toggle source
# File lib/sidewatch/sidekiq.rb, line 43
def sidekiq_stats
  ::Sidekiq::Stats.new
end