Mark Bergsma has submitted this change and it was merged. Change subject: Revert "Fix various noc files to be pep8 compliant" ......................................................................
Revert "Fix various noc files to be pep8 compliant" Not merged on sockpuppet This reverts commit 04a2fcb0d1c9068c15e43c1085d5d0f6a233bab5 Change-Id: I050ff93d18e3c466baf1029464c99d5d63c2152e --- M files/cgi-bin/noc/extractprofile.py M files/cgi-bin/noc/ng/admin.py M files/cgi-bin/noc/ng/extractprofile.py M files/cgi-bin/noc/ng/report.py M files/cgi-bin/noc/rep.py M files/cgi-bin/noc/report.py 6 files changed, 346 insertions(+), 372 deletions(-) Approvals: Mark Bergsma: Verified; Looks good to me, approved diff --git a/files/cgi-bin/noc/extractprofile.py b/files/cgi-bin/noc/extractprofile.py index 8cada4b..a18967d 100755 --- a/files/cgi-bin/noc/extractprofile.py +++ b/files/cgi-bin/noc/extractprofile.py @@ -2,71 +2,73 @@ # encoding: utf-8 ##################################################################### -### THIS FILE IS MANAGED BY PUPPET +### THIS FILE IS MANAGED BY PUPPET ### puppet:///files/cgi-bin/noc/extractprofile.py ##################################################################### # showprofile # Copyright (c) 2006 Domas Mituzas +import sys +import os + import xml.sax +from xml.sax import saxutils from xml.sax import make_parser from xml.sax.handler import feature_namespaces - class ExtractProfile(xml.sax.handler.ContentHandler): - def __init__(self): - self.parser = make_parser() - self.parser.setFeature(feature_namespaces, 0) - self.parser.setContentHandler(self) + def __init__(self): + self.parser=make_parser() + self.parser.setFeature(feature_namespaces,0) + self.parser.setContentHandler(self) + def startElement(self,name,attrs): + if name=="db": + self.db=attrs.get("name") + self.profile[self.db]={} + if name=="host": + self.host=attrs.get("name") + self.profile[self.db][self.host]={} + if name=="eventname": + self.inContent=1 + self.contentData=[] + if name=="stats": + self.event["count"]=int(attrs.get("count")) + if name=="cputime": + self.event["cpu"]=float(attrs.get("total")) + self.event["cpusq"]=float(attrs.get("totalsq")) + if name=="realtime": + self.event["real"]=float(attrs.get("total")) + self.event["realsq"]=float(attrs.get("totalsq")) + + def endElement(self,name): + if name=="eventname": + self.inContent=0 + self.eventname = "".join(self.contentData) + self.profile[self.db][self.host][self.eventname]={} + self.event=self.profile[self.db][self.host][self.eventname] + if name=="stats": + if self.event["count"]: + self.event["onereal"]=self.event["real"]/self.event["count"] + self.event["onecpu"]=self.event["cpu"]/self.event["count"] + else: + self.event["onereal"]=0 + self.event["onecpu"]=0 - def startElement(self, name, attrs): - if name == "db": - self.db = attrs.get("name") - self.profile[self.db] = {} - if name == "host": - self.host = attrs.get("name") - self.profile[self.db][self.host] = {} - if name == "eventname": - self.inContent = 1 - self.contentData = [] - if name == "stats": - self.event["count"] = int(attrs.get("count")) - if name == "cputime": - self.event["cpu"] = float(attrs.get("total")) - self.event["cpusq"] = float(attrs.get("totalsq")) - if name == "realtime": - self.event["real"] = float(attrs.get("total")) - self.event["realsq"] = float(attrs.get("totalsq")) + def characters(self,chars): + if self.inContent: + self.contentData.append(chars) - def endElement(self, name): - if name == "eventname": - self.inContent = 0 - self.eventname = "".join(self.contentData) - self.profile[self.db][self.host][self.eventname] = {} - self.event = self.profile[self.db][self.host][self.eventname] - if name == "stats": - if self.event["count"]: - self.event["onereal"] = self.event["real"] / self.event["count"] - self.event["onecpu"] = self.event["cpu"] / self.event["count"] - else: - self.event["onereal"] = 0 - self.event["onecpu"] = 0 + def getProfile(self): + return self.profile - def characters(self, chars): - if self.inContent: - self.contentData.append(chars) - - def getProfile(self): - return self.profile - - def extract(self, file=False): - if not file: - file = open("profile.xml") - self.profile = {} - self.inContent = 0 - self.parser.parse(file) - return self.profile + def extract(self,file=False): + if (file==False): + file=open("profile.xml") + self.profile={} + self.inContent=0 + self.parser.parse(file) + return self.profile if __name__ == '__main__': print "\nNot a valid entry point" diff --git a/files/cgi-bin/noc/ng/admin.py b/files/cgi-bin/noc/ng/admin.py index 3561bf9..1e2e20e 100755 --- a/files/cgi-bin/noc/ng/admin.py +++ b/files/cgi-bin/noc/ng/admin.py @@ -1,58 +1,57 @@ #!/usr/bin/python ##################################################################### -### THIS FILE IS MANAGED BY PUPPET +### THIS FILE IS MANAGED BY PUPPET ### puppet:///files/cgi-bin/noc/ng/admin.py ##################################################################### import shelve import cgi -import cgitb -cgitb.enable() +import cgitb; cgitb.enable() import datetime import sys import config -password = config.password +password=config.password print "Content-type: text/html\n" -form = cgi.SvFormContentDict() +form=cgi.SvFormContentDict() if 'password' in form: - if form['password'] != "" and form['password'] != password: - print "access denied!!!!!!!!!1111oneoneeleven" - sys.exit() - else: - authed = True + if form['password'] != "" and form['password'] != password: + print "access denied!!!!!!!!!1111oneoneeleven" + sys.exit() + else: + authed=True else: - authed = False + authed=False print """ - <script>function deletesample(sample) {form=document.forms['actions'];form['sample'].value=sample;form.submit();}</script> - <form name='actions' method='POST' action='admin.py'> - <input type='submit' name='action' value='take'> - <input type='submit' name='action' value='clear'> - <input type='hidden' name='sample' value=''> - <input type='%s' name='password' value='%s' - </form>""" % ((authed and 'hidden' or 'password'), (authed and password or '')) + <script>function deletesample(sample) {form=document.forms['actions'];form['sample'].value=sample;form.submit();}</script> + <form name='actions' method='POST' action='admin.py'> + <input type='submit' name='action' value='take'> + <input type='submit' name='action' value='clear'> + <input type='hidden' name='sample' value=''> + <input type='%s' name='password' value='%s' + </form>""" % ((authed and 'hidden' or 'password'),(authed and password or '')) store = shelve.open('/var/run/profile-baselines') if 'action' not in form: - if 'sample' in form and authed: - del store[form['sample']] + if 'sample' in form and authed: + del store[form['sample']] elif form['action'] == 'clear' and authed: - from socket import * - sock = socket(AF_INET, SOCK_DGRAM) - sock.sendto('-truncate', (config.host, config.port)) + from socket import * + sock = socket(AF_INET,SOCK_DGRAM) + sock.sendto('-truncate',(config.host,config.port)) elif form['action'] == 'take' and authed: - from extractprofile import SocketProfile - store[str(datetime.datetime.now()).replace(" ", "-")] = SocketProfile(config.host, config.port).extract() + from extractprofile import SocketProfile + store[str(datetime.datetime.now()).replace(" ","-")] = SocketProfile(config.host,config.port).extract() elif 'sample' in form and authed: - del store[form['sample']] + del store[form['sample']] for entry in store.keys(): - print """<div><a href='report.py?sample=%s'>%s</a> <a href='javascript:deletesample("%s")'>delete</a></div>""" % (entry, entry, entry) - + print """<div><a href='report.py?sample=%s'>%s</a> <a href='javascript:deletesample("%s")'>delete</a></div>""" % (entry,entry,entry) + print "<div><a href='report.py'>current</a></div>" diff --git a/files/cgi-bin/noc/ng/extractprofile.py b/files/cgi-bin/noc/ng/extractprofile.py index a2de7ef..8cc92e3 100755 --- a/files/cgi-bin/noc/ng/extractprofile.py +++ b/files/cgi-bin/noc/ng/extractprofile.py @@ -2,86 +2,85 @@ # encoding: utf-8 ##################################################################### -### THIS FILE IS MANAGED BY PUPPET +### THIS FILE IS MANAGED BY PUPPET ### puppet:///files/cgi-bin/noc/ng/extractprofile.py ##################################################################### # showprofile # Copyright (c) 2006 Domas Mituzas + +import sys +import os import socket import xml.sax +from xml.sax import saxutils from xml.sax import make_parser from xml.sax.handler import feature_namespaces - # XML SAX parser class, puts stuff into some array! class ExtractProfile(xml.sax.handler.ContentHandler): - def __init__(self): - self.parser = make_parser() - self.parser.setFeature(feature_namespaces, 0) - self.parser.setContentHandler(self) + def __init__(self): + self.parser=make_parser() + self.parser.setFeature(feature_namespaces,0) + self.parser.setContentHandler(self) + def startElement(self,name,attrs): + if name=="db": + self.db=attrs.get("name") + self.profile[self.db]={} + if name=="host": + self.host=attrs.get("name") + self.profile[self.db][self.host]={} + if name=="eventname": + self.inContent=1 + self.contentData=[] + if name=="stats": + self.event["count"]=int(attrs.get("count")) + if name=="cputime": + self.event["cpu"]=float(attrs.get("total")) + self.event["cpusq"]=float(attrs.get("totalsq")) + if name=="realtime": + self.event["real"]=float(attrs.get("total")) + self.event["realsq"]=float(attrs.get("totalsq")) + + def endElement(self,name): + if name=="eventname": + self.inContent=0 + self.eventname = "".join(self.contentData) + self.profile[self.db][self.host][self.eventname]={} + self.event=self.profile[self.db][self.host][self.eventname] + if name=="stats": + self.event["onereal"]=self.event["real"]/self.event["count"] + self.event["onecpu"]=self.event["cpu"]/self.event["count"] + def characters(self,chars): + if self.inContent: + self.contentData.append(chars) - def startElement(self, name, attrs): - if name == "db": - self.db = attrs.get("name") - self.profile[self.db] = {} - if name == "host": - self.host = attrs.get("name") - self.profile[self.db][self.host] = {} - if name == "eventname": - self.inContent = 1 - self.contentData = [] - if name == "stats": - self.event["count"] = int(attrs.get("count")) - if name == "cputime": - self.event["cpu"] = float(attrs.get("total")) - self.event["cpusq"] = float(attrs.get("totalsq")) - if name == "realtime": - self.event["real"] = float(attrs.get("total")) - self.event["realsq"] = float(attrs.get("totalsq")) + def getProfile(self): + return self.profile - def endElement(self, name): - if name == "eventname": - self.inContent = 0 - self.eventname = "".join(self.contentData) - self.profile[self.db][self.host][self.eventname] = {} - self.event = self.profile[self.db][self.host][self.eventname] - if name == "stats": - self.event["onereal"] = self.event["real"] / self.event["count"] - self.event["onecpu"] = self.event["cpu"] / self.event["count"] - - def characters(self, chars): - if self.inContent: - self.contentData.append(chars) - - def getProfile(self): - return self.profile - - def extract(self, file=False): - if not file: - file = open("profile.xml") - self.profile = {} - self.inContent = 0 - self.parser.parse(file) - return self.profile - - + def extract(self,file=False): + if (file==False): + file=open("profile.xml") + self.profile={} + self.inContent=0 + self.parser.parse(file) + return self.profile + class SocketProfile: - def __init__(self, host='localhost', port=3811): - self.sock = SocketSource() - self.sock.connect((host, port)) - - def extract(self): - return ExtractProfile().extract(self.sock) - - + def __init__(self,host='localhost',port=3811): + self.sock=SocketSource() + self.sock.connect((host,port)) + + def extract(self): + return ExtractProfile().extract(self.sock) + class SocketSource (socket.socket): - """Stub class for extending socket object to support file source mechanics""" - def read(self, what): - """Alias recv to read, missing in socket.socket""" - return self.recv(what, 0) + """Stub class for extending socket object to support file source mechanics""" + def read(self,what): + """Alias recv to read, missing in socket.socket""" + return self.recv(what,0) if __name__ == '__main__': print "\nNot a valid entry point" diff --git a/files/cgi-bin/noc/ng/report.py b/files/cgi-bin/noc/ng/report.py index 005d8f2..a9e7a8a 100755 --- a/files/cgi-bin/noc/ng/report.py +++ b/files/cgi-bin/noc/ng/report.py @@ -1,7 +1,7 @@ #!/usr/bin/python ##################################################################### -### THIS FILE IS MANAGED BY PUPPET +### THIS FILE IS MANAGED BY PUPPET ### puppet:///files/cgi-bin/noc/ng/report.py ##################################################################### @@ -9,114 +9,108 @@ import config -db = config.db +db=config.db -sort = "real" -limit = 50 +sort="real" +limit=50 -prefix = "" +prefix="" from extractprofile import SocketProfile import cgi import sys -import cgitb -cgitb.enable() +import cgitb; cgitb.enable() +import socket import shelve -print "Content-type: text/html" +print "Content-type: text/html"; print "\n" -form = cgi.SvFormContentDict() +form=cgi.SvFormContentDict() store = shelve.open('/var/run/profile-baselines') if "db" in form: - db = form["db"] + db=form["db"] if "sort" in form: - sort = form["sort"] + sort=form["sort"] -if "limit" in form: - limit = int(form["limit"]) +if "limit" in form: limit=int(form["limit"]) -if "prefix" in form: - prefix = form["prefix"] +if "prefix" in form: prefix=form["prefix"] if "compare" in form: - compare = form["compare"] - compared = store[compare] -else: - compare = "" - compared = None + compare=form["compare"] + compared=store[compare] +else: + compare="" + compared=None if 'sample' not in form: - fullprofile = SocketProfile(config.host, config.port).extract() - sample = "" + fullprofile=SocketProfile(config.host,config.port).extract() + sample="" else: - fullprofile = store[form['sample']] - sample = form['sample'] + fullprofile=store[form['sample']] + sample=form['sample'] -dbs = fullprofile.keys() -try: - events = fullprofile[db]["-"].items() -except KeyError: - print "<div>OMG YOU DIDNT SELECT DB OR IT DOESNT EXIST</div>" - for dbname in dbs: - print " [<a href='report.py?db=%s'>%s</a>] " % (dbname, dbname) - sys.exit() -total = fullprofile[db]["-"]["-total"] + + +dbs=fullprofile.keys() +try: events=fullprofile[db]["-"].items() +except KeyError: + print "<div>OMG YOU DIDNT SELECT DB OR IT DOESNT EXIST</div>" + for dbname in dbs: + print " [<a href='report.py?db=%s'>%s</a>] "%(dbname,dbname) + sys.exit() +total=fullprofile[db]["-"]["-total"] # Limit the scope if compare: - compared = compared[db]["-"] - oldtotal = compared["-total"] + compared=compared[db]["-"] + oldtotal=compared["-total"] #cache.close() -if sort == "name": - events.sort(lambda x, y: cmp(x[0], y[0])) +if sort=="name": + events.sort(lambda x,y: cmp(x[0],y[0])) else: - events.sort(lambda y, x: cmp(x[1][sort], y[1][sort])) + events.sort(lambda y,x: cmp(x[1][sort],y[1][sort])) - -def surl(stype, stext=None, limit=50): - """ Simple URL formatter for headers """ - if stext is None: - stext = stype - if stype == sort: - return """<td><b>%s</b></td>""" % stext - return """<td><a href='report.py?db=%s&sort=%s&limit=%d&sample=%s&compare=%s&prefix=%s'>%s</a></td>""" % (db, stype, limit, sample, compare, prefix, stext) +def surl(stype,stext=None,limit=50): + """ Simple URL formatter for headers """ + if(stext==None): stext=stype + if stype==sort: return """<td><b>%s</b></td>"""%stext + return """<td><a href='report.py?db=%s&sort=%s&limit=%d&sample=%s&compare=%s&prefix=%s'>%s</a></td>"""%(db,stype,limit,sample,compare,prefix,stext) print """ <style> table { width: 100%; font-size: 9pt; } -td { cell-padding: 1px; - text-align: right; - vertical-align: top; - argin: 2px; - border: 1px silver dotted; - white-space: nowrap; - background-color: #eeeeee; +td { cell-padding: 1px; + text-align: right; + vertical-align: top; + argin: 2px; + border: 1px silver dotted; + white-space: nowrap; + background-color: #eeeeee; } td.name { text-align: left; width: 100%; white-space: normal;} tr.head td { text-align: center; } </style>""" if sample: - print "<div>Using old sample: %s, <a href='report.py?db=%s'>reset to current</a></div>" % (sample, db) + print "<div>Using old sample: %s, <a href='report.py?db=%s'>reset to current</a></div>" % (sample,db) # Top list of databases for dbname in dbs: - if db == dbname: - print " [%s] " % dbname - else: - print " [<a href='report.py?db=%s'>%s</a>] " % (dbname, dbname) + if db == dbname: print " [%s] "%dbname + else: print " [<a href='report.py?db=%s'>%s</a>] "%(dbname,dbname) -if limit == 50: - print " [ showing %d events, <a href='report.py?db=%s&sort=%s&sample=%s&compare=%s&limit=5000'>show more</a> ] " % (limit, db, sort, sample, compare) +if limit==50: + print " [ showing %d events, <a href='report.py?db=%s&sort=%s&sample=%s&compare=%s&limit=5000'>show more</a> ] " % (limit,db,sort,sample,compare) else: - print " [ showing %d events, <a href='report.py?db=%s&sort=%s&sample=%s&compare=%s&limit=50'>show less</a> ] " % (limit, db, sort, sample, compare) + print " [ showing %d events, <a href='report.py?db=%s&sort=%s&sample=%s&compare=%s&limit=50'>show less</a> ] " % (limit,db,sort,sample,compare) print " [ <a href='admin.py'>admin</a> ]</div>" @@ -125,12 +119,12 @@ <input type='hidden' name='sort' value='%s'> <input type='hidden' name='limit' value='%d'> <input type='hidden' name='sample' value='%s'> -<select name='compare'><option></option>""" % (db, sort, limit, sample) +<select name='compare'><option></option>""" %(db,sort,limit,sample) -samples = store.keys() +samples=store.keys() samples.sort() for baseline in samples: - print "<option%s>%s</option>" % ((compare == baseline and " SELECTED" or ""), baseline) + print "<option%s>%s</option>" % ((compare==baseline and " SELECTED" or ""),baseline) print "</select><input type='submit' value='compare'></form>" @@ -146,13 +140,13 @@ #print "<td>change</td>" #print surl("onecpu","cpu/c") #print "<td>change</td>" -print surl("real", "real%") +print surl("real","real%") print "<td>change</td>" -print surl("onereal", "real/c") +print surl("onereal","real/c") print "<td>change</td>" print "</tr>" -rowformat = """ +rowformat=""" <tr class="data"><td class="name">%s</td><td>%d</td> <td>%.2f</td><td>%.1f</td><td>%.2f</td><td>%.1f</td></tr>""" @@ -162,7 +156,7 @@ # cputime: total compared percall compared # realtime: total compared percall compared -comparedformat = """ +comparedformat=""" <tr class="data"><td class="name">%s</td> <td>%d</td><td>%.2f</td><td>%.1f</td> <td>%.2f</td><td>%.1f</td><td>%.1f</td><td>%.1f</td> @@ -171,69 +165,63 @@ # This is really really hacky way of reporting percentages -# And this is output of results. +# And this is output of results. for event in events: - (name, event) = event - if name == "close": - continue - if not name.startswith(prefix): - continue - if compared and name in compared: - old = compared[name] - else: - old = None - - limit -= 1 - if limit < 0: - break - - callcount = float(event["count"]) / total["count"] - try: - cpupct = event["cpu"] / total["cpu"] - except ZeroDivisionError: - cpupct = 0 - onecpu = event["onecpu"] - realpct = event["real"] / total["real"] - onereal = event["onereal"] - - if old: - try: - oldcount = float(old["count"]) / oldtotal["count"] - countdiff = (callcount - oldcount) / oldcount - - oldcpupct = old["cpu"] / oldtotal["cpu"] - cpupctdiff = (cpupct - oldcpupct) / oldcpupct - - onecpudiff = (onecpu - old["onecpu"]) / old["onecpu"] - - oldrealpct = old["real"] / oldtotal["real"] - realpctdiff = (realpct - oldrealpct) / oldrealpct - - onerealdiff = (onereal - old["onereal"]) / old["onereal"] - except ZeroDivisionError: - countdiff = 0 - cpupctdiff = 0 - onecpudiff = 0 - realpctdiff = 0 - onerealdiff = 0 - else: - countdiff = 0 - cpupctdiff = 0 - onecpudiff = 0 - realpctdiff = 0 - onerealdiff = 0 - - dbg = 0 - - if dbg and name == "wfMsgReal": - print old - print oldtotal - print event - print total - if not dbg: - print comparedformat % (name.replace(",", ", "), - event["count"], callcount, countdiff * 100, - realpct * 100, realpctdiff * 100, - onereal * 1000, onerealdiff * 100) + (name,event)=event + if name=="close": continue + if not name.startswith(prefix): continue + if compared and name in compared: old=compared[name] + else: old=None + + limit-=1 + if limit<0: break + + callcount=float(event["count"])/total["count"] + try: cpupct=event["cpu"]/total["cpu"] + except ZeroDivisionError: cpupct=0 + onecpu=event["onecpu"] + realpct=event["real"]/total["real"] + onereal=event["onereal"] + + if old: + try: + oldcount=float(old["count"])/oldtotal["count"] + countdiff = (callcount-oldcount)/oldcount + + oldcpupct = old["cpu"]/oldtotal["cpu"] + cpupctdiff = (cpupct-oldcpupct)/oldcpupct + + onecpudiff = ( onecpu - old["onecpu"] ) / old["onecpu"] + + oldrealpct = old["real"]/oldtotal["real"] + realpctdiff = (realpct-oldrealpct)/oldrealpct + + onerealdiff = ( onereal - old["onereal"] ) / old["onereal"] + except ZeroDivisionError: + countdiff=0 + cpupctdiff=0 + onecpudiff=0 + realpctdiff=0 + onerealdiff=0 + else: + countdiff=0 + cpupctdiff=0 + onecpudiff=0 + realpctdiff=0 + onerealdiff=0 + + dbg=0 + + if dbg and name=="wfMsgReal": + print old + print oldtotal + print event + print total + if not dbg: print comparedformat % ( + name.replace(",",", "), + event["count"], callcount,countdiff*100, + realpct*100,realpctdiff*100, + onereal*1000,onerealdiff*100 + ) print "</table>" diff --git a/files/cgi-bin/noc/rep.py b/files/cgi-bin/noc/rep.py index 6215f7b..c15d590 100755 --- a/files/cgi-bin/noc/rep.py +++ b/files/cgi-bin/noc/rep.py @@ -1,7 +1,7 @@ #!/usr/bin/python ##################################################################### -### THIS FILE IS MANAGED BY PUPPET +### THIS FILE IS MANAGED BY PUPPET ### puppet:///files/cgi-bin/noc/rep.py ##################################################################### @@ -11,95 +11,86 @@ profileport = 3811 #db="enwiki" -db = "all" -sort = "real" -limit = 50 -prefix = "" +db="all" +sort="real" +limit=50 +prefix="" from extractprofile import ExtractProfile import cgi -import cgitb -cgitb.enable() +import cgitb; cgitb.enable() import socket -print "Content-type: text/html" +print "Content-type: text/html"; print "\n" -form = cgi.SvFormContentDict() +form=cgi.SvFormContentDict() if "db" in form: - db = form["db"] + db=form["db"] if "sort" in form: - sort = form["sort"] + sort=form["sort"] if "prefix" in form: - prefix = form["prefix"] + prefix=form["prefix"] -if "limit" in form: - limit = int(form["limit"]) +if "limit" in form: limit=int(form["limit"]) -compare = "none" -if "compare" in form: - compare = form["compare"] - +compare="none" +if "compare" in form: compare=form["compare"] class SocketSource (socket.socket): - def read(self, what): - return self.recv(what, 0) -sock = SocketSource() -sock.connect((profilehost, profileport)) + def read(self,what): + return self.recv(what,0) +sock=SocketSource() +sock.connect((profilehost,profileport)) -cache = {} -fullprofile = ExtractProfile().extract(sock) -events = fullprofile[db]["-"].items() -cache[db] = events -cache["_dbs"] = fullprofile.keys() -dbs = cache["_dbs"] +cache={} +fullprofile=ExtractProfile().extract(sock) +events=fullprofile[db]["-"].items() +cache[db]=events +cache["_dbs"]=fullprofile.keys() +dbs=cache["_dbs"] -total = fullprofile[db]["-"]["-total"] +total=fullprofile[db]["-"]["-total"] #cache.close() -if sort == "name": - events.sort(lambda x, y: cmp(x[0], y[0])) +if sort=="name": + events.sort(lambda x,y: cmp(x[0],y[0])) else: - events.sort(lambda y, x: cmp(x[1][sort], y[1][sort])) + events.sort(lambda y,x: cmp(x[1][sort],y[1][sort])) - -def surl(stype, stext=None, limit=50): - if(stext is None): - stext = stype - if stype == sort: - return """<td>%s</td>""" % stext - return """<td><a href='report.py?db=%s&sort=%s&limit=%d'>%s</a></td>""" % (db, stype, limit, stext) +def surl(stype,stext=None,limit=50): + if(stext==None): stext=stype + if stype==sort: return """<td>%s</td>"""%stext + return """<td><a href='report.py?db=%s&sort=%s&limit=%d'>%s</a></td>"""%(db,stype,limit,stext) print """ <style> table { width: 100%; } -td { cell-padding: 1px; - text-align: right; - vertical-align: top; - margin: 2px; - border: 1px silver dotted; - background-color: #eeeeee; +td { cell-padding: 1px; + text-align: right; + vertical-align: top; + argin: 2px; + border: 1px silver dotted; + background-color: #eeeeee; } td.name { text-align: left; width: 100%;} tr.head td { text-align: center; } </style>""" for dbname in dbs: - if db == dbname: - print " [%s] " % dbname - else: - print " [<a href='report.py?db=%s'>%s</a>] " % (dbname, dbname) + if db == dbname: print " [%s] "%dbname + else: print " [<a href='report.py?db=%s'>%s</a>] "%(dbname,dbname) -if limit == 50: - print " [ showing %d events, <a href='report.py?db=%s&sort=%s&limit=5000'>show more</a> ] " % (limit, db, sort) +if limit==50: + print " [ showing %d events, <a href='report.py?db=%s&sort=%s&limit=5000'>show more</a> ] " % (limit,db,sort) else: - print " [ showing %d events, <a href='report.py?db=%s&sort=%s&limit=50'>show less</a> ] " % (limit, db, sort) + print " [ showing %d events, <a href='report.py?db=%s&sort=%s&limit=50'>show less</a> ] " % (limit,db,sort) print """ @@ -107,25 +98,22 @@ <tr class="head">""" print surl("name") print surl("count") -print surl("cpu", "cpu%") -print surl("onecpu", "cpu/c") -print surl("real", "real%") -print surl("onereal", "real/c") +print surl("cpu","cpu%") +print surl("onecpu","cpu/c") +print surl("real","real%") +print surl("onereal","real/c") print "</tr>" -rowformat = """<tr class="data"><td class="name">%s</td><td>%d</td> - <td>%.3g</td><td>%.3g</td><td>%.3g</td><td>%.3g</td></tr>""" +rowformat="""<tr class="data"><td class="name">%s</td><td>%d</td> + <td>%.3g</td><td>%.3g</td><td>%.3g</td><td>%.3g</td></tr>""" for event in events: - if event[0] == "close": - continue - if not event[0].startswith(prefix): - continue - limit -= 1 - if limit < 0: - break - print rowformat % \ - (event[0].replace(",", ", "), event[1]["count"], event[1]["cpu"] / total["cpu"] * 100, event[1]["onecpu"] * 1000, - event[1]["real"] / total["real"] * 100, event[1]["onereal"] * 1000) + if event[0]=="close": continue + if not event[0].startswith(prefix): continue + limit-=1 + if limit<0: break + print rowformat % \ + (event[0].replace(",",", "),event[1]["count"],event[1]["cpu"]/total["cpu"]*100,event[1]["onecpu"]*1000,\ + event[1]["real"]/total["real"]*100,event[1]["onereal"]*1000) print "</table>" diff --git a/files/cgi-bin/noc/report.py b/files/cgi-bin/noc/report.py index b772e92..86067e7 100755 --- a/files/cgi-bin/noc/report.py +++ b/files/cgi-bin/noc/report.py @@ -10,24 +10,23 @@ profilehost = "professor.pmtpa.wmnet" profileport = 3811 -db = "all" -sort = "real" -limit = 50 -prefix = "" +db="all" +sort="real" +limit=50 +prefix="" from extractprofile import ExtractProfile import cgi -import cgitb -cgitb.enable() +import cgitb; cgitb.enable() import socket import codecs import sys -print "Content-type: text/html; charset=utf-8" +print "Content-type: text/html; charset=utf-8"; print "\n" utf8 = codecs.getencoder("UTF-8") @@ -43,49 +42,48 @@ prefix = form["prefix"] if "limit" in form: - limit = int(form["limit"]) + limit=int(form["limit"]) -compare = "none" +compare="none" if "compare" in form: compare = form["compare"] - class SocketSource (socket.socket): def read(self, what): enc = self.recv(what, 0) return enc.decode('latin-1').encode('utf-8') -sock = SocketSource() +sock=SocketSource() sock.connect((profilehost, profileport)) -cache = {} -fullprofile = ExtractProfile().extract(sock) +cache={} +fullprofile=ExtractProfile().extract(sock) try: - events = fullprofile[db]["-"].items() + events=fullprofile[db]["-"].items() except KeyError: for dbname in fullprofile.keys(): print " [<a href='report.py?db=%s'>%s</a>] " % (dbname, dbname) sys.exit(0) + -cache[db] = events -cache["_dbs"] = fullprofile.keys() -dbs = cache["_dbs"] +cache[db]=events +cache["_dbs"]=fullprofile.keys() +dbs=cache["_dbs"] -total = fullprofile[db]["-"]["-total"] +total=fullprofile[db]["-"]["-total"] #cache.close() -if sort == "name": - events.sort(lambda x, y: cmp(x[0], y[0])) +if sort=="name": + events.sort(lambda x,y: cmp(x[0], y[0])) else: - events.sort(lambda y, x: cmp(x[1][sort], y[1][sort])) - + events.sort(lambda y,x: cmp(x[1][sort], y[1][sort])) def surl(stype, stext=None, limit=50): - if (stext is None): + if (stext == None): stext = stype if stype == sort: - return """<td>%s</td>""" % stext + return """<td>%s</td>"""%stext return """<td><a href='report.py?db=%s&sort=%s&limit=%d'>%s</a></td>""" % (db, stype, limit, stext) print """ @@ -104,11 +102,11 @@ for dbname in dbs: if db == dbname: - print " [%s] " % dbname + print " [%s] "% dbname else: print " [<a href='report.py?db=%s'>%s</a>] " % (dbname, dbname) -if limit == 50: +if limit==50: print " [ showing %d events, <a href='report.py?db=%s&sort=%s&limit=5000'>show more</a> ] " % (limit, db, sort) else: print " [ showing %d events, <a href='report.py?db=%s&sort=%s&limit=50'>show less</a> ] " % (limit, db, sort) @@ -119,10 +117,10 @@ <tr class="head">""" print surl("name") print surl("count") -print surl("cpu", "cpu%") -print surl("onecpu", "cpu/c") -print surl("real", "real%") -print surl("onereal", "real/c") +print surl("cpu","cpu%") +print surl("onecpu","cpu/c") +print surl("real","real%") +print surl("onereal","real/c") print "</tr>" rowformat = u"""<tr class="data"><td class="name">%s</td><td>%d</td> @@ -133,12 +131,12 @@ continue if not event[0].startswith(prefix): continue - + limit -= 1 if limit < 0: break row = rowformat % \ - (event[0].replace(",", ", "), event[1]["count"], event[1]["cpu"] / total["cpu"] * 100, event[1]["onecpu"] * 1000, + (event[0].replace(",",", "), event[1]["count"], event[1]["cpu"] / total["cpu"] * 100, event[1]["onecpu"] *1000, event[1]["real"] / total["real"] * 100, event[1]["onereal"] * 1000) print utf8(row)[0] -- To view, visit https://gerrit.wikimedia.org/r/66543 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I050ff93d18e3c466baf1029464c99d5d63c2152e Gerrit-PatchSet: 1 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Mark Bergsma <m...@wikimedia.org> Gerrit-Reviewer: Mark Bergsma <m...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits