class Protobuf::Rpc::Stat

def client

def client
  @client ? "#{@client[:ip]}:#{@client[:port]}" : nil
end

def client=(peer)

def client=(peer)
  @client = {:port => peer[0], :ip => peer[1]}
end

def client?

def client?
  @mode == :CLIENT
end

def elapsed_time

def elapsed_time
  (start_time && end_time ? "#{(end_time - start_time).round(4)}s" : nil)
end

def initialize(mode = :SERVER)

def initialize(mode = :SERVER)
  @mode = mode
  start
end

def method

def method
  @method ||= @dispatcher.try(:callable_method).try(:name)
end

def rpc

def rpc
  service && method ? "#{service}##{method}" : nil
end

def server

def server
  @server ? "#{@server[:ip]}:#{@server[:port]}" : nil
end

def server=(peer)

def server=(peer)
  @server = {:port => peer[0], :ip => peer[1]}
end

def server?

def server?
  @mode == :SERVER
end

def service

def service
  @service ||= @dispatcher.try(:service).class.name
end

def sizes

def sizes
  "#{@request_size || 0}B/#{@response_size || 0}B"
end

def start

def start
  @start_time ||= Time.now
end

def stop

def stop
  start if !@start_time
  @end_time ||= Time.now
end

def to_s

def to_s
  [
    server? ? "[SRV]" : "[CLT]",
    rpc,
    elapsed_time,
    sizes,
    server? ? server : client
  ].compact.join(' - ')
end