[IMP] monitoring_status: check the db is reachable

make a real SQL query on GET /monitoring/status and return a 503
if the query failed.
This commit is contained in:
Alexandre Fayolle
2019-10-25 16:25:54 +02:00
parent 529ae1052f
commit 7a4f43d1fa
+20 -1
View File
@@ -4,9 +4,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
@@ -30,10 +33,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
@@ -43,4 +60,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
)