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 |