mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-08-25 14:53:37 +00:00
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:
+21
-23
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user