Commit c70b365f authored by Anthony Jacob's avatar Anthony Jacob
Browse files

dirtyfix for checking connection "alive"

parent fb276e7a
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -4,23 +4,23 @@ from psycopg.rows import dict_row

@contextmanager
def db_cursor(dict_results=False):
    conn = None
    cur = None
    try:
        conn = current_app.db_pool.getconn()
        cur = conn.cursor(row_factory=dict_row if dict_results else None)

        # --- Keepalive query ---
        cur.execute("SELECT 1;")
        # ----------------------

        yield conn, cur

    except Exception as e:
        current_app.logger.error(f"Database error: {e}")
        current_app.db_pool.putconn(conn, close=True)
        with current_app.db_pool.connection() as conn:
            cur = conn.cursor()
            # --- Keepalive query ---
            cur.execute("SELECT 1;")
            with conn.cursor(row_factory=dict_row if dict_results else None) as cur:
                yield conn, cur
        if conn:
            conn.close()
    finally:
        if cur:
            cur.close()
        if conn:
            current_app.db_pool.putconn(conn)


+11 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ from flask import Flask, jsonify
from psycopg_pool import ConnectionPool
from redis import Redis
from flask_jwt_extended import JWTManager
from app.helpers.db import db_cursor
from config import Config
from controller import diploma, healthcheck, auth, language, keyword, experience, about, service, email
from helpers.limiter import limiter
@@ -50,6 +51,16 @@ def error404(error):
    return jsonify(error="Not Found", message=str(error.description)), 404


#https://github.com/psycopg/psycopg2/issues/829
@app.before_request
def check_connection():
    app.logger.info(f"pass into check connection")
    try:
        with db_cursor(dict_results=True) as (conn, cur):
            cur.execute("SELECT 1;")
    except Exception as e:
        app.logger.error(f"Database connection check failed: {e}")

# app.register_blueprint(diploma.diploma_bp, url_prefix='/diploma')
app.register_blueprint(diploma.diploma_bp)