]> jfr.im git - erebus.git/commitdiff
added resources module, with !ram and !resources, to examine resource usage
authorzonidjan <redacted>
Tue, 17 Nov 2015 12:21:54 +0000 (06:21 -0600)
committerzonidjan <redacted>
Tue, 17 Nov 2015 12:21:54 +0000 (06:21 -0600)
modules/resources.py [new file with mode: 0644]

diff --git a/modules/resources.py b/modules/resources.py
new file mode 100644 (file)
index 0000000..110b4d5
--- /dev/null
@@ -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.")