0

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

/check = 检查烧瓶应用程序的状态。无论是向上还是向下。

/up = 将变量的值更改为“UP”,其值用作在处理任何请求之前的检查

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

health_statusUP ”时,应用程序可以为它提供的任何端点提供服务。当它是“ DOWN ”时,它只会为任何 API 端点返回500错误,除了 /up 端点,它会带回服务器的健康状态(我在使用@app.before_requestFlask 执行任何 API 调用之前进行检查)。

我想知道这是否是可取的。有没有其他方法可以完成这样的任务?

健康检查.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
4

1 回答 1

1

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

于 2019-09-28T16:55:23.200 回答