13 class QueueLogger(threading.Thread):
14 def __init__(self, queues, drops, accepts, outpath):
15 super(QueueLogger,self).__init__()
18 self.accepts = accepts
19 self.outpath = outpath
21 self._event = threading.Event()
22 self._terminate = False
26 with open(self.outpath, "w+") as outfile:
27 outfile.write(",".join(
29 + map("q%02dlen".__mod__, xrange(len(self.queues)))
30 + map("q%02ddrops".__mod__, xrange(len(self.queues)))
31 + map("q%02daccepts".__mod__, xrange(len(self.queues)))
34 while not self._terminate:
41 queuelens = map(len,self.queues)
43 queuedrops = list(self.drops)
44 self.drops[:] = [0] * len(self.drops)
46 queueaccepts = list(self.accepts)
47 self.accepts[:] = [0] * len(self.accepts)
49 outfile.write(",".join(
52 + map(str, queuedrops)
53 + map(str, queueaccepts)
58 self._terminate = True
64 class LoggingClassQueue(classqueue.ClassQueue):
68 super(LoggingClassQueue, self).__init__()
70 # Prepare logger thread
71 self.logger = QueueLogger(self.queues, self.drops, self.accepts, _outpath)
75 self.logger.terminate()
78 super(LoggingClassQueue, self).clear()
79 self.accepts[:] = [0] * len(self.queues)
80 self.drops[:] = [0] * len(self.queues)
82 def append(self, packet):
83 proto,qi,size = self.queuefor(packet)
84 dropped = super(LoggingClassQueue, self).append(packet)
93 queueclass = LoggingClassQueue
95 def init(outpath="output", **kw):