module MCollective # Class to store stats about the mcollectived, it should live in the PluginManager # so that agents etc can get hold of it and return the stats to callers class RunnerStats def initialize @starttime = Time.now.to_i @validated = 0 @unvalidated = 0 @filtered = 0 @passed = 0 @total = 0 @replies = 0 @ttlexpired = 0 @mutex = Mutex.new end # Records a message that failed TTL checks def ttlexpired Log.debug("Incrementing ttl expired stat") @ttlexpired += 1 end # Records a message that passed the filters def passed Log.debug("Incrementing passed stat") @passed += 1 end # Records a message that didnt pass the filters def filtered Log.debug("Incrementing filtered stat") @filtered += 1 end # Records a message that validated ok def validated Log.debug("Incrementing validated stat") @validated += 1 end def unvalidated Log.debug("Incrementing unvalidated stat") @unvalidated += 1 end # Records receipt of a message def received Log.debug("Incrementing total stat") @total += 1 end # Records sending a message def sent @mutex.synchronize do Log.debug("Incrementing replies stat") @replies += 1 end end # Returns a hash with all stats def to_hash stats = {:validated => @validated, :unvalidated => @unvalidated, :passed => @passed, :filtered => @filtered, :starttime => @starttime, :total => @total, :ttlexpired => @ttlexpired, :replies => @replies} reply = {:stats => stats, :threads => [], :pid => Process.pid, :times => {} } ::Process.times.each_pair{|k,v| k = k.to_sym reply[:times][k] = v } Thread.list.each do |t| reply[:threads] << "#{t.inspect}" end reply[:agents] = Agents.agentlist reply end end end