class DRbDump::Statistics

Collects and displays statistics on captured packets.

Attributes

drb_exceptions_raised[RW]

Number of DRb exceptions raised

drb_messages_sent[RW]

Number of DRb messages sent

drb_packet_count[RW]

Number of DRb packets seen

drb_results_received[RW]

Number of DRb results received

last_peer_send[RW]

Records the last timestamp for a message sent between peers

last_sent_message[RW]

Records the last message sent between peers

message_allocations[RW]

Records statistics about allocations required to send a message. The outer key is the message name while the inner key is the argument count (including block).

message_latencies[RW]

Records statistics about latencies for sent messages. The outer key is the message name while the inner key is the argument count (including block).

The recorded latency is from the first packet in the message-send to the last packet in the message result.

peer_latencies[RW]

Records statistics about latencies for messages sent between peers

rinda_packet_count[RW]

Number of Rinda packets seen

total_packet_count[RW]

Number of packets seen, including non-DRb traffic

Public Instance Methods

add_message_send(message) click to toggle source

Adds information from message

# File lib/drbdump/statistics.rb, line 95
def add_message_send message
  @drb_messages_sent += 1

  msg  = message.message
  argc = message.argument_count

  source      = message.source
  destination = message.destination

  @last_peer_send[source][destination] = message.timestamp
  @last_sent_message[source][destination] = msg, argc, message.allocations
end
add_result(result) click to toggle source

Adds information from result

# File lib/drbdump/statistics.rb, line 111
def add_result result
  source      = result.source
  destination = result.destination

  @drb_results_received += 1
  @drb_exceptions_raised += 1 unless result.status

  sent_timestamp = @last_peer_send[destination].delete source
  message, argc, allocations = @last_sent_message[destination].delete source

  return unless sent_timestamp

  latency = result.timestamp - sent_timestamp

  @peer_latencies[destination][source].add latency
  @message_latencies[message][argc].add latency
  @message_allocations[message][argc].add allocations + result.allocations
end
show() click to toggle source

Writes all statistics on packets and messages processesed to $stdout

# File lib/drbdump/statistics.rb, line 237
def show
  show_basic
  puts
  show_messages
  puts
  show_peers
end
show_basic() click to toggle source

Writes basic statistics on packets and messages processed to $stdout

# File lib/drbdump/statistics.rb, line 248
def show_basic
  puts "#{@total_packet_count} total packets captured"
  puts "#{@rinda_packet_count} Rinda packets captured"
  puts "#{@drb_packet_count} DRb packets captured"
  puts "#{@drb_messages_sent} messages sent"
  puts "#{@drb_results_received} results received"
  puts "#{@drb_exceptions_raised} exceptions raised"
end
show_peers() click to toggle source

Shows peer statistics

# File lib/drbdump/statistics.rb, line 260
def show_peers
  source_size, destination_size, count_size, rows =
    extract_and_size @peer_latencies

  multiple, single = rows.partition { |_, _, count| count > 1 }

  multiple << single.pop if single.length == 1

  count_size = [count_size, single.length.to_s.size].max

  puts 'Peers min, avg, max, stddev:'
  puts multiple_peers count_size, source_size, destination_size, multiple
  puts single_peers count_size, single unless single.empty?
end