Как отследить переменную, значение которой постоянно меняется на протяжении всего жизненного цикла колбы? - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть приложение 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

1 Ответ

1 голос
/ 28 сентября 2019

Вы можете просто использовать встроенный в приложение объект конфигурации и запрашивать / обновлять его из любого места приложения, например, app.config['health_status'] = 'UP'.Это устранит необходимость в вашем global_config объекте.Использование @app.before_request, вероятно, все еще является наиболее элегантным способом проверки этого значения.

...