У меня есть приложение Flask , у которого есть несколько конечных точек, из которых 3 предназначены для управления приложением Flask .Существует переменная health_status
, значение которой изначально равно " UP " - строка.
/ check = проверяет состояние колбыприложение.вверх или вниз.
/ up = изменяет значение переменной на «UP», значение которой используется в качестве проверки перед обслуживанием любого запроса
/ down = изменяет значение переменной на « DOWN »
Когда health_status
равен « UP «Приложение может обслуживать любые конечные точки, которые оно предоставляет.Когда это значение равно « DOWN », оно просто возвращает ошибку 500 для любой конечной точки исключения / повышения конечной точки API, которая возвращает состояние работоспособности сервера (я проверяю перед выполнением любого APIзвоните, используя @app.before_request
в Flask).
Я хочу знать, является ли это предпочтительным.Есть ли альтернатива для выполнения такой задачи?
health_check.py:
from flask.json import jsonify
from app.common.views.api_view import APIView
from app import global_config
class View(APIView):
def check(self):
return jsonify({'status': f"Workload service is {global_config.health_status}"})
def up(self):
global_config.health_status = "UP"
return jsonify({'status': "Workload service is up and running"})
def down(self):
global_config.health_status = "DOWN"
return jsonify({'status': f"Workload service stopped"})
global_config.py:
workload_health_status = "UP"
app / __ init__.py:
from flask import Flask, request, jsonify
from app import global_config
excluded_paths = ['/api/health/up/', '/api/health/down/']
def register_blueprints(app):
from .health import healthcheck_api
app.register_blueprint(healthcheck_api, url_prefix="/api/health")
def create_app(**kwargs):
app = Flask(__name__, **kwargs)
register_blueprints(app)
@app.before_request
def health_check_test():
if request.path not in excluded_paths and global_config.workload_health_status == "DOWN":
return jsonify({"status": "Workload service is NOT running"}), 500
return app