33 lines
924 B
Python
33 lines
924 B
Python
|
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
|