如何跟踪其值在烧瓶应用的整个生命周期中不断变化的变量?



我有一个 Flask 应用程序,它有一些端点,其中 3 个用于管理Flask应用程序。有一个变量health_status其值最初是">UP" - 字符串。

/check= 检查烧瓶应用的状态,是启动还是关闭。

/up= 将变量的值更改为"UP",其值在提供任何请求之前用作检查

/down= 将变量的值更改为">DOWN">

health_status为">UP">时,应用可以为它提供的任何终结点提供服务。当它为">DOWN">时,它只是为任何 API 端点返回500错误,超过/up 端点,这会带回服务器运行状况(我在使用 Flask 中的@app.before_request执行任何 API 调用之前进行检查(。

我想知道的是这是否可取。有没有其他选择来完成这样的任务?

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

您可以使用应用程序的内置配置对象并从应用程序中的任何位置查询/更新它,例如app.config['health_status'] = 'UP'.这将消除对global_config对象的需要。不过,使用@app.before_request可能仍然是检查此值的最优雅方法。

相关内容

  • 没有找到相关文章

最新更新