class Resque::CloudWatch::Metrics::Metric

Constants

DEFAULT_METRIC_NAMES

Public Class Methods

create(namespace, skip: [], extra: []) click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 14
def create(namespace, skip: [], extra: [])
  @@mutex.synchronize do
    Resque.redis.namespace = namespace
    new(
      Time.now,
      namespace,
      Resque.info,
      !skip.include?(:pending_per_queue) && current_queue_sizes,
      get_previous_processed(namespace),
      skip: skip, extra: extra,
    ).tap do |metric|
      set_previous_processed(namespace, metric.processed)
    end
  end
end
new(time, namespace, info, queue_sizes, previous_processed, skip: [], extra: []) click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 47
def initialize(time, namespace, info, queue_sizes, previous_processed, skip: [], extra: [])
  @time = time
  @namespace = namespace
  @info = info
  @queue_sizes = queue_sizes
  @previous_processed = previous_processed
  @skip = skip
  @extra = extra
end

Private Class Methods

current_queue_sizes() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 32
def current_queue_sizes
  Resque.queues.map { |name| [name, Resque.size(name)] }
end
get_previous_processed(namespace) click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 36
def get_previous_processed(namespace)
  @previous_processed ||= {}
  @previous_processed[namespace]
end
set_previous_processed(namespace, previous_processed) click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 41
def set_previous_processed(namespace, previous_processed)
  @previous_processed ||= {}
  @previous_processed[namespace] = previous_processed
end

Public Instance Methods

failed() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 59
def failed;    @info[:failed];    end
not_working() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 64
def not_working
  [0, workers - working].max
end
pending() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 57
def pending;   @info[:pending];   end
processed() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 58
def processed; @info[:processed]; end
processing() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 68
def processing
  incremental_size_of_processed + working
end
queues() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 60
def queues;    @info[:queues];    end
to_cloudwatch_metric_data() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 72
def to_cloudwatch_metric_data
  metric_data = metric_names.map do |key|
    build_cloudwatch_metric_datum(camelize(key.to_s), public_send(key))
  end

  if @queue_sizes
    metric_data.concat(
      @queue_sizes.map do |name, size|
        build_cloudwatch_metric_datum('Pending', size, Queue: name)
      end
    )
  end

  metric_data
end
workers() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 61
def workers;   @info[:workers];   end
working() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 62
def working;   @info[:working];   end

Private Instance Methods

build_cloudwatch_metric_datum(metric_name, value, dimensions = {}) click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 94
def build_cloudwatch_metric_datum(metric_name, value, dimensions = {})
  {
    metric_name: metric_name,
    dimensions:  default_dimensions.merge(dimensions).to_cloudwatch,
    timestamp:   @time,
    value:       value,
    unit:        'Count',
  }
end
camelize(string) click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 116
def camelize(string)
  string.gsub(/(?:^|_)(.)/) { $1.upcase }
end
default_dimensions() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 104
def default_dimensions
  Dimensions.new(Namespace: @namespace.to_s)
end
incremental_size_of_processed() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 108
def incremental_size_of_processed
  if @previous_processed.nil?
    0
  else
    [0, processed - @previous_processed].max
  end
end
metric_names() click to toggle source
# File lib/resque/cloudwatch/metrics/metric.rb, line 90
def metric_names
  DEFAULT_METRIC_NAMES - @skip + @extra
end