Change the health check to ping the db and the redis build logs.

This commit is contained in:
Jake Moshenko 2014-05-13 18:53:42 -04:00
parent b3aba08426
commit 8b5c781f84
3 changed files with 27 additions and 3 deletions

View file

@ -73,6 +73,13 @@ class RedisBuildLogs(object):
return json.loads(fetched) if fetched else None return json.loads(fetched) if fetched else None
def check_health(self):
try:
return self._redis.ping() == True
except redis.ConnectionError:
return False
class BuildLogs(object): class BuildLogs(object):
def __init__(self, app=None): def __init__(self, app=None):
self.app = app self.app = app

View file

@ -1647,3 +1647,11 @@ def delete_user(user):
user.delete_instance(recursive=True, delete_nullable=True) user.delete_instance(recursive=True, delete_nullable=True)
# TODO: also delete any repository data associated # TODO: also delete any repository data associated
def check_health():
# We will connect to the db, check that it contains some log entry kinds
try:
found_count = LogEntryKind.select().count()
return found_count > 0
except:
return False

View file

@ -2,13 +2,13 @@ import logging
import os import os
from flask import (abort, redirect, request, url_for, make_response, Response, from flask import (abort, redirect, request, url_for, make_response, Response,
Blueprint, send_from_directory) Blueprint, send_from_directory, jsonify)
from flask.ext.login import current_user from flask.ext.login import current_user
from urlparse import urlparse from urlparse import urlparse
from data import model from data import model
from data.model.oauth import DatabaseAuthorizationProvider from data.model.oauth import DatabaseAuthorizationProvider
from app import app, billing as stripe from app import app, billing as stripe, build_logs
from auth.auth import require_session_login from auth.auth import require_session_login
from auth.permissions import AdministerOrganizationPermission from auth.permissions import AdministerOrganizationPermission
from util.invoice import renderInvoiceToPdf from util.invoice import renderInvoiceToPdf
@ -139,7 +139,16 @@ def v1():
@web.route('/status', methods=['GET']) @web.route('/status', methods=['GET'])
@no_cache @no_cache
def status(): def status():
return make_response('Healthy') db_healthy = model.check_health()
buildlogs_healthy = build_logs.check_health()
response = jsonify({
'db_healthy': db_healthy,
'buildlogs_healthy': buildlogs_healthy,
})
response.status_code = 200 if db_healthy and buildlogs_healthy else 503
return response
@web.route('/tos', methods=['GET']) @web.route('/tos', methods=['GET'])