Parent

Class/Module Index [+]

Quicksearch

MCollective::RPC::Stats

Class to wrap all the stats and to keep track of some timings

Attributes

blocktime[RW]
discovered[RW]
discovered_nodes[RW]
discoverytime[RW]
failcount[RW]
noresponsefrom[RW]
okcount[RW]
responses[RW]
responsesfrom[RW]
starttime[RW]
totaltime[RW]

Public Instance Methods

[](key) click to toggle source

Fake hash access to keep things backward compatible

# File lib/mcollective/rpc/stats.rb, line 44
def [](key)
  to_hash[key]
rescue
  nil
end
client_stats=(stats) click to toggle source

Re-initializes the object with stats from the basic client

# File lib/mcollective/rpc/stats.rb, line 65
def client_stats=(stats)
  @noresponsefrom = stats[:noresponsefrom]
  @responses = stats[:responses]
  @starttime = stats[:starttime]
  @blocktime = stats[:blocktime]
  @totaltime = stats[:totaltime]
  @discoverytime = stats[:discoverytime] if @discoverytime == 0
end
discovered_agents(agents) click to toggle source

Update discovered and discovered_nodes based on discovery results

# File lib/mcollective/rpc/stats.rb, line 102
def discovered_agents(agents)
  @discovered_nodes = agents
  @discovered = agents.size
end
fail() click to toggle source

increment the count of failed hosts

# File lib/mcollective/rpc/stats.rb, line 58
def fail
  @failcount += 1
rescue
  @failcount = 1
end
finish_request() click to toggle source

Helper to calculate total time etc

# File lib/mcollective/rpc/stats.rb, line 108
def finish_request
  @totaltime = @blocktime + @discoverytime

  # figures out who we had no responses from
  dhosts = @discovered_nodes.clone
  @responsesfrom.each {|r| dhosts.delete(r)}
  @noresponsefrom = dhosts
rescue
  @totaltime = 0
  @noresponsefrom = []
end
no_response_report() click to toggle source

Returns a blob of text indicating what nodes did not respond

# File lib/mcollective/rpc/stats.rb, line 167
def no_response_report
  result_text = []

  if @noresponsefrom.size > 0
    result_text << Helpers.colorize(:red, "\nNo response from:\n")

    @noresponsefrom.each_with_index do |c,i|
      result_text << "" if i % 4 == 0
      result_text << "%30s" % [c]
    end

    result_text << ""
  end

  result_text.join("\n")
end
node_responded(node) click to toggle source

Helper to keep track of who we received responses from

# File lib/mcollective/rpc/stats.rb, line 121
def node_responded(node)
  @responsesfrom << node
rescue
  @responsesfrom = [node]
end
ok() click to toggle source

increment the count of ok hosts

# File lib/mcollective/rpc/stats.rb, line 51
def ok
  @okcount += 1
rescue
  @okcount = 1
end
report(caption = "rpc stats", verbose = false) click to toggle source

Returns a blob of text representing the request status based on the stats contained in this class

# File lib/mcollective/rpc/stats.rb, line 129
def report(caption = "rpc stats", verbose = false)
  result_text = []

  if verbose
    result_text << Helpers.colorize(:yellow, "---- #{caption} ----")

    if @discovered
      @responses < @discovered ? color = :red : color = :reset
      result_text << "           Nodes: %s / %s" % [ Helpers.colorize(color, @discovered), Helpers.colorize(color, @responses) ]
    else
      result_text << "           Nodes: #{@responses}"
    end

    @failcount < 0 ? color = :red : color = :reset

    result_text << "     Pass / Fail: %s / %s" % [Helpers.colorize(color, @okcount), Helpers.colorize(color, @failcount) ]
    result_text << "      Start Time: %s"      % [Time.at(@starttime)]
    result_text << "  Discovery Time: %.2fms"  % [@discoverytime * 1000]
    result_text << "      Agent Time: %.2fms"  % [@blocktime * 1000]
    result_text << "      Total Time: %.2fms"  % [@totaltime * 1000]
  else
    if @discovered
      @responses < @discovered ? color = :red : color = :green

      result_text << "Finished processing %s / %s hosts in %.2f ms" % [Helpers.colorize(color, @responses), Helpers.colorize(color, @discovered), @blocktime * 1000]
    else
      result_text << "Finished processing %s hosts in %.2f ms" % [Helpers.colorize(:bold, @responses), @blocktime * 1000]
    end
  end

  if no_response_report != ""
    result_text << "" << no_response_report
  end

  result_text.join("\n")
end
reset() click to toggle source

Resets stats, if discovery time is set we keep it as it was

# File lib/mcollective/rpc/stats.rb, line 13
def reset
  @noresponsefrom = []
  @responsesfrom = []
  @responses = 0
  @starttime = Time.now.to_f
  @discoverytime = 0 unless @discoverytime
  @blocktime = 0
  @totaltime = 0
  @discovered = 0
  @discovered_nodes = []
  @okcount = 0
  @failcount = 0
  @noresponsefrom = []
end
time_block_execution(action) click to toggle source

helper to time block execution time

# File lib/mcollective/rpc/stats.rb, line 88
def time_block_execution(action)
  if action == :start
    @block_start = Time.now.to_f
  elsif action == :end
    @blocktime += Time.now.to_f - @block_start
  else
    raise("Uknown block action #{action}")
  end
rescue
  @blocktime = 0
end
time_discovery(action) click to toggle source

Utility to time discovery from :start to :end

# File lib/mcollective/rpc/stats.rb, line 75
def time_discovery(action)
  if action == :start
    @discovery_start = Time.now.to_f
  elsif action == :end
    @discoverytime = Time.now.to_f - @discovery_start
  else
    raise("Uknown discovery action #{action}")
  end
rescue
  @discoverytime = 0
end
to_hash() click to toggle source

returns a hash of our stats

# File lib/mcollective/rpc/stats.rb, line 29
def to_hash
  {:noresponsefrom   => @noresponsefrom,
   :starttime        => @starttime,
   :discoverytime    => @discoverytime,
   :blocktime        => @blocktime,
   :responses        => @responses,
   :totaltime        => @totaltime,
   :discovered       => @discovered,
   :discovered_nodes => @discovered_nodes,
   :noresponsefrom   => @noresponsefrom,
   :okcount          => @okcount,
   :failcount        => @failcount}
end

Public Class Methods

new() click to toggle source
# File lib/mcollective/rpc/stats.rb, line 8
def initialize
  reset
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.