This repository has been archived on 2023-04-13. You can view files and clone it, but cannot push or open issues or pull requests.
CloudBot/plugins/system.py

76 lines
2.5 KiB
Python
Raw Normal View History

2011-11-20 10:23:31 +01:00
import os
import re
2012-04-01 21:05:27 +02:00
import time
2012-03-30 02:16:31 +02:00
import platform
2011-11-20 10:23:31 +01:00
from util import hook
2012-04-01 21:51:02 +02:00
from datetime import timedelta
2011-11-20 10:23:31 +01:00
2012-03-30 18:17:31 +02:00
def convert_kilobytes(kilobytes):
if kilobytes >= 1024:
megabytes = kilobytes / 1024
size = '%.2f MB' % megabytes
else:
size = '%.2f KB' % kilobytes
return size
2012-03-30 18:17:31 +02:00
@hook.command(autohelp=False)
def system(inp):
2013-09-04 12:30:04 +02:00
"""system -- Retrieves information about the host system."""
2012-04-01 12:58:14 +02:00
hostname = platform.node()
os = platform.platform()
2012-04-01 12:58:14 +02:00
python_imp = platform.python_implementation()
python_ver = platform.python_version()
architecture = '-'.join(platform.architecture())
2012-03-30 18:17:31 +02:00
cpu = platform.machine()
return "Hostname: \x02{}\x02, Operating System: \x02{}\x02, Python " \
"Version: \x02{} {}\x02, Architecture: \x02{}\x02, CPU: \x02{}" \
"\x02".format(hostname, os, python_imp, python_ver, architecture, cpu)
2012-03-30 18:17:31 +02:00
@hook.command(autohelp=False)
def memory(inp):
2013-09-04 12:30:04 +02:00
"""memory -- Displays the bot's current memory usage."""
2012-04-01 13:45:45 +02:00
if os.name == "posix":
# get process info
status_file = open('/proc/self/status').read()
s = dict(re.findall(r'^(\w+):\s*(.*)\s*$', status_file, re.M))
# get the data we need and process it
data = s['VmRSS'], s['VmSize'], s['VmPeak'], s['VmStk'], s['VmData']
2012-04-01 23:29:42 +02:00
data = [float(i.replace(' kB', '')) for i in data]
strings = [convert_kilobytes(i) for i in data]
2012-04-01 13:45:45 +02:00
# prepare the output
out = "Threads: \x02{}\x02, Real Memory: \x02{}\x02, Allocated Memory: \x02{}\x02, Peak " \
"Allocated Memory: \x02{}\x02, Stack Size: \x02{}\x02, Heap " \
"Size: \x02{}\x02".format(s['Threads'], strings[0], strings[1], strings[2],
2012-04-01 13:45:45 +02:00
strings[3], strings[4])
# return output
return out
2012-04-01 13:45:45 +02:00
elif os.name == "nt":
cmd = 'tasklist /FI "PID eq %s" /FO CSV /NH' % os.getpid()
2011-11-20 10:23:31 +01:00
out = os.popen(cmd).read()
memory = 0
2011-11-20 10:23:31 +01:00
for amount in re.findall(r'([,0-9]+) K', out):
memory += float(amount.replace(',', ''))
memory = convert_kilobytes(memory)
return "Memory Usage: \x02{}\x02".format(memory)
2012-04-01 13:45:45 +02:00
else:
2012-04-01 15:01:01 +02:00
return "Sorry, this command is not supported on your OS."
2011-11-20 10:23:31 +01:00
2012-03-30 02:16:31 +02:00
@hook.command(autohelp=False)
2012-04-01 21:05:27 +02:00
def uptime(inp, bot=None):
2013-09-04 12:30:04 +02:00
"""uptime -- Shows the bot's uptime."""
2012-04-01 21:51:02 +02:00
uptime_raw = round(time.time() - bot.start_time)
uptime = timedelta(seconds=uptime_raw)
return "Uptime: \x02{}\x02".format(uptime)
2012-04-01 13:45:45 +02:00
2012-03-30 02:16:31 +02:00
@hook.command(autohelp=False)
2012-03-30 18:17:31 +02:00
def pid(inp):
2013-09-04 12:30:04 +02:00
"""pid -- Prints the bot's PID."""
return "PID: \x02{}\x02".format(os.getpid())