Browse Source

Queue needs to be blocking.

pull/10/merge
Ben Kurtovic 8 years ago
parent
commit
b31a936d7f
1 changed files with 8 additions and 9 deletions
  1. +8
    -9
      commands/rc_monitor.py

+ 8
- 9
commands/rc_monitor.py View File

@@ -20,8 +20,8 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE. # SOFTWARE.


from collections import deque
from datetime import datetime from datetime import datetime
from Queue import Queue
from threading import Thread from threading import Thread


from earwigbot.commands import Command from earwigbot.commands import Command
@@ -51,7 +51,7 @@ class RCMonitor(Command):
self._levels = {} self._levels = {}
self._issues = {} self._issues = {}
self._descriptions = {} self._descriptions = {}
self._queue = deque()
self._queue = Queue()


self._thread = Thread(target=self._callback, name="rc_monitor") self._thread = Thread(target=self._callback, name="rc_monitor")
self._thread.daemon = True self._thread.daemon = True
@@ -67,8 +67,8 @@ class RCMonitor(Command):


def process(self, data): def process(self, data):
if isinstance(data, RC): if isinstance(data, RC):
newlen = len(self._queue) + 1
self._queue.append(data)
newlen = self._queue.qsize() + 1
self._queue.put(data)
if newlen > self._stats["max_backlog"]: if newlen > self._stats["max_backlog"]:
self._stats["max_backlog"] = newlen self._stats["max_backlog"] = newlen
return return
@@ -82,14 +82,13 @@ class RCMonitor(Command):
rate = self._stats["edits"] / seconds rate = self._stats["edits"] / seconds
msg = ("\x02{edits:,}\x0F edits checked since {since} " msg = ("\x02{edits:,}\x0F edits checked since {since} "
"(\x02{rate:.2f}\x0F edits/sec); \x02{hits:,}\x0F hits; " "(\x02{rate:.2f}\x0F edits/sec); \x02{hits:,}\x0F hits; "
"\x02{backlog:,}\x0F-edit backlog (\x02{max_backlog:,}\x0F "
"max).")
"\x02{qsize:,}\x0F-edit backlog (\x02{max_backlog:,}\x0F max).")
self.reply(data, msg.format( self.reply(data, msg.format(
since=since, rate=rate, backlog=len(self._queue), **self._stats))
since=since, rate=rate, qsize=self._queue.qsize(), **self._stats))


def unload(self): def unload(self):
self._thread.running = False self._thread.running = False
self._queue.append(None)
self._queue.put(None)


def _prepare_reports(self): def _prepare_reports(self):
"""Set up internal tables for storing report information.""" """Set up internal tables for storing report information."""
@@ -158,7 +157,7 @@ class RCMonitor(Command):
def _callback(self): def _callback(self):
"""Internal callback for the RC monitor thread.""" """Internal callback for the RC monitor thread."""
while self._thread.running: while self._thread.running:
event = self._queue.popleft()
event = self._queue.get()
if not self._thread.running: if not self._thread.running:
break break
self._handle_event(event) self._handle_event(event)

Loading…
Cancel
Save