Class: ServerMetrics::MultiCollector
- Defined in:
- lib/server_metrics/multi_collector.rb
Instance Attribute Summary
Attributes inherited from Collector
Instance Method Summary collapse
-
#counter(bundle_name, name, value, options = {}, &block) ⇒ Object
counters are also partitioned by bundle name.
-
#memory(bundle_name, name) ⇒ Object
for MultiCollector, Memory takes an additional argument specifying the sub-hash (bundle) in memory.
-
#remember(bundle_name, hash) ⇒ Object
just like the memory function, “remember” takes an additional argument to partition memory by bundle name.
-
#report(bundle_name, values) ⇒ Object
report(“/dev/desk2”, :key=>value).
Methods inherited from Collector
#convert_to_mb, from_hash, #initialize, #linux?, #normalize_key, #option, #osx?, #run, #to_hash
Constructor Details
This class inherits a constructor from ServerMetrics::Collector
Instance Method Details
#counter(bundle_name, name, value, options = {}, &block) ⇒ Object
counters are also partitioned by bundle name
counter("/dev/desk2", :rkbps, stats['rsect'] / 2, :per => :second)
counter("/dev/desk2", :rpm, request_counter, :per => :minute)
counter("/dev/desk2", :swap_ins, vmstat['pswpin'], :per => :second, :round => true)
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 81 82 83 84 85 86 87 |
# File 'lib/server_metrics/multi_collector.rb', line 54 def counter(bundle_name, name, value, = {}, &block) current_time = Time.now if data = memory(bundle_name, "_counter_#{name}") last_time, last_value = data[:time], data[:value] elapsed_seconds = current_time - last_time # We won't log it if the value has wrapped or enough time hasn't # elapsed if value >= last_value && elapsed_seconds >= 1 if block result = block.call(last_value, value) else result = value - last_value end case [:per] when :second, 'second' result = result / elapsed_seconds.to_f when :minute, 'minute' result = result / elapsed_seconds.to_f * 60.0 else raise "Unknown option for ':per': #{[:per].inspect}" end if [:round] result = (result * (10 ** [:round])).round / (10 ** [:round]).to_f end report(bundle_name, name => result) end end remember(bundle_name, "_counter_#{name}" => {:time => current_time, :value => value}) end |
#memory(bundle_name, name) ⇒ Object
for MultiCollector, Memory takes an additional argument specifying the sub-hash (bundle) in memory. The bundle name corresponds to the disk/network/whatever we’re storing memory for.
memory("/dev/desk2", :no_track)
memory.delete("/dev/desk2",:no_track)
memory.clear("/dev/desk2")
33 34 35 36 37 38 39 40 |
# File 'lib/server_metrics/multi_collector.rb', line 33 def memory(bundle_name, name) @memory[bundle_name] ||= {} if name.nil? @memory[bundle_name] else @memory[bundle_name][name] || @memory[name.is_a?(String) ? name.to_sym : String(name)] end end |
#remember(bundle_name, hash) ⇒ Object
just like the memory function, “remember” takes an additional argument to partition memory by bundle name
43 44 45 46 |
# File 'lib/server_metrics/multi_collector.rb', line 43 def remember(bundle_name, hash) @memory[bundle_name] ||= {} @memory[bundle_name].merge!(hash) end |
#report(bundle_name, values) ⇒ Object
report(“/dev/desk2”, :key=>value)
21 22 23 24 |
# File 'lib/server_metrics/multi_collector.rb', line 21 def report(bundle_name, values) @data[bundle_name] ||= {} @data[bundle_name].merge!(values) end |