Class: Atatus::Metrics::Registry Private
- Inherits:
-
Object
- Object
- Atatus::Metrics::Registry
- Includes:
- Logging
- Defined in:
- lib/atatus/metrics.rb
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Constant Summary
Constants included from Logging
Logging::LEVELS, Logging::PREFIX
Instance Attribute Summary collapse
- #callback ⇒ Object readonly private
- #config ⇒ Object readonly private
- #sets ⇒ Object readonly private
Instance Method Summary collapse
- #collect ⇒ Object private
- #collect_and_send ⇒ Object private
- #define_sets ⇒ Object private
- #get(key) ⇒ Object private
- #handle_forking! ⇒ Object private
-
#initialize(config, &block) ⇒ Registry
constructor
private
A new instance of Registry.
- #running? ⇒ Boolean private
- #start ⇒ Object private
- #stop ⇒ Object private
Methods included from Logging
#debug, #error, #fatal, #info, #warn
Constructor Details
#initialize(config, &block) ⇒ Registry
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Registry.
39 40 41 42 43 |
# File 'lib/atatus/metrics.rb', line 39 def initialize(config, &block) @config = config @callback = block @sets = nil end |
Instance Attribute Details
#callback ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
45 46 47 |
# File 'lib/atatus/metrics.rb', line 45 def callback @callback end |
#config ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
45 46 47 |
# File 'lib/atatus/metrics.rb', line 45 def config @config end |
#sets ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
45 46 47 |
# File 'lib/atatus/metrics.rb', line 45 def sets @sets end |
Instance Method Details
#collect ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
113 114 115 116 117 118 119 |
# File 'lib/atatus/metrics.rb', line 113 def collect sets.each_value.each_with_object([]) do |set, arr| samples = set.collect next unless samples arr.concat(samples) end end |
#collect_and_send ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
104 105 106 107 108 109 110 111 |
# File 'lib/atatus/metrics.rb', line 104 def collect_and_send return unless @config.recording? metricsets = collect metricsets.compact! metricsets.each do |m| callback.call(m) end end |
#define_sets ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/atatus/metrics.rb', line 121 def define_sets # Only set the @sets once, in case we stop # and start again. return unless @sets.nil? sets = { system: CpuMemSet, vm: VMSet, breakdown: BreakdownSet, transaction: TransactionSet } if defined?(JVMSet) debug "Enabling JVM metrics collection" sets[:jvm] = JVMSet end @sets = sets.each_with_object({}) do |(key, kls), _sets_| debug "Adding metrics collector '#{kls}'" _sets_[key] = kls.new(config) end end |
#get(key) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
100 101 102 |
# File 'lib/atatus/metrics.rb', line 100 def get(key) sets.fetch(key) end |
#handle_forking! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/atatus/metrics.rb', line 88 def handle_forking! # Note that ideally we would be able to check if the @timer_task died # and restart it. You can't simply check @timer_task.running? because # it will only return the state of the TimerTask, not whether the # internal thread used to manage the execution interval has died. # This is a limitation of the Concurrent::TimerTask object. # Therefore, our only option when forked is to stop and start. # ~estolfo stop start end |
#running? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
84 85 86 |
# File 'lib/atatus/metrics.rb', line 84 def running? !!@running end |
#start ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/atatus/metrics.rb', line 47 def start unless config.collect_metrics? debug 'Skipping metrics' return end define_sets debug 'Starting metrics' @timer_task = Concurrent::TimerTask.execute( run_now: true, execution_interval: config.metrics_interval ) do begin debug 'Collecting metrics' collect_and_send true rescue StandardError => e error 'Error while collecting metrics: %e', e.inspect debug { e.backtrace.join("\n") } false end end @running = true end |
#stop ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
75 76 77 78 79 80 81 82 |
# File 'lib/atatus/metrics.rb', line 75 def stop return unless running? debug 'Stopping metrics' @timer_task.shutdown @running = false end |