diff --git a/monitoring_status/controllers/main.py b/monitoring_status/controllers/main.py index bfa702c..690ba42 100644 --- a/monitoring_status/controllers/main.py +++ b/monitoring_status/controllers/main.py @@ -5,9 +5,12 @@ import logging import json +import psycopg2 + import werkzeug from odoo import http +from odoo.http import request from odoo.addons.web.controllers.main import ensure_db @@ -31,10 +34,24 @@ class Monitoring(http.Controller): @http.route('/monitoring/status', type='http', auth='none') def status(self): ensure_db() + http_status = 200 # TODO: add 'sub-systems' status and infos: # queue job, cron, database, ... headers = {'Content-Type': 'application/json'} info = {'status': 1} + # check the database connection + try: + cr = request.env.cr + cr.execute( + 'SELECT value ' + 'FROM ir_config_parameter ' + 'WHERE key=%s', + ('web.base.url',)) + result = cr.fetchone() + info['web.base.url'] = result or '' + except psycopg2.OperationalError as exc: + info['database_error'] = str(exc) + http_status = 503 session = http.request.session # We set a custom expiration of 1 second for this request, as we do a # lot of health checks, we don't want those anonymous sessions to be @@ -44,4 +61,6 @@ class Monitoring(http.Controller): # Redis. if not session.uid: session.expiration = 1 - return werkzeug.wrappers.Response(json.dumps(info), headers=headers) + return werkzeug.wrappers.Response( + json.dumps(info), status=http_status, headers=headers + )