from datetime import datetime from enum import Enum from flask.views import MethodView import marshmallow as ma from app import Application from . import routes as blp instance = Application.get_instance() class HealthStatus(Enum): OK = 0 WARNING = 1 ERROR = 2 CRITICAL = 3 class HealthGet(ma.Schema): alive_since = ma.fields.String() alive_for = ma.fields.String() status = ma.fields.Enum(HealthStatus, type=ma.fields.String) @blp.route("/health") class ApiVersion(MethodView): @blp.doc(summary="Returns the status and alive-time of the server") @blp.response(200, HealthGet, description="Successful operation") def get(self): response = { "alive_since": datetime.strftime(instance.alive_since, "%d.%m.%Y %H:%M:%S"), "alive_for": str(datetime.now() - instance.alive_since), "status": HealthStatus.OK } return response