class ServerMetrics::MultiCollector
Public Instance Methods
counter(bundle_name, name, value, options = {}, &block)
click to toggle source
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)
# File lib/server_metrics/multi_collector.rb, line 54 def counter(bundle_name, name, value, options = {}, &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 options[: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': #{options[:per].inspect}" end if options[:round] result = (result * (10 ** options[:round])).round / (10 ** options[: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)
click to toggle source
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")
# 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)
click to toggle source
just like the memory function, “remember” takes an additional argument to partition memory by bundle name
# 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)
click to toggle source
report(“/dev/desk2”, :key=>value)
# File lib/server_metrics/multi_collector.rb, line 21 def report(bundle_name, values) @data[bundle_name] ||= {} @data[bundle_name].merge!(values) end