Demon has uploaded a new change for review.
https://gerrit.wikimedia.org/r/52729
Change subject: Fix various noc files to be pep8 compliant
......................................................................
Fix various noc files to be pep8 compliant
Change-Id: I933e9d58c9b4403c66a61d2c6399c6cb5b78ff0b
---
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, 372 insertions(+), 346 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/operations/puppet
refs/changes/29/52729/1
diff --git a/files/cgi-bin/noc/extractprofile.py
b/files/cgi-bin/noc/extractprofile.py
index a18967d..8cada4b 100755
--- a/files/cgi-bin/noc/extractprofile.py
+++ b/files/cgi-bin/noc/extractprofile.py
@@ -2,73 +2,71 @@
# 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 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 __init__(self):
+ self.parser = make_parser()
+ self.parser.setFeature(feature_namespaces, 0)
+ self.parser.setContentHandler(self)
- 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":
+ 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 extract(self,file=False):
- if (file==False):
- file=open("profile.xml")
- self.profile={}
- self.inContent=0
- self.parser.parse(file)
- 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
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 1e2e20e..3561bf9 100755
--- a/files/cgi-bin/noc/ng/admin.py
+++ b/files/cgi-bin/noc/ng/admin.py
@@ -1,57 +1,58 @@
#!/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 8cc92e3..a2de7ef 100755
--- a/files/cgi-bin/noc/ng/extractprofile.py
+++ b/files/cgi-bin/noc/ng/extractprofile.py
@@ -2,85 +2,86 @@
# 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 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 __init__(self):
+ self.parser = make_parser()
+ self.parser.setFeature(feature_namespaces, 0)
+ self.parser.setContentHandler(self)
- def getProfile(self):
- return self.profile
+ 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 extract(self,file=False):
- if (file==False):
- file=open("profile.xml")
- self.profile={}
- self.inContent=0
- self.parser.parse(file)
- 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
+
+
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 a9e7a8a..005d8f2 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,108 +9,114 @@
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==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 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)
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>"
@@ -119,12 +125,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>"
@@ -140,13 +146,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>"""
@@ -156,7 +162,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>
@@ -165,63 +171,69 @@
# 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 c15d590..6215f7b 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,86 +11,95 @@
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==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 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)
print """
<style>
table { width: 100%; }
-td { cell-padding: 1px;
- text-align: right;
- vertical-align: top;
- argin: 2px;
- border: 1px silver dotted;
- background-color: #eeeeee;
+td { cell-padding: 1px;
+ text-align: right;
+ vertical-align: top;
+ margin: 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 """
@@ -98,22 +107,25 @@
<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 86067e7..b772e92 100755
--- a/files/cgi-bin/noc/report.py
+++ b/files/cgi-bin/noc/report.py
@@ -10,23 +10,24 @@
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")
@@ -42,48 +43,49 @@
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 == None):
+ if (stext is 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 """
@@ -102,11 +104,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)
@@ -117,10 +119,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>
@@ -131,12 +133,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/52729
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I933e9d58c9b4403c66a61d2c6399c6cb5b78ff0b
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Demon <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits