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