From: zonidjan Date: Tue, 17 Nov 2015 12:21:54 +0000 (-0600) Subject: added resources module, with !ram and !resources, to examine resource usage X-Git-Url: https://jfr.im/git/erebus.git/commitdiff_plain/72137af75f3fd19186509be77f9c7368112676ae added resources module, with !ram and !resources, to examine resource usage --- diff --git a/modules/resources.py b/modules/resources.py new file mode 100644 index 0000000..110b4d5 --- /dev/null +++ b/modules/resources.py @@ -0,0 +1,56 @@ +# Erebus IRC bot - Author: Erebus Team +# simple module example +# This file is released into the public domain; see http://unlicense.org/ + +# module info +modinfo = { + 'author': 'Erebus Team', + 'license': 'public domain', + 'compatible': [1], # compatible module API versions + 'depends': [], # other modules required to work properly? +} + +# preamble +import modlib +lib = modlib.modlib(__name__) +modstart = lib.modstart +modstop = lib.modstop + +# module code +import resource + +@lib.hook('ram', needchan=False, glevel=lib.MANAGER) +def cmd_ram(bot, user, chan, realtarget, *args): + if chan is not None: replyto = chan + else: replyto = user + + try: + res = resource.getrusage(resource.RUSAGE_BOTH) + except: + res = resource.getrusage(resource.RUSAGE_SELF) + + bot.msg(replyto, "Memory usage (MiB): %r" % (res.ru_maxrss/1024.0)) + +@lib.hook('resources', needchan=False, glevel=lib.MANAGER) +def cmd_resources(bot, user, chan, realtarget, *args): + if chan is not None: replyto = chan + else: replyto = user + + try: + res = resource.getrusage(resource.RUSAGE_BOTH) + except: + res = resource.getrusage(resource.RUSAGE_SELF) + + bot.msg(replyto, "Resource usage:") + for i, v in [ + ('utime (s)', res.ru_utime), + ('stime (s)', res.ru_stime), + ('memory (MiB)', (res.ru_maxrss/1024.0)) + ('I/O (blocks)', res.ru_inblock+res.ru_oublock), + ('page faults', res.ru_majflt), + ('signals', res.ru_nsignals), + ('context switches (voluntary)', res.ru_nvcsw), + ('context switches (involuntary)', res.ru_nivcsw), + ]: + bot.msg(replyto, "- %s: %r" % (i, v)) + bot.msg(replyto, "EOL.")