Refactoring of the status page for the healthcheck.

Less functions, as the code is readable enough without them.
Always return some content to the client, instead of a response only.
This commit is contained in:
Feike Steenbergen
2015-05-12 14:14:20 +02:00
parent a56b346295
commit d25fdd41a6
+21 -23
View File
@@ -9,27 +9,23 @@ class StatusPage(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/pg_master':
self.pg_master()
if not self.pg_is_in_recovery():
response, content = 200, 'I am currently a master'
else:
response, content = 503, 'I am not a master'
elif self.path == '/pg_slave':
self.pg_slave()
if self.pg_is_in_recovery():
response, content = 200, 'I am currently a slave'
else:
response, content = 503, 'I am not a slave'
elif self.path == '/pg_status':
self.pg_status()
response, content = 200, self.pg_status()
else:
self.send_response(404)
response, content = 404, 'Page not found'
def pg_master(self):
if not self.pg_is_in_recovery():
self.send_response(200)
return
self.send_response(503)
def pg_slave(self):
if self.pg_is_in_recovery():
self.send_response(200)
return
self.send_response(503)
self.send_response(response)
self.end_headers()
self.wfile.write(content)
def pg_is_in_recovery(self):
cursor = self.server.postgresql.cursor()
@@ -48,13 +44,12 @@ class StatusPage(BaseHTTPRequestHandler):
to_char(pg_postmaster_start_time(), 'YYYY-MM-DD HH24:MI:SS.MS TZ')
""")
res = cursor.fetchone()
status = {'role': ('master' if not res[0] else 'slave'), 'recovery': {'last_transaction_replayed': res[1],
status = {'role': ('master' if not res[0] else 'slave'), 'recovery': {'last_transaction_timestamp': res[1],
'delay': res[2]}, 'server': {'hostaddr': res[3], 'port': res[4], 'start_time': res[5]}}
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(status))
return json.dumps(status)
def getHTTPServer(postgresql, http_port=8081, listen_address='0.0.0.0'):
@@ -84,5 +79,8 @@ if __name__ == '__main__':
postgres_config['listen'] = sys.argv[1]
postgresql = Postgresql(postgres_config, aws_host_address)
getHTTPServer(postgresql, 8081, '0.0.0.0').serve_forever()
logging.debug('Abc')
http_port = 8081
if len(sys.argv) > 2:
http_port = int(sys.argv[2])
getHTTPServer(postgresql, http_port, '0.0.0.0').serve_forever()