From 5b8df16ba92fb4aea076ef5de7246fac0c9cbe93 Mon Sep 17 00:00:00 2001 From: Aidaho Date: Thu, 16 Jan 2025 14:43:52 +0300 Subject: [PATCH] v8.1.5: Update HAProxy configurations and enhance error handling Adjusted HAProxy Ansible role for ownership and removed unused peer configurations. Added error handling to HA-related views and database queries to improve stability. Updated HAProxy Exporter dependency to a newer version for compatibility. --- app/modules/db/roxy.py | 7 +++++++ .../ansible/roles/haproxy/tasks/configure.yml | 2 ++ .../roles/haproxy/templates/haproxy.cfg.j2 | 19 ++----------------- .../roles/haproxy_exporter/meta/main.yml | 2 +- app/views/ha/views.py | 15 +++++++++------ 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/app/modules/db/roxy.py b/app/modules/db/roxy.py index d7b59763..a4848eef 100644 --- a/app/modules/db/roxy.py +++ b/app/modules/db/roxy.py @@ -23,6 +23,13 @@ def get_user() -> UserName: print(str(e)) +def select_user_status() -> int: + try: + return UserName.get().Status + except Exception: + return 0 + + def get_roxy_tools(): try: query_res = RoxyTool.select().where(RoxyTool.is_roxy == 1).execute() diff --git a/app/scripts/ansible/roles/haproxy/tasks/configure.yml b/app/scripts/ansible/roles/haproxy/tasks/configure.yml index 7396397a..7c1f8fde 100644 --- a/app/scripts/ansible/roles/haproxy/tasks/configure.yml +++ b/app/scripts/ansible/roles/haproxy/tasks/configure.yml @@ -66,6 +66,8 @@ template: src: haproxy.state.j2 dest: /etc/haproxy/haproxy.state + owner: haproxy + group: haproxy mode: 0644 force: no diff --git a/app/scripts/ansible/roles/haproxy/templates/haproxy.cfg.j2 b/app/scripts/ansible/roles/haproxy/templates/haproxy.cfg.j2 index be306f44..d99bd5c5 100644 --- a/app/scripts/ansible/roles/haproxy/templates/haproxy.cfg.j2 +++ b/app/scripts/ansible/roles/haproxy/templates/haproxy.cfg.j2 @@ -45,24 +45,9 @@ listen stats stats admin if TRUE # END Roxy-WI MANAGED listen stats do not edit it directly -{% if M_OR_S != 'None' %} -peers default_peers - {% if M_OR_S == 'master' %} - peer {{ ansible_hostname }} {{MASTER}}:10000 - {% for slave in slaves %} - peer slave_lb {{slave}}:10000 - {% endfor %} - {% else %} - peer master_lb {{MASTER}}:10000 - {% for slave in slaves %} - peer {{ ansible_hostname }} {{slave}}:10000 - {% endfor %} - {% endif %} -{% endif %} - backend per_ip_and_url_rates - stick-table type binary len 8 size 1m expire 24h store http_req_rate(24h) {% if M_OR_S != 'None' %} peers default_peers {% endif %} + stick-table type binary len 8 size 1m expire 24h store http_req_rate(24h) backend per_ip_rates - stick-table type ip size 1m expire 24h store gpc0,gpc0_rate(30s) {% if M_OR_S != 'None' %} peers default_peers {% endif %} + stick-table type ip size 1m expire 24h store gpc0,gpc0_rate(30s) diff --git a/app/scripts/ansible/roles/haproxy_exporter/meta/main.yml b/app/scripts/ansible/roles/haproxy_exporter/meta/main.yml index 3eeb94e2..5f27706f 100644 --- a/app/scripts/ansible/roles/haproxy_exporter/meta/main.yml +++ b/app/scripts/ansible/roles/haproxy_exporter/meta/main.yml @@ -27,4 +27,4 @@ galaxy_info: - exporter dependencies: - - { role: 'bdellegrazie.ansible-role-prometheus_exporter', version: 'v1.1.3' } + - { role: 'bdellegrazie.ansible-role-prometheus_exporter', version: 'v2.0.3' } diff --git a/app/views/ha/views.py b/app/views/ha/views.py index c6151044..2bed43bd 100644 --- a/app/views/ha/views.py +++ b/app/views/ha/views.py @@ -134,12 +134,15 @@ class HAView(MethodView): return render_template('ha_cluster.html', **kwargs) else: settings = {} - clusters = ha_sql.select_cluster(cluster_id) - router_id = ha_sql.get_router_id(cluster_id, default_router=1) - slaves = ha_sql.select_cluster_slaves(cluster_id, router_id) - cluster_services = ha_sql.select_cluster_services(cluster_id) - vip = ha_sql.select_cluster_vip(cluster_id, router_id) - is_virt = ha_sql.check_ha_virt(vip.id) + try: + clusters = ha_sql.select_cluster(cluster_id) + router_id = ha_sql.get_router_id(cluster_id, default_router=1) + slaves = ha_sql.select_cluster_slaves(cluster_id, router_id) + cluster_services = ha_sql.select_cluster_services(cluster_id) + vip = ha_sql.select_cluster_vip(cluster_id, router_id) + is_virt = ha_sql.check_ha_virt(vip.id) + except Exception as e: + return roxywi_common.handler_exceptions_for_json_data(e, '') if vip.use_src: use_src = 1 else: