Hello,
> For data this predictable, simple regex matching will probably work fine.
I thought that too...
Anyway - here's what I've come up with:
#!/usr/bin/python
import urllib, sgmllib, re
mod_status = urllib.urlopen("http://10.1.2.201/server-status")
status_info = mod_status.read()
mod_status.close()
class StatusParser(sgmllib.SGMLParser):
def parse(self, string):
self.feed(string)
self.close()
def __init__(self, verbose=0):
sgmllib.SGMLParser.__init__(self, verbose)
self.information = []
self.inside_dt_element = False
def start_dt(self, attributes):
self.inside_dt_element = True
def end_dt(self):
self.inside_dt_element = False
def handle_data(self, data):
if self.inside_dt_element:
self.information.append(data)
def get_data(self):
return self.information
status_parser = StatusParser()
status_parser.parse(status_info)
rps_pattern = re.compile( '(\d+\.\d+) requests/sec' )
connections_pattern = re.compile( '(\d+) requests\D*(\d+) idle.*' )
for line in status_parser.get_data():
rps_match = rps_pattern.search( line )
connections_match = connections_pattern.search( line )
if rps_match:
rps = float(rps_match.group(1))
elif connections_match:
connections = int(connections_match.group(1)) +
int(connections_match.group(2))
rps_threshold = 10
connections_threshold = 100
if rps > rps_threshold:
print "CRITICAL: %s Requests per second" % rps
else:
print "OK: %s Requests per second" % rps
if connections > connections_threshold:
print "CRITICAL: %s Simultaneous Connections" % connections
else:
print "OK: %s Simultaneous Connections" % connections
Comments and criticism please.
S.
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor