我有一个Flask应用程序,该应用程序具有一些端点,其中3个端点用于管理Flask应用程序。有一个变量health_status
,其值最初是“ UP”-字符串。
/ check =检查烧瓶应用程序的状态。无论是向上还是向下。
// up =将变量的值更改为“ UP”,该变量的值在提供任何请求之前用作检查]
/ down =将变量的值更改为“ DOWN”
当health_status
为“ UP”时,该应用程序可以为其提供的任何端点服务。当它为“ DOWN”时,对于任何API终结点excep / up终结点,它仅返回500错误,从而使服务器恢复健康状态(我在使用执行任何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"
应用程序/ __ 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
您可以只使用应用程序的内置config object并从应用程序中的任何位置查询/更新它,例如app.config['health_status'] = 'UP'
。这将消除对global_config
对象的需要。使用@app.before_request
检查运行状况可能仍然是检查此值的最简便方法。