diff --git a/plugins/mem.py b/plugins/mem.py index f80cefa..b65d882 100644 --- a/plugins/mem.py +++ b/plugins/mem.py @@ -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//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]] diff --git a/plugins/regular.py b/plugins/regular.py index 511c350..d6d5565 100644 --- a/plugins/regular.py +++ b/plugins/regular.py @@ -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 -- matches regular expression in given "\ "(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])) diff --git a/plugins/validate.py b/plugins/validate.py new file mode 100644 index 0000000..774d39c --- /dev/null +++ b/plugins/validate.py @@ -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 -- 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) \ No newline at end of file