class FlowTag::FlowCanvas
Public Class Methods
new(parent, flows)
click to toggle source
# File lib/flowtag/flowcanvas.rb, line 79 def initialize(parent, flows) hostseen = {} hosts = [] @selected_flows = @flows = flows flows.each do |k,fl| sip = fl[FlowDB::SIP] next if hostseen[sip] hosts.push(sip) hostseen[sip]=1 end model = [ { :name => 'Port', :type => 'range', :scale => '3rt', :min => 0, :max => 65535, :ofmt => '%d', #:items => [1,22,80,137,443,1024,5900,6667,31337,65335] }, { :name => 'Host', :type => 'list', :list => hosts } ] @pcp = Tk::ParallelCoordinates.new(parent, 500, 360, model) @pcp.field_separator = "|" @pcp.set_select_cb( proc { |tuples| cb_select(tuples) } ) @flow_keys = {} @pkt_low = @byte_low = @pkt_high = @byte_high = @time_high = 0 @time_low = 2**32 flows.each do |k,fl| key = fl[FlowDB::DP].to_s+"|"+fl[FlowDB::SIP] skip = (@flow_keys[key]) ? true:false @flow_keys[key] = [] unless @flow_keys[key] @flow_keys[key].push(fl) @pkt_high = fl[FlowDB::PKTS] if fl[FlowDB::PKTS] > @pkt_high @byte_high = fl[FlowDB::BYTES] if fl[FlowDB::BYTES] > @byte_high @time_low = fl[FlowDB::ST] if fl[FlowDB::ST] < @time_low @time_high = fl[FlowDB::ST] if fl[FlowDB::ST] > @time_high next if skip @pcp.addtuple([fl[FlowDB::DP],fl[FlowDB::SIP]]) end end
Public Instance Methods
cb_select(tuples)
click to toggle source
# File lib/flowtag/flowcanvas.rb, line 23 def cb_select(tuples) @selected_flows = [] tuples.each do |t| key = t.join("|") @selected_flows += @flow_keys[key] end @select_cb.call @selected_flows if @select_cb end
filter()
click to toggle source
# File lib/flowtag/flowcanvas.rb, line 61 def filter @flow_keys.each do |key,flows| flows.each do |fl| if fl[FlowDB::PKTS] < @pkt_low or fl[FlowDB::PKTS] > @pkt_high or fl[FlowDB::BYTES] < @byte_low or fl[FlowDB::BYTES] > @byte_high or fl[FlowDB::ST] < @time_low or fl[FlowDB::ST] > @time_high @pcp.set_tuple_state(key,Tk::ParallelCoordinates::STATE_FILTERED) else @pcp.set_tuple_state(key,Tk::ParallelCoordinates::STATE_NORMAL) end end end end
pack(*args)
click to toggle source
# File lib/flowtag/flowcanvas.rb, line 75 def pack(*args) @pcp.pack(*args) end
select_flow(sip,dip,sp,dp)
click to toggle source
# File lib/flowtag/flowcanvas.rb, line 32 def select_flow(sip,dip,sp,dp) @pcp.set_tuple_state(@cflow,Tk::ParallelCoordinates::STATE_NORMAL) if @cflow key = dp.to_s+"|"+sip @cflow = key @pcp.set_tuple_state(key,Tk::ParallelCoordinates::STATE_CURRENT) end
set_byte_range(low, high)
click to toggle source
# File lib/flowtag/flowcanvas.rb, line 49 def set_byte_range(low, high) @byte_low = low @byte_high = high filter end
set_packet_range(low, high)
click to toggle source
# File lib/flowtag/flowcanvas.rb, line 55 def set_packet_range(low, high) @pkt_low = low @pkt_high = high filter end
set_select_cb(callback)
click to toggle source
# File lib/flowtag/flowcanvas.rb, line 39 def set_select_cb(callback) @select_cb = callback end
set_time_range(low, high)
click to toggle source
# File lib/flowtag/flowcanvas.rb, line 43 def set_time_range(low, high) @time_low = low @time_high = high filter end