From 6eae91a2fa6f7706a2d1dbc8977ee9bf1986eee4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Sat, 1 Nov 2025 20:36:05 +0100 Subject: [PATCH] supervisord --- routes/edit_routes.py | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/routes/edit_routes.py b/routes/edit_routes.py index 560644b..09d43c3 100644 --- a/routes/edit_routes.py +++ b/routes/edit_routes.py @@ -2,8 +2,10 @@ from flask import Blueprint, render_template, request import subprocess from auth.auth_middleware import requires_auth # Updated import + edit_bp = Blueprint('edit', __name__) + @edit_bp.route('/edit', methods=['GET', 'POST']) @requires_auth def edit_haproxy_config(): @@ -14,7 +16,7 @@ def edit_haproxy_config(): f.write(edited_config) check_output = "" - + if 'save_check' in request.form: # Run haproxy -c -V -f to check the configuration check_result = subprocess.run(['haproxy', '-c', '-V', '-f', '/etc/haproxy/haproxy.cfg'], capture_output=True, text=True) @@ -35,13 +37,35 @@ def edit_haproxy_config(): error_message = check_result.stderr check_output += f"\n\nError occurred:\n{error_message}" else: - # If no error, run systemctl restart haproxy to reload HAProxy - reload_result = subprocess.run(['systemctl', 'restart', 'haproxy'], capture_output=True, text=True) - check_output += f"\n\nHAProxy Restart Output:\n{reload_result.stdout}" - - # Also add stderr if there are any warnings or errors during restart - if reload_result.stderr: - check_output += f"\nRestart Stderr:\n{reload_result.stderr}" + # Try to reload HAProxy - support both Docker (supervisor) and systemd + reload_success = False + reload_output = "" + + # Try supervisor first (Docker) + try: + supervisor_result = subprocess.run(['supervisorctl', 'restart', 'haproxy'], capture_output=True, text=True, timeout=5) + if supervisor_result.returncode == 0: + reload_output = f"\n\n✓ HAProxy Restarted via Supervisor:\n{supervisor_result.stdout}" + reload_success = True + except Exception as e: + reload_output += f"\nSupervisor restart failed: {e}" + + # If supervisor failed, try systemctl (Linux) + if not reload_success: + try: + systemctl_result = subprocess.run(['systemctl', 'restart', 'haproxy'], capture_output=True, text=True, timeout=5) + if systemctl_result.returncode == 0: + reload_output = f"\n\n✓ HAProxy Restarted via Systemctl:\n{systemctl_result.stdout}" + reload_success = True + else: + reload_output += f"\nSystemctl restart error: {systemctl_result.stderr}" + except Exception as e: + reload_output += f"\nSystemctl restart failed: {e}" + + if reload_success: + check_output += reload_output + else: + check_output += f"\n\n⚠ Warning: Could not restart HAProxy.\nConfig is valid but reload failed.\nPlease restart manually or check supervisor/systemd status." return render_template('edit.html', config_content=edited_config, check_output=check_output) @@ -53,5 +77,5 @@ def edit_haproxy_config(): config_content = "# HAProxy configuration file not found\n# Please create /etc/haproxy/haproxy.cfg" except PermissionError: config_content = "# Permission denied reading HAProxy configuration file" - + return render_template('edit.html', config_content=config_content)