class Alephant::Logger::CloudWatch

Attributes

cloudwatch[R]
defaults[R]
namespace[R]

Public Class Methods

new(opts) click to toggle source
# File lib/alephant/logger/cloudwatch.rb, line 6
def initialize(opts)
  @cloudwatch = Aws::CloudWatch::Client.new
  @defaults   = process_defaults opts
end

Public Instance Methods

metric(name, opts={}) click to toggle source
# File lib/alephant/logger/cloudwatch.rb, line 11
def metric(name, opts={})
  signature = [name] + opts.values_at(:value, :unit, :dimensions)
  send_metric(*signature)
end

Private Instance Methods

parse(dimensions) click to toggle source
# File lib/alephant/logger/cloudwatch.rb, line 30
def parse(dimensions)
  dimensions.map do |name, value|
    {
      "name"  => name.to_s,
      "value" => value
    }
  end
end
preset_defaults() click to toggle source
# File lib/alephant/logger/cloudwatch.rb, line 26
def preset_defaults
  { :unit => "Count", :value => 1, :dimensions => {} }
end
process_defaults(opts) click to toggle source
# File lib/alephant/logger/cloudwatch.rb, line 20
def process_defaults(opts)
  preset_defaults.reduce({}) do |acc, (key, value)|
    acc.tap { |h| h[key] = opts.fetch(key, value) }
  end.merge :namespace => opts.fetch(:namespace)
end
send_metric(name, value, unit, dimensions) click to toggle source
# File lib/alephant/logger/cloudwatch.rb, line 39
def send_metric(name, value, unit, dimensions)
  Thread.new do
    cloudwatch.put_metric_data(
      :namespace   => defaults[:namespace],
      :metric_data => [{
        :metric_name => name,
        :value       => value || defaults[:value],
        :unit        => unit || defaults[:unit],
        :dimensions  => parse(dimensions || defaults[:dimensions])
      }]
    )
  end
end