diff --git a/Dockerfile b/Dockerfile index d1307b102..0011a98f2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -55,6 +55,8 @@ RUN mkdir /usr/local/nginx/logs/ RUN TEST=true venv/bin/python -m unittest discover -f RUN TEST=true venv/bin/python -m test.registry_tests -f +RUN PYTHONPATH=. venv/bin/alembic heads > ALEMBIC_HEAD + VOLUME ["/conf/stack", "/var/log", "/datastorage", "/tmp", "/conf/etcd"] EXPOSE 443 8443 80 diff --git a/endpoints/web.py b/endpoints/web.py index 8a3500790..110e145a2 100644 --- a/endpoints/web.py +++ b/endpoints/web.py @@ -8,6 +8,7 @@ from urlparse import urlparse from health.healthcheck import get_healthchecker from data import model +from data.database import db from data.model.oauth import DatabaseAuthorizationProvider from app import app, billing as stripe, build_logs, avatar, signer, log_archive from auth.auth import require_session_login, process_oauth @@ -227,6 +228,30 @@ def endtoend_health(): return response +@web.route('/health/dbrevision', methods=['GET']) +@route_show_if(features.BILLING) +@no_cache +def dbrevision_health(): + # Find the revision from the database. + result = db.execute_sql('select * from alembic_version limit 1').fetchone() + db_revision = result[0] + + # Find the local revision from the file system. + with open('ALEMBIC_HEAD', 'r') as f: + local_revision = f.readline().split(' ')[0] + + data = { + 'db_revision': db_revision, + 'local_revision': local_revision, + } + + status_code = 200 if db_revision == local_revision else 400 + + response = jsonify(dict(data=data, status_code=status_code)) + response.status_code = status_code + return response + + @web.route('/tos', methods=['GET']) @no_cache def tos():