From d25fdd41a6a4f376a3c54877ec18dcd3b5790b8a Mon Sep 17 00:00:00 2001 From: Feike Steenbergen Date: Tue, 12 May 2015 14:14:20 +0200 Subject: [PATCH] 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. --- helpers/statuspage.py | 44 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/helpers/statuspage.py b/helpers/statuspage.py index 9aae769b..ee535b54 100644 --- a/helpers/statuspage.py +++ b/helpers/statuspage.py @@ -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()