如何跟踪一个值在 Flask 应用程序的整个生命周期中不断变化的变量?
How to track a variable whose value keeps changing across the entire lifecycle of flask application?
我有一个 Flask 应用程序,它有一些端点,其中 3 个用于管理 Flask 应用程序。有一个变量 health_status
其值最初是 "UP" - string.
/check = 检查 flask 应用程序的状态。不管是涨还是跌。
/up = 将变量的值更改为 "UP" 其值用作任何请求服务之前的检查
/down = 将变量的值更改为“DOWN”
当 health_status
为“UP”时,应用程序可以为它提供的任何端点提供服务。当它是“DOWN”时,它只是 returns 500 任何 API 端点 excep /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"
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
您可以在应用程序的任何位置使用应用程序的内置 config object 和 query/update,例如app.config['health_status'] = 'UP'
。这将避免需要 global_config
对象。不过,使用 @app.before_request
可能仍然是检查此值的最优雅方式。
我有一个 Flask 应用程序,它有一些端点,其中 3 个用于管理 Flask 应用程序。有一个变量 health_status
其值最初是 "UP" - string.
/check = 检查 flask 应用程序的状态。不管是涨还是跌。
/up = 将变量的值更改为 "UP" 其值用作任何请求服务之前的检查
/down = 将变量的值更改为“DOWN”
当 health_status
为“UP”时,应用程序可以为它提供的任何端点提供服务。当它是“DOWN”时,它只是 returns 500 任何 API 端点 excep /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"
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
您可以在应用程序的任何位置使用应用程序的内置 config object 和 query/update,例如app.config['health_status'] = 'UP'
。这将避免需要 global_config
对象。不过,使用 @app.before_request
可能仍然是检查此值的最优雅方式。