# File lib/sniffer.rb, line 7 def initialize(config) @source = config[:nic] @port = config[:port] @metrics = {} @metrics[:calls] = {} @metrics[:objsize] = {} @metrics[:reqsec] = {} @metrics[:bw] = {} @metrics[:stats] = { :recv => 0, :drop => 0 } @semaphore = Mutex.new end
# File lib/sniffer.rb, line 54 def done @done = true end
# File lib/sniffer.rb, line 21 def start cap = Pcap::Capture.open_live(@source, 1500) @metrics[:start_time] = Time.new.to_f @done = false cap.setfilter("port #{@port}") cap.loop do |packet| @metrics[:stats] = cap.stats # parse key name, and size from VALUE responses if packet.raw_data =~ %rVALUE (\S+) \S+ (\S+)/ key = $1 bytes = $2 @semaphore.synchronize do if @metrics[:calls].has_key?(key) @metrics[:calls][key] += 1 else @metrics[:calls][key] = 1 end @metrics[:objsize][key] = bytes.to_i end end break if @done end cap.close end