From 575bfa259e5f4742ea45cd3f4b7eec2e31d18c9a Mon Sep 17 00:00:00 2001 From: Josako Date: Sun, 7 Sep 2025 14:45:47 +0200 Subject: [PATCH] - further healthz improvements --- config/config.py | 1 + eveai_app/__init__.py | 23 ++++++++--------- eveai_app/views/healthz_views.py | 33 ++++++++++++++---------- eveai_chat_client/views/healthz_views.py | 6 ++--- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/config/config.py b/config/config.py index 6b3d3d9..6b7eb0c 100644 --- a/config/config.py +++ b/config/config.py @@ -323,6 +323,7 @@ class Config(object): r'^/healthz($|/.*)', r'^/_healthz($|/.*)', ] + SECURITY_LOGIN_WITHOUT_VIEWS = True # Dit voorkomt automatische redirects class DevConfig(Config): diff --git a/eveai_app/__init__.py b/eveai_app/__init__.py index c5b9bb4..8a4e3bb 100644 --- a/eveai_app/__init__.py +++ b/eveai_app/__init__.py @@ -88,11 +88,11 @@ def create_app(config_file=None): # Register standard health endpoints at /healthz (liveness/readiness) # These must be public and not require authentication. - try: - from flask_healthz import healthz as healthz_blueprint - app.register_blueprint(healthz_blueprint, url_prefix="/healthz") - except Exception as e: - app.logger.warning(f"Failed to register /healthz blueprint: {e}") + # try: + # from flask_healthz import healthz as healthz_blueprint + # app.register_blueprint(healthz_blueprint, url_prefix="/healthz") + # except Exception as e: + # app.logger.warning(f"Failed to register /healthz blueprint: {e}") # Custom url_for function for templates @app.context_processor @@ -130,11 +130,11 @@ def create_app(config_file=None): app.logger.debug(f"Before request - URL: {request.url}") app.logger.debug(f"Before request - Session permanent: {session.permanent}") - # Log session expiry tijd als deze bestaat - if current_user.is_authenticated: - # Controleer of sessie permanent is (nodig voor PERMANENT_SESSION_LIFETIME) - if not session.permanent: - session.permanent = True + # # Log session expiry tijd als deze bestaat + # if current_user.is_authenticated: + # # Controleer of sessie permanent is (nodig voor PERMANENT_SESSION_LIFETIME) + # if not session.permanent: + # session.permanent = True @app.route('/debug/session') def debug_session(): @@ -201,9 +201,8 @@ def register_blueprints(app): app.register_blueprint(entitlements_bp) from .views.partner_views import partner_bp app.register_blueprint(partner_bp) - from .views.healthz_views import healthz_bp, init_healtz + from .views.healthz_views import healthz_bp app.register_blueprint(healthz_bp) - init_healtz(app) def register_cache_handlers(app): diff --git a/eveai_app/views/healthz_views.py b/eveai_app/views/healthz_views.py index aef0527..4693330 100644 --- a/eveai_app/views/healthz_views.py +++ b/eveai_app/views/healthz_views.py @@ -1,4 +1,4 @@ -from flask import Blueprint, current_app, request +from flask import Blueprint, current_app, request, jsonify from flask_healthz import HealthError from sqlalchemy.exc import SQLAlchemyError from celery.exceptions import TimeoutError as CeleryTimeoutError @@ -8,7 +8,7 @@ import time from common.extensions import db, metrics, minio_client from common.utils.celery_utils import current_celery -healthz_bp = Blueprint('healthz', __name__, url_prefix='/_healthz') +healthz_bp = Blueprint('healthz', __name__, url_prefix='/healthz') # Define Prometheus metrics api_request_counter = Counter('api_request_count', 'API Request Count', ['method', 'endpoint']) @@ -69,6 +69,22 @@ def check_minio(): return False +@healthz_bp.route('/ready') +def ready(): + """ + Health check endpoint for readiness probe + """ + return jsonify({"status": "ok"}) + + +@healthz_bp.route('/live') +def live(): + """ + Health check endpoint for liveness probe + """ + return jsonify({"status": "ok"}) + + @healthz_bp.route('/metrics') @metrics.do_not_track() def prometheus_metrics(): @@ -76,7 +92,7 @@ def prometheus_metrics(): # Custom metrics example -@healthz_bp.before_app_request +@healthz_bp.before_request def before_request(): request.start_time = time.time() api_request_counter.labels( @@ -84,17 +100,8 @@ def before_request(): ).inc() -@healthz_bp.after_app_request +@healthz_bp.after_request def after_request(response): request_duration = time.time() - request.start_time api_request_latency.observe(request_duration) return response - - -def init_healtz(app): - app.config.update( - HEALTHZ={ - "live": "healthz_views.liveness", - "ready": "healthz_views.readiness", - } - ) \ No newline at end of file diff --git a/eveai_chat_client/views/healthz_views.py b/eveai_chat_client/views/healthz_views.py index 6091dc2..a0c6bd2 100644 --- a/eveai_chat_client/views/healthz_views.py +++ b/eveai_chat_client/views/healthz_views.py @@ -1,15 +1,15 @@ from flask import Blueprint, jsonify -healthz_bp = Blueprint('healthz', __name__) +healthz_bp = Blueprint('healthz', __name__, url_prefix='/healthz') -@healthz_bp.route('/healthz/ready') +@healthz_bp.route('/ready') def ready(): """ Health check endpoint for readiness probe """ return jsonify({"status": "ok"}) -@healthz_bp.route('/healthz/live') +@healthz_bp.route('/live') def live(): """ Health check endpoint for liveness probe