Sha256: 2fb5af745cb93e67fe3d17c0866d97eaf7698f44d13a8e9e53b938af8d84a54b

Contents?: true

Size: 1.78 KB

Versions: 2

Compression:

Stored size: 1.78 KB

Contents

require "sidekiq"

module Sidewatch
  class Sidekiq

    attr_accessor :namespace

    def initialize(config = {})
      self.namespace = config.fetch(:namespace){ "Sidekiq" }
      ::Sidekiq.redis = config[:redis].symbolize_keys if config[:redis]
    end

    def metrics
      metrics = []
      metrics += global_metrics
      metrics += per_queue_metrics
      metrics
    end

    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

    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

    def sidekiq_stats
      ::Sidekiq::Stats.new
    end

    def sidekiq_queues
      ::Sidekiq::Queue.all
    end

    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

    def default_dimensions
      { "RedisURI" => redis_uri }
    end

    def camelcase(term)
      string = term.to_s
      string.gsub(/(?:^|_)([a-z\d]*)/){ $1.capitalize }
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sidewatch-0.0.4 lib/sidewatch/sidekiq.rb
sidewatch-0.0.3 lib/sidewatch/sidekiq.rb