2011-11-20 22:23:31 +13:00
import os
import re
2012-04-02 07:05:27 +12:00
import time
2012-03-29 17:16:31 -07:00
import platform
2012-04-02 07:51:02 +12:00
from datetime import timedelta
2011-11-20 22:23:31 +13:00
2014-02-14 16:36:57 +13:00
from util import hook
2012-03-30 09:17:31 -07:00
2012-05-08 23:28:48 +12: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 09:17:31 -07:00
@hook.command ( autohelp = False )
2012-03-31 12:46:10 +13:00
def system ( inp ) :
2013-09-04 18:30:04 +08:00
""" system -- Retrieves information about the host system. """
2012-04-01 22:58:14 +12:00
hostname = platform . node ( )
2012-03-30 16:38:31 -07:00
os = platform . platform ( )
2012-04-01 22:58:14 +12:00
python_imp = platform . python_implementation ( )
python_ver = platform . python_version ( )
architecture = ' - ' . join ( platform . architecture ( ) )
2012-03-30 09:17:31 -07:00
cpu = platform . machine ( )
2013-09-05 10:36:25 +08:00
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 09:17:31 -07:00
2012-03-30 07:58:39 -07:00
@hook.command ( autohelp = False )
2012-03-31 12:46:10 +13:00
def memory ( inp ) :
2013-09-04 18:30:04 +08:00
""" memory -- Displays the bot ' s current memory usage. """
2012-04-01 23:45:45 +12: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-02 09:29:42 +12:00
data = [ float ( i . replace ( ' kB ' , ' ' ) ) for i in data ]
2012-05-08 23:28:48 +12:00
strings = [ convert_kilobytes ( i ) for i in data ]
2012-04-01 23:45:45 +12:00
# prepare the output
2013-09-05 10:36:25 +08:00
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 23:45:45 +12:00
strings [ 3 ] , strings [ 4 ] )
# return output
return out
2012-03-30 07:58:39 -07:00
2012-04-01 23:45:45 +12:00
elif os . name == " nt " :
cmd = ' tasklist /FI " PID eq %s " /FO CSV /NH ' % os . getpid ( )
2011-11-20 22:23:31 +13:00
out = os . popen ( cmd ) . read ( )
2012-03-30 12:06:36 -07:00
memory = 0
2011-11-20 22:23:31 +13:00
for amount in re . findall ( r ' ([,0-9]+) K ' , out ) :
2012-05-08 23:28:48 +12:00
memory + = float ( amount . replace ( ' , ' , ' ' ) )
memory = convert_kilobytes ( memory )
2013-09-05 10:36:25 +08:00
return " Memory Usage: \x02 {} \x02 " . format ( memory )
2012-04-01 23:45:45 +12:00
2012-03-30 12:06:36 -07:00
else :
2012-04-02 01:01:01 +12:00
return " Sorry, this command is not supported on your OS. "
2011-11-20 22:23:31 +13:00
2012-03-29 17:16:31 -07:00
2012-03-30 09:03:34 -07:00
@hook.command ( autohelp = False )
2012-04-02 07:05:27 +12:00
def uptime ( inp , bot = None ) :
2013-09-04 18:30:04 +08:00
""" uptime -- Shows the bot ' s uptime. """
2012-04-02 07:51:02 +12:00
uptime_raw = round ( time . time ( ) - bot . start_time )
uptime = timedelta ( seconds = uptime_raw )
2013-09-05 10:36:25 +08:00
return " Uptime: \x02 {} \x02 " . format ( uptime )
2012-04-01 23:45:45 +12:00
2012-03-30 09:03:34 -07:00
2012-03-29 17:16:31 -07:00
@hook.command ( autohelp = False )
2012-03-30 09:17:31 -07:00
def pid ( inp ) :
2013-09-04 18:30:04 +08:00
""" pid -- Prints the bot ' s PID. """
2013-09-05 10:36:25 +08:00
return " PID: \x02 {} \x02 " . format ( os . getpid ( ) )