1 from __future__
import division
5 from xml.etree
import cElementTree
as ElementTree
7 from xml.etree
import ElementTree
17 __slots__ = [
'sourceAddress',
'destinationAddress',
'protocol',
'sourcePort',
'destinationPort']
26 __slots__ =
'bins',
'nbins',
'number_of_flows'
31 for bin
in el.findall(
'bin'):
32 self.bins.append( (float(bin.get(
"start")), float(bin.get(
"width")), int(bin.get(
"count"))) )
35 __slots__ = [
'flowId',
'delayMean',
'packetLossRatio',
'rxBitrate',
'txBitrate',
36 'fiveTuple',
'packetSizeMean',
'probe_stats_unsorted',
37 'hopCount',
'flowInterruptionsHistogram',
'rx_duration']
39 self.
flowId = int(flow_el.get(
'flowId'))
40 rxPackets = long(flow_el.get(
'rxPackets'))
41 txPackets = long(flow_el.get(
'txPackets'))
42 tx_duration = float(long(flow_el.get(
'timeLastTxPacket')[:-2]) - long(flow_el.get(
'timeFirstTxPacket')[:-2]))*1e-9
43 rx_duration = float(long(flow_el.get(
'timeLastRxPacket')[:-2]) - long(flow_el.get(
'timeFirstRxPacket')[:-2]))*1e-9
47 self.
hopCount = float(flow_el.get(
'timesForwarded')) / rxPackets + 1
51 self.
delayMean = float(flow_el.get(
'delaySum')[:-2]) / rxPackets * 1e-9
57 self.
rxBitrate = long(flow_el.get(
'rxBytes'))*8 / rx_duration
61 self.
txBitrate = long(flow_el.get(
'txBytes'))*8 / tx_duration
64 lost = float(flow_el.get(
'lostPackets'))
71 interrupt_hist_elem = flow_el.find(
"flowInterruptionsHistogram")
72 if interrupt_hist_elem
is None:
79 __slots__ = [
'probeId',
'packets',
'bytes',
'delayFromFirstProbe']
84 FlowClassifier_el, = simulation_el.findall(
"Ipv4FlowClassifier")
86 for flow_el
in simulation_el.findall(
"FlowStats/Flow"):
88 flow_map[flow.flowId] = flow
89 self.flows.append(flow)
90 for flow_cls
in FlowClassifier_el.findall(
"Flow"):
91 flowId = int(flow_cls.get(
'flowId'))
92 flow_map[flowId].fiveTuple =
FiveTuple(flow_cls)
94 for probe_elem
in simulation_el.findall(
"FlowProbes/FlowProbe"):
95 probeId = int(probe_elem.get(
'index'))
96 for stats
in probe_elem.findall(
"FlowStats"):
97 flowId = int(stats.get(
'flowId'))
99 s.packets = int(stats.get(
'packets'))
100 s.bytes = long(stats.get(
'bytes'))
103 s.delayFromFirstProbe =
parse_time_ns(stats.get(
'delayFromFirstProbeSum')) / float(s.packets)
105 s.delayFromFirstProbe = 0
106 flow_map[flowId].probe_stats_unsorted.append(s)
110 file_obj = open(argv[1])
111 print "Reading XML file ",
116 for event, elem
in ElementTree.iterparse(file_obj, events=(
"start",
"end")):
121 if level == 0
and elem.tag ==
'FlowMonitor':
125 sys.stdout.write(
".")
131 for flow
in sim.flows:
133 proto = {6:
'TCP', 17:
'UDP'} [t.protocol]
134 print "FlowID: %i (%s %s/%s --> %s/%i)" % \
135 (flow.flowId, proto, t.sourceAddress, t.sourcePort, t.destinationAddress, t.destinationPort)
136 print "\tTX bitrate: %.2f kbit/s" % (flow.txBitrate*1e-3,)
137 print "\tRX bitrate: %.2f kbit/s" % (flow.rxBitrate*1e-3,)
138 print "\tMean Delay: %.2f ms" % (flow.delayMean*1e3,)
139 print "\tPacket Loss Ratio: %.2f %%" % (flow.packetLossRatio*100)
142 if __name__ ==
'__main__':