3
0
mirror of https://github.com/jlu5/PyLink.git synced 2025-01-23 18:54:05 +01:00

exec: add 'threadinfo' command

This commit is contained in:
James Lu 2017-08-08 00:22:57 -07:00
parent 8558a4e56d
commit 8b771f6d28

View File

@ -2,6 +2,7 @@
exec.py: Provides commands for executing raw code and debugging PyLink. exec.py: Provides commands for executing raw code and debugging PyLink.
""" """
import pprint import pprint
import threading
from pylinkirc import utils, world from pylinkirc import utils, world
from pylinkirc.log import log from pylinkirc.log import log
@ -9,7 +10,6 @@ from pylinkirc.coremods import permissions
# These imports are not strictly necessary, but make the following modules # These imports are not strictly necessary, but make the following modules
# easier to access through eval and exec. # easier to access through eval and exec.
import threading
import re import re
import time import time
import pylinkirc import pylinkirc
@ -172,3 +172,24 @@ def inject(irc, source, args):
log.info('(%s) Injecting raw text %r into protocol module for %s', irc.name, log.info('(%s) Injecting raw text %r into protocol module for %s', irc.name,
args, irc.get_hostmask(source)) args, irc.get_hostmask(source))
irc.reply(irc.parse_irc_command(args)) irc.reply(irc.parse_irc_command(args))
@utils.add_cmd
def threadinfo(irc, source, args):
"""takes no arguments.
Lists all threads currently present in this PyLink instance."""
permissions.check_permissions(irc, source, ['exec.threadinfo'])
for t in sorted(threading.enumerate(), key=lambda t: t.name):
name = t.name
# Unnamed threads are something we want to avoid throughout PyLink.
if name.startswith('Thread-'):
name = '\x0305%s\x03' % t.name
# Also VERY bad: remaining threads for networks not in the networks index anymore!
elif name.startswith(('Listener for', 'Ping timer loop for', 'Queue thread for')) and name.rsplit(" ", 1)[-1] not in world.networkobjects:
name = '\x0304%s\x03' % t.name
irc.reply('\x02%s\x02[%s]: daemon=%s; alive=%s' % (name, t.ident, t.daemon, t.is_alive()), private=True)
irc.reply("Total of %s threads." % threading.active_count())