Sha256: cff18a4268bbb811103cf98c4e594888650bb08ce53fc3ea6b01e3f20fa00e69

Contents?: true

Size: 1.75 KB

Versions: 3

Compression:

Stored size: 1.75 KB

Contents

module Aws
  module Embedded
    module Metrics
      class Logger

        def initialize(sink = Config.config.sink)
          @sink = sink
          @namespace = Config.config.namespace
          @dimensions = Concurrent::Array.new
          @metrics = Concurrent::Array.new
          @properties = Concurrent::Hash.new
        end

        def metrics
          yield(self)
        ensure
          flush
        end

        def flush
          @sink.accept(message) unless empty?
        end

        def benchmark
          value = nil
          seconds = Benchmark.realtime { value = yield }
          milliseconds = (seconds * 1000).to_i
          [value, milliseconds]
        end

        def put_dimension(name, value)
          @dimensions << { name => value }
          self
        end

        def put_metric(name, value, unit = nil)
          @metrics << { 'Name' => name }.tap do |m|
            m['Unit'] = unit if unit
          end
          set_property name, value
        end

        def set_property(name, value)
          @properties[name] = value
          self
        end

        def empty?
          [@dimensions, @metrics, @properties].all?(&:empty?)
        end

        def message
          {
            '_aws' => {
              'Timestamp' => timestamp,
              'CloudWatchMetrics' => [
                {
                  'Namespace' => @namespace,
                  'Dimensions' => [@dimensions.map(&:keys).flatten],
                  'Metrics' => @metrics
                }
              ]
            }
          }.tap do |m|
            @dimensions.each { |dim| m.merge!(dim) }
            m.merge!(@properties)
          end
        end

        def timestamp
          Time.now.strftime('%s%3N').to_i
        end

      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
aws-embedded-metrics-customink-0.6.0 lib/aws-embedded-metrics-customink/logger.rb
aws-embedded-metrics-customink-0.5.0 lib/aws-embedded-metrics-customink/logger.rb
aws-embedded-metrics-customink-0.4.0 lib/aws-embedded-metrics-customink/logger.rb