diff --git a/requirements.txt b/requirements.txt index 02a73d9..eec70c7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,3 +10,4 @@ flask-marshmallow paho-mqtt flask-mqtt psycopg2-binary +py-healthcheck \ No newline at end of file diff --git a/src/app.py b/src/app.py index 1757ccf..e7ed446 100644 --- a/src/app.py +++ b/src/app.py @@ -6,6 +6,7 @@ import sentry_sdk from sentry_sdk.integrations.flask import FlaskIntegration from sentry_sdk.integrations.logging import LoggingIntegration from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration +from healthcheck import HealthCheck from resources import * from config import * @@ -14,6 +15,7 @@ from marshm import ma from mqtt_flask_instance import mqtt from mqtt_methods import handle_status_message +from healthchecks import health_database_status """ Main Flask RESTful API @@ -53,6 +55,7 @@ api = Api(app) db.init_app(app) ma.init_app(app) mqtt.init_app(app) +health = HealthCheck(app, "/healthz") with app.app_context(): db.create_all() @@ -98,6 +101,8 @@ api.add_resource(SensorResource, "/devices/{deviceid}/{sensorid}") api.add_resource(SensorOfflineResource, "/devices/{deviceid}/{sensorid}/offline") api.add_resource(SensorOnlineResource, "/devices/{deviceid}/{sensorid}/online") +health.add_check(health_database_status) + if __name__ == "__main__": app.run( debug=bool(DEBUG), diff --git a/src/healthchecks.py b/src/healthchecks.py new file mode 100644 index 0000000..e4a11e7 --- /dev/null +++ b/src/healthchecks.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 + +from db import db + +""" +Healthchek functions +""" + +__author__ = "@tormakris" +__copyright__ = "Copyright 2020, Birbnetes Team" +__module_name__ = "healthchecks" +__version__text__ = "1" + + +def health_database_status(): + is_database_working = True + output = 'database is ok' + try: + db.session.execute('SELECT 1') + except Exception as e: + output = str(e) + is_database_working = False + return is_database_working, output \ No newline at end of file