Sha256: d8a7ada83843ad03470b1aa995fc214124c540191b561211eea02deee495df83

Contents?: true

Size: 1.73 KB

Versions: 5

Compression:

Stored size: 1.73 KB

Contents

require 'net/http'

module PassengerMetrics
  class Cloudwatch
    DEFAULT_NAMESPACE = "Passenger"
    DEFAULT_METRIC_NAME = "MetricName"
    DEFAULT_DIMENSION_NAME = "InstanceId"
    DEFAULT_DIMENSION_VALUE = "InstanceId"

    METRIC_UNITS = {
      nil => "None",
      :count => "Count"
    }

    attr_accessor :metric

    def initialize(metric = nil)
      self.metric = metric
    end

    def put
      client.put_metric_data(put_metric_data_payload)
    end

    private

    def put_metric_data_payload
      {:namespace => namespace, :metric_data => metric_data}
    end

    def metric_data
      [
        {
          :metric_name => metric_name,
          :dimensions => dimensions,
          :timestamp => timestamp,
          :value => value,
          :unit => unit
        }
      ]
    end

    def namespace
      ENV["AWS_CLOUDWATCH_NAMESPACE"] || DEFAULT_NAMESPACE
    end

    def metric_name
      metric.metric_name || ENV["AWS_CLOUDWATCH_METRIC_NAME"] || DEFAULT_METRIC_NAME
    end

    def dimension_name
      ENV["AWS_CLOUDWATCH_DIMENSION_NAME"] || DEFAULT_DIMENSION_NAME
    end

    def dimension_value
      ENV["AWS_CLOUDWATCH_DIMENSION_VALUE"] || instance_id || DEFAULT_DIMENSION_VALUE
    end

    def dimensions
      (ENV["AWS_CLOUDWATCH_DIMENSIONS"] && JSON.parse(ENV["AWS_CLOUDWATCH_DIMENSIONS"])) || default_dimensions
    end

    def default_dimensions
      [{:name => dimension_name, :value => dimension_value}]
    end

    def timestamp
      Time.now
    end

    def value
      metric.value
    end

    def unit
      METRIC_UNITS[metric.unit]
    end

    def client
      @client ||= ::Aws::CloudWatch::Client.new region: 'us-east-1'
    end

    def instance_id
      PassengerMetrics.instance_id
    end  
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
passenger-metrics-0.0.7 lib/passenger-metrics/cloudwatch.rb
passenger-metrics-0.0.6 lib/passenger-metrics/cloudwatch.rb
passenger-metrics-0.0.5 lib/passenger-metrics/cloudwatch.rb
passenger-metrics-0.0.4 lib/passenger-metrics/cloudwatch.rb
passenger-metrics-0.0.3 lib/passenger-metrics/cloudwatch.rb