Class: Honeybadger::Agent::MetricsCollector

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/honeybadger/agent/metrics_collector.rb

Defined Under Namespace

Classes: Chunk

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config, interval = 60, now = now()) ⇒ MetricsCollector

Returns a new instance of MetricsCollector.



24
25
26
27
28
29
30
31
# File 'lib/honeybadger/agent/metrics_collector.rb', line 24

def initialize(config, interval = 60, now = now())
  @id = SecureRandom.uuid
  @config = config
  @interval = interval
  @future = now + interval
  @mutex = Mutex.new
  @metrics = { :timing => {}, :counter => {} }
end

Instance Attribute Details

#idObject (readonly)

Returns the value of attribute id.



33
34
35
# File 'lib/honeybadger/agent/metrics_collector.rb', line 33

def id
  @id
end

Instance Method Details

#as_json(metrics = to_a) ⇒ Object



83
84
85
# File 'lib/honeybadger/agent/metrics_collector.rb', line 83

def as_json(metrics = to_a)
  {metrics: metrics, :environment => config[:env], :hostname => config[:hostname]}
end

#chunk(size) ⇒ Object



77
78
79
80
81
# File 'lib/honeybadger/agent/metrics_collector.rb', line 77

def chunk(size)
  to_a.each_slice(size) do |metrics|
    yield(Chunk.new(id, as_json(metrics)))
  end
end

#flush?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/honeybadger/agent/metrics_collector.rb', line 45

def flush?
  now >= future
end

#increment(name, value) ⇒ Object



41
42
43
# File 'lib/honeybadger/agent/metrics_collector.rb', line 41

def increment(name, value)
  add_metric(name, value, :counter)
end

#sizeObject



49
50
51
52
53
54
55
# File 'lib/honeybadger/agent/metrics_collector.rb', line 49

def size
  mutex.synchronize do
    metrics.reduce(0) do |count, hash|
      count + hash[1].size
    end
  end
end

#timing(name, value) ⇒ Object



37
38
39
# File 'lib/honeybadger/agent/metrics_collector.rb', line 37

def timing(name, value)
  add_metric(name, value, :timing)
end

#to_aObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/honeybadger/agent/metrics_collector.rb', line 57

def to_a
  mutex.synchronize do
    [].tap do |m|
      metrics[:counter].each do |metric, values|
        m << "#{metric} #{values.sum}"
      end
      metrics[:timing].each do |metric, values|
        m << "#{metric}:mean #{values.mean}"
        m << "#{metric}:median #{values.median}"
        m << "#{metric}:percentile_90 #{values.percentile(90)}"
        m << "#{metric}:min #{values.min}"
        m << "#{metric}:max #{values.max}"
        m << "#{metric}:stddev #{values.standard_dev}" if values.count > 1
        m << "#{metric} #{values.count}"
      end
      m.compact!
    end
  end
end

#to_json(*args) ⇒ Object



87
88
89
# File 'lib/honeybadger/agent/metrics_collector.rb', line 87

def to_json(*args)
  as_json.to_json(*args)
end