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
def check_health(self):
try:
return self._redis.ping() == True
except redis.ConnectionError:
return False
class BuildLogs(object):
def __init__(self, app=None):
self.app = app

View file

@ -1647,3 +1647,11 @@ def delete_user(user):
user.delete_instance(recursive=True, delete_nullable=True)
# 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
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 urlparse import urlparse
from data import model
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.permissions import AdministerOrganizationPermission
from util.invoice import renderInvoiceToPdf
@ -139,7 +139,16 @@ def v1():
@web.route('/status', methods=['GET'])
@no_cache
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'])