2011-11-20 10:23:31 +01:00
|
|
|
import os
|
|
|
|
import re
|
2012-03-30 18:03:34 +02:00
|
|
|
import time
|
|
|
|
import psutil
|
2012-03-30 02:16:31 +02:00
|
|
|
import platform
|
2011-11-20 10:23:31 +01:00
|
|
|
from util import hook
|
|
|
|
|
2012-03-30 16:51:59 +02:00
|
|
|
def replace(text, wordDic):
|
|
|
|
rc = re.compile('|'.join(map(re.escape, wordDic)))
|
|
|
|
|
|
|
|
def translate(match):
|
|
|
|
return wordDic[match.group(0)]
|
|
|
|
return rc.sub(translate, text)
|
|
|
|
|
2012-03-30 16:58:39 +02:00
|
|
|
def checkProc(checked_stats):
|
2011-11-20 10:23:31 +01:00
|
|
|
status_file = open("/proc/%d/status" % os.getpid()).read()
|
|
|
|
line_pairs = re.findall(r"^(\w+):\s*(.*)\s*$", status_file, re.M)
|
|
|
|
status = dict(line_pairs)
|
2012-03-30 16:58:39 +02:00
|
|
|
checked_stats = checked_stats.split()
|
2012-03-30 16:51:59 +02:00
|
|
|
stats = '\x02, '.join(key + ': \x02' + status[key] for key in checked_stats)
|
2012-03-30 16:58:39 +02:00
|
|
|
return stats
|
|
|
|
|
2012-03-30 18:17:31 +02:00
|
|
|
|
|
|
|
@hook.command("system", autohelp=False)
|
|
|
|
@hook.command(autohelp=False)
|
|
|
|
def sys(inp):
|
|
|
|
".sys -- Retrieves information about the host system."
|
|
|
|
python_version = platform.python_version()
|
|
|
|
os = platform.platform(aliased=True)
|
|
|
|
cpu = platform.machine()
|
|
|
|
return "Platform: \x02%s\x02, Python Version: \x02%s\x02, CPU: \x02%s\x02" % (os, python_version, cpu)
|
|
|
|
|
|
|
|
|
2012-03-30 16:58:39 +02:00
|
|
|
@hook.command("memory", autohelp=False)
|
|
|
|
@hook.command(autohelp=False)
|
|
|
|
def mem(inp):
|
|
|
|
".mem -- Displays the bot's current memory usage."
|
|
|
|
if os.name == 'posix':
|
2012-03-30 18:03:34 +02:00
|
|
|
checked_stats = 'Threads VmRSS VmSize VmPeak VmStk VmData'
|
2012-03-30 16:58:39 +02:00
|
|
|
stats = checkProc(checked_stats)
|
2012-03-30 18:03:34 +02:00
|
|
|
pretty_names = {'Threads': 'Active Threads', 'VmRSS': 'Real Memory', 'VmSize': 'Allocated Memory', 'VmPeak': 'Peak Allocated Memory', 'VmStk': 'Stack Size', 'VmData': 'Heap Size'}
|
2012-03-30 16:51:59 +02:00
|
|
|
stats = replace(stats, pretty_names)
|
|
|
|
return stats
|
2012-03-30 16:58:39 +02:00
|
|
|
|
2011-11-20 10:23:31 +01:00
|
|
|
elif os.name == 'nt':
|
|
|
|
cmd = "tasklist /FI \"PID eq %s\" /FO CSV /NH" % os.getpid()
|
|
|
|
out = os.popen(cmd).read()
|
|
|
|
total = 0
|
|
|
|
for amount in re.findall(r'([,0-9]+) K', out):
|
|
|
|
total += int(amount.replace(',', ''))
|
2012-03-30 16:58:39 +02:00
|
|
|
return 'Memory Usage: \x02%s kB\x02' % total
|
|
|
|
return 'error: operating system not currently supported'
|
2011-11-20 10:23:31 +01:00
|
|
|
|
2012-03-30 02:16:31 +02:00
|
|
|
|
2012-03-30 18:31:36 +02:00
|
|
|
@hook.command("uptime", autohelp=False)
|
2012-03-30 18:03:34 +02:00
|
|
|
@hook.command(autohelp=False)
|
2012-03-30 18:31:36 +02:00
|
|
|
def up(inp):
|
|
|
|
".up -- Shows the bot's uptime."
|
2012-03-30 18:03:34 +02:00
|
|
|
proc = psutil.Process(os.getpid())
|
|
|
|
up_time = proc.create_time
|
|
|
|
up_time = time.time() - up_time
|
|
|
|
up_time = time.localtime(up_time)
|
2012-03-30 18:10:48 +02:00
|
|
|
up_time = time.strftime("Uptime: \x02%M:%S\x02", up_time)
|
2012-03-30 18:03:34 +02:00
|
|
|
return up_time
|
|
|
|
|
2012-03-30 18:31:36 +02:00
|
|
|
@hook.command("proc", autohelp=False)
|
2012-03-30 02:16:31 +02:00
|
|
|
@hook.command(autohelp=False)
|
2012-03-30 18:17:31 +02:00
|
|
|
def pid(inp):
|
2012-03-30 18:31:36 +02:00
|
|
|
".pid -- Prints the bot's PID."
|
2012-03-30 18:17:31 +02:00
|
|
|
return 'PID: \x02%s\x02' % os.getpid()
|