added mem and url validator plugins
This commit is contained in:
parent
20fdb82b2d
commit
5115c0ad1d
|
@ -1,30 +1,61 @@
|
|||
import os
|
||||
import re
|
||||
|
||||
from util import hook
|
||||
|
||||
|
||||
@hook.command
|
||||
def mem(inp):
|
||||
".mem -- returns bot's current memory usage -- linux/windows only"
|
||||
|
||||
if os.name == 'posix':
|
||||
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)
|
||||
keys = 'VmSize VmLib VmData VmExe VmRSS VmStk'.split()
|
||||
return ', '.join(key + ':' + status[key] for key in keys)
|
||||
|
||||
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(',', ''))
|
||||
|
||||
return 'memory usage: %d kB' % total
|
||||
|
||||
return mem.__doc__
|
||||
|
||||
print mem('')
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
from util import hook
|
||||
|
||||
@hook.command
|
||||
def mem(bot):
|
||||
".mem -- returns bot's current memory usage"
|
||||
|
||||
if os.name=='posix':
|
||||
return posixmem()
|
||||
if os.name=='nt':
|
||||
return ntmem()
|
||||
|
||||
return mem.__doc__
|
||||
|
||||
|
||||
def posixmem():
|
||||
return _VmB('Size: ') + ' ' + _VmB('Resident:') + ' ' + _VmB('Stack:')
|
||||
|
||||
def ntmem():
|
||||
pid = os.getpid()
|
||||
total = 0
|
||||
|
||||
cmd = "tasklist /FI \"PID eq {0}\" /FO CSV /NH".format(pid)
|
||||
e = re.compile("[,0-9]+ K")
|
||||
|
||||
meml = re.findall(e,os.popen(cmd).read())
|
||||
|
||||
if not mem1[0]:
|
||||
return 'This os does not have the tasklist command installed'
|
||||
|
||||
for mem in meml:
|
||||
total += int(mem.rstrip(" K").replace(",",""))
|
||||
|
||||
return 'Bot mem usage: ' + str(total) + ' K'
|
||||
|
||||
def _VmB(Key):
|
||||
'''Private'''
|
||||
|
||||
_proc_status = '/proc/%d/status' % os.getpid()
|
||||
|
||||
_scale = {'kB': 1024.0, 'mB': 1024.0*1024.0,
|
||||
'KB': 1024.0, 'MB': 1024.0*1024.0}
|
||||
|
||||
# get pseudo file /proc/<pid>/status
|
||||
try:
|
||||
t = open(_proc_status)
|
||||
v = t.read()
|
||||
t.close()
|
||||
except:
|
||||
return 0.0
|
||||
|
||||
# get Key line e.g. 'VmRSS: 9999 kB\n ...'
|
||||
i = v.index(Key)
|
||||
v = v[i:].split(None, 3)
|
||||
if len(v) < 3:
|
||||
return 0.0
|
||||
|
||||
return float(v[1]) * _scale[v[2]]
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
'''
|
||||
regular.py
|
||||
|
||||
skybot plugin for testing regular expressions
|
||||
by Ipsum
|
||||
'''
|
||||
|
||||
import re
|
||||
|
||||
from util import hook
|
||||
|
||||
|
||||
@hook.command('re')
|
||||
'''
|
||||
regular.py
|
||||
|
||||
skybot plugin for testing regular expressions
|
||||
by Ipsum
|
||||
'''
|
||||
|
||||
import re
|
||||
|
||||
from util import hook
|
||||
|
||||
|
||||
@hook.command('re')
|
||||
def reg(inp):
|
||||
".re <regex> <string> -- matches regular expression in given <string> "\
|
||||
"(leave 2 spaces between)"
|
||||
|
||||
query = inp.split(" ", 1)
|
||||
|
||||
|
||||
query = inp.split(" ", 1)
|
||||
|
||||
if not inp or len(query) != 2:
|
||||
return reg.__doc__
|
||||
|
||||
return '|'.join(re.findall(query[0], query[1]))
|
||||
return '|'.join(re.findall(query[0], query[1]))
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
'''
|
||||
Runs a given url through the w3c validator and queries
|
||||
the result header for information
|
||||
'''
|
||||
|
||||
import urllib
|
||||
|
||||
from util import hook
|
||||
|
||||
path = 'http://validator.w3.org/check?uri=%s'
|
||||
|
||||
@hook.command('val')
|
||||
@hook.command
|
||||
def validate(inp):
|
||||
'''.val/.validate <url> -- runs url through the w3c markup validator'''
|
||||
|
||||
if not inp:
|
||||
return validate.__doc__
|
||||
|
||||
if not inp.startswith('http://'):
|
||||
inp = 'http://' + inp
|
||||
|
||||
url = path % (urllib.quote(inp))
|
||||
temp = urllib.urlopen(url).info()
|
||||
|
||||
status = temp.getheader('X-W3C-Validator-Status')
|
||||
if (status == "Valid" or status == "Invalid"):
|
||||
errorcount = temp.getheader('X-W3C-Validator-Errors')
|
||||
warningcount = temp.getheader('X-W3C-Validator-Warnings')
|
||||
return "%s was validated as %s with %s errors and %s warnings. See: %s" \
|
||||
% (inp, status.lower(), errorcount, warningcount, url)
|
||||
else:
|
||||
return "Something went wrong while validating %s" % (inp)
|
Loading…
Reference in New Issue