class Protobuf::Rpc::Stat

def client

def client
  @client || nil
end

def client=(client_host)

def client=(client_host)
  @client = client_host
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_name

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

def rpc

def rpc
  service && method_name ? "#{service}##{method_name}" : 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" if stopped?
end

def start

def start
  @start_time ||= Time.now
end

def stop

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

def stopped?

def stopped?
  ! end_time.nil?
end

def to_s

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

def trace_id

def trace_id
  Thread.current.object_id.to_s(16)
end