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 collapse
- TIMEOUT_INTERVAL =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
seconds
5
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
- #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.
37 38 39 40 |
# File 'lib/atatus/metrics.rb', line 37 def initialize(config, &block) @config = config @callback = block 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.
42 43 44 |
# File 'lib/atatus/metrics.rb', line 42 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.
42 43 44 |
# File 'lib/atatus/metrics.rb', line 42 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.
42 43 44 |
# File 'lib/atatus/metrics.rb', line 42 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.
120 121 122 123 124 125 126 |
# File 'lib/atatus/metrics.rb', line 120 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.
111 112 113 114 115 116 117 118 |
# File 'lib/atatus/metrics.rb', line 111 def collect_and_send return unless @config.recording? metricsets = collect metricsets.compact! metricsets.each do |m| callback.call(m) 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.
107 108 109 |
# File 'lib/atatus/metrics.rb', line 107 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.
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/atatus/metrics.rb', line 95 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.
91 92 93 |
# File 'lib/atatus/metrics.rb', line 91 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.
43 44 45 46 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 74 75 76 77 78 79 80 |
# File 'lib/atatus/metrics.rb', line 43 def start unless config.collect_metrics? debug 'Skipping metrics' return end debug 'Starting metrics' # Only set the @sets once, in case we stop # and start again. @sets ||= { system: CpuMemSet, # vm: VMSet, breakdown: BreakdownSet, transaction: TransactionSet }.each_with_object({}) do |(key, kls), sets| debug "Adding metrics collector '#{kls}'" sets[key] = kls.new(config) end @timer_task = Concurrent::TimerTask.execute( run_now: true, execution_interval: config.metrics_interval, timeout_interval: TIMEOUT_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.
82 83 84 85 86 87 88 89 |
# File 'lib/atatus/metrics.rb', line 82 def stop return unless running? debug 'Stopping metrics' @timer_task.shutdown @running = false end |