fix: 修复连接池泄漏(conn.close改为put_db) + put_db处理已关闭连接 + 添加日线同步cron
This commit is contained in:
+15
-15
@@ -2,7 +2,7 @@
|
||||
管理后台 API 路由
|
||||
"""
|
||||
from flask import Blueprint, request, jsonify, session, render_template
|
||||
from db import get_db
|
||||
from db import get_db, put_db
|
||||
from psycopg2.extras import RealDictCursor
|
||||
from werkzeug.security import generate_password_hash
|
||||
import functools
|
||||
@@ -182,7 +182,7 @@ def admin_required(f):
|
||||
if not row or not row[0]:
|
||||
return jsonify({'success': False, 'error': '无管理员权限'}), 403
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
return f(*args, **kwargs)
|
||||
return decorated
|
||||
|
||||
@@ -201,7 +201,7 @@ def admin_page():
|
||||
if not row or not row[0]:
|
||||
return '无权访问', 403
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
return render_template('admin.html')
|
||||
|
||||
|
||||
@@ -281,7 +281,7 @@ def dashboard():
|
||||
|
||||
return jsonify({'success': True, 'data': stats})
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
|
||||
# ========== 用户管理 ==========
|
||||
@@ -339,7 +339,7 @@ def list_users():
|
||||
|
||||
return jsonify({'success': True, 'data': users})
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
|
||||
@bp.route('/api/admin/users/<int:user_id>', methods=['GET'])
|
||||
@@ -437,7 +437,7 @@ def get_user_detail(user_id):
|
||||
}
|
||||
})
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
|
||||
@bp.route('/api/admin/users/<int:user_id>/reset_password', methods=['POST'])
|
||||
@@ -461,7 +461,7 @@ def reset_user_password(user_id):
|
||||
conn.rollback()
|
||||
return jsonify({'success': False, 'error': str(e)}), 500
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
|
||||
@bp.route('/api/admin/users/<int:user_id>/toggle_admin', methods=['POST'])
|
||||
@@ -483,7 +483,7 @@ def toggle_admin(user_id):
|
||||
conn.rollback()
|
||||
return jsonify({'success': False, 'error': str(e)}), 500
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
|
||||
@bp.route('/api/admin/users/<int:user_id>', methods=['DELETE'])
|
||||
@@ -509,7 +509,7 @@ def delete_user(user_id):
|
||||
conn.rollback()
|
||||
return jsonify({'success': False, 'error': str(e)}), 500
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
|
||||
# ========== 用户数据管理 ==========
|
||||
@@ -526,7 +526,7 @@ def delete_user_watchlist(user_id, code):
|
||||
conn.commit()
|
||||
return jsonify({'success': True})
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
|
||||
@bp.route('/api/admin/users/<int:user_id>/trades/<int:trade_id>', methods=['DELETE'])
|
||||
@@ -541,7 +541,7 @@ def delete_user_trade(user_id, trade_id):
|
||||
conn.commit()
|
||||
return jsonify({'success': True})
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
|
||||
# ========== 系统数据 ==========
|
||||
@@ -568,7 +568,7 @@ def scan_history():
|
||||
""")
|
||||
return jsonify({'success': True, 'data': [dict(r) for r in cur.fetchall()]})
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
|
||||
@bp.route('/api/admin/data_stats', methods=['GET'])
|
||||
@@ -603,7 +603,7 @@ def data_stats():
|
||||
|
||||
return jsonify({'success': True, 'data': {'tables': result, 'logs': logs}})
|
||||
finally:
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
|
||||
# ========== 全景扫描管理 ==========
|
||||
@@ -786,7 +786,7 @@ def kline_sync_status():
|
||||
total_stocks = cur.fetchone()[0]
|
||||
|
||||
cur.close()
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
is_running = _is_kline_sync_running()
|
||||
|
||||
@@ -1308,7 +1308,7 @@ def admin_scan_status():
|
||||
triggered = cur.fetchone()[0]
|
||||
|
||||
cur.close()
|
||||
conn.close()
|
||||
put_db(conn)
|
||||
|
||||
is_running = _is_scan_running()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user