From 3423595d9b98f7ce1ec2fcca5260b68255c78210 Mon Sep 17 00:00:00 2001 From: Aidaho Date: Wed, 4 Sep 2024 21:16:22 +0300 Subject: [PATCH] v8.0.1: Remove keepalived service and improve service status handling Removed all references and functionality related to keepalived service. Added detailed status handling for various services including nginx, haproxy, and apache, improving the accuracy of the status checks and error handling for each service. Adjusted user interface elements to reflect the service status changes more clearly. --- app/modules/roxywi/roxy.py | 3 +- app/modules/service/keepalived.py | 20 ----- app/routes/admin/routes.py | 20 ----- app/routes/ha/routes.py | 5 -- app/routes/service/routes.py | 65 ----------------- app/static/js/overview.js | 64 ++++++++-------- app/templates/base.html | 2 +- app/templates/service.html | 117 ++++++++++-------------------- app/views/admin/views.py | 3 + app/views/service/views.py | 63 +++++++++++----- 10 files changed, 121 insertions(+), 241 deletions(-) delete mode 100644 app/modules/service/keepalived.py diff --git a/app/modules/roxywi/roxy.py b/app/modules/roxywi/roxy.py index 86a3e9dc..e40bd4b4 100644 --- a/app/modules/roxywi/roxy.py +++ b/app/modules/roxywi/roxy.py @@ -86,8 +86,9 @@ def update_user_status() -> None: try: status = roxy_wi_get_plan.json() roxy_sql.update_user_status(status['status'], status['plan'], status['method']) + roxywi_common.logging('Roxy-WI server', 'Update Roxy-WI user status', roxywi=1) except Exception as e: - roxywi_common.logging('Roxy-WI server', f'error: Cannot get user status {e}', roxywi=1) + roxywi_common.logging('Roxy-WI server', f'error: Cannot get Roxy-WI user status {e}', roxywi=1) def action_service(action: str, service: str) -> str: diff --git a/app/modules/service/keepalived.py b/app/modules/service/keepalived.py deleted file mode 100644 index a6e566b6..00000000 --- a/app/modules/service/keepalived.py +++ /dev/null @@ -1,20 +0,0 @@ -import app.modules.server.server as server_mod - - -def get_status(server_ip: str) -> tuple: - out1 = [] - h = (['', ''],) - try: - cmd = ("/usr/sbin/keepalived -v 2>&1|head -1|awk '{print $2}' && systemctl status keepalived |" - "grep -e 'Active' |awk '{print $2, $9$10$11$12$13}' && ps ax |grep keepalived|grep -v grep |wc -l") - out = server_mod.ssh_command(server_ip, cmd) - for k in out.split(): - out1.append(k) - h = (out1,) - servers_with_status1 = h - servers_with_status2 = h - except Exception: - servers_with_status1 = h - servers_with_status2 = h - - return servers_with_status1, servers_with_status2 diff --git a/app/routes/admin/routes.py b/app/routes/admin/routes.py index d8b9a490..0a7ef5a5 100644 --- a/app/routes/admin/routes.py +++ b/app/routes/admin/routes.py @@ -126,23 +126,3 @@ def get_settings(): 'timezones': pytz.all_timezones, } return render_template('include/admin_settings.html', **kwargs) - - -@bp.post('/setting/') -def update_settings(param): - roxywi_auth.page_for_admin(level=2) - val = request.form.get('val').replace('92', '/') - user_group = roxywi_common.get_user_group(id=1) - try: - sql.update_setting(param, val, user_group) - except Exception as e: - roxywi_common.handle_json_exceptions(e, 'Cannot update settings') - roxywi_common.logging('Roxy-WI server', f'The {param} setting has been changed to: {val}', roxywi=1, login=1) - - if param == 'master_port': - try: - smon_mod.change_smon_port(int(val)) - except Exception as e: - return f'{e}' - - return 'Ok' diff --git a/app/routes/ha/routes.py b/app/routes/ha/routes.py index 0db50c20..136ff9b8 100644 --- a/app/routes/ha/routes.py +++ b/app/routes/ha/routes.py @@ -10,7 +10,6 @@ import app.modules.db.server as server_sql import app.modules.db.service as service_sql import app.modules.server.server as server_mod import app.modules.roxywi.common as roxywi_common -import app.modules.service.keepalived as keepalived from app.views.ha.views import HAView bp.add_url_rule('/', view_func=HAView.as_view('ha_cluster'), methods=['GET'], defaults={'cluster_id': None}) @@ -71,10 +70,6 @@ def show_ha_cluster(service, cluster_id): servers_with_status.append(s[1]) servers_with_status.append(s[2]) servers_with_status.append(s[11]) - status1, status2 = keepalived.get_status(s[2]) - servers_with_status.append(status1) - servers_with_status.append(status2) - servers_with_status.append(s[22]) servers_with_status.append(server_sql.is_master(s[2])) servers_with_status.append(server_sql.select_servers(server=s[2])) diff --git a/app/routes/service/routes.py b/app/routes/service/routes.py index 70263ece..50f2a1b6 100644 --- a/app/routes/service/routes.py +++ b/app/routes/service/routes.py @@ -14,7 +14,6 @@ from app.middleware import check_services, get_user_params import app.modules.common.common as common import app.modules.server.server as server_mod import app.modules.service.common as service_common -import app.modules.service.keepalived as keepalived import app.modules.roxywi.common as roxywi_common import app.modules.roxywi.overview as roxy_overview from app.views.service.views import ServiceActionView, ServiceBackendView, ServiceView @@ -43,7 +42,6 @@ def services(service, serv): service_desc = service_sql.select_service(service) servers = roxywi_common.get_dick_permit(virt=1, service=service_desc.slug) servers_with_status1 = [] - autorefresh = 0 waf_server = '' cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l" keep_alive, stderr = server_mod.subprocess_execute(cmd) @@ -57,7 +55,6 @@ def services(service, serv): if serv: if roxywi_common.check_is_server_in_group(serv): servers = server_sql.select_servers(server=serv) - autorefresh = 1 waf_server = waf_sql.select_waf_servers(serv) server_id = server_sql.select_server_id_by_ip(serv) docker_settings = service_sql.select_docker_service_settings(server_id, service_desc.slug) @@ -87,67 +84,6 @@ def services(service, serv): servers_with_status.append(s[1]) servers_with_status.append(s[2]) servers_with_status.append(s[11]) - if service == 'nginx': - h = (['', ''],) - cmd = ("/usr/sbin/nginx -v 2>&1|awk '{print $3}' && systemctl status nginx |grep -e 'Active' |awk " - "'{print $2, $9$10$11$12$13}' && ps ax |grep nginx:|grep -v grep |wc -l") - for service_set in docker_settings: - if service_set.server_id == s[0] and service_set.setting == 'dockerized' and service_set.value == '1': - container_name = sql.get_setting('nginx_container_name') - cmd = ("docker exec -it " + container_name + " /usr/sbin/nginx -v 2>&1|awk '{print $3}' " - "&& docker ps -a -f name=" + container_name + " --format '{{.Status}}'|tail -1 && ps ax |grep nginx:|grep -v grep |wc -l") - try: - out = server_mod.ssh_command(s[2], cmd) - h = () - out1 = [] - for k in out.split(): - out1.append(k) - h = (out1,) - servers_with_status.append(h) - servers_with_status.append(h) - servers_with_status.append(s[17]) - except Exception: - servers_with_status.append(h) - servers_with_status.append(h) - servers_with_status.append(s[17]) - elif service == 'keepalived': - status1, status2 = keepalived.get_status(s[2]) - servers_with_status.append(status1) - servers_with_status.append(status2) - servers_with_status.append(s[22]) - elif service == 'apache': - h = (['', ''],) - apache_stats_user = sql.get_setting('apache_stats_user') - apache_stats_password = sql.get_setting('apache_stats_password') - apache_stats_port = sql.get_setting('apache_stats_port') - apache_stats_page = sql.get_setting('apache_stats_page') - cmd = "curl -s -u %s:%s http://%s:%s/%s?auto |grep 'ServerVersion\|Processes\|ServerUptime:'" % ( - apache_stats_user, apache_stats_password, s[2], apache_stats_port, apache_stats_page - ) - try: - out = server_mod.subprocess_execute(cmd) - if out != '': - for k in out: - servers_with_status.append(k) - servers_with_status.append(s[22]) - except Exception: - servers_with_status.append(h) - servers_with_status.append(h) - servers_with_status.append(s[22]) - else: - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - cmd = f'echo "show info" |nc {s[2]} {haproxy_sock_port} -w 1 -v|grep -e "Ver\|Uptime:\|Process_num"' - out = server_mod.subprocess_execute(cmd) - - for k in out: - if "Connection refused" not in k: - out1 = out - else: - out1 = False - servers_with_status.append(out1) - - servers_with_status.append(s[12]) - servers_with_status.append(server_sql.select_servers(server=s[2])) is_keepalived = service_sql.select_keepalived(s[2]) @@ -169,7 +105,6 @@ def services(service, serv): 'clusters': ha_sql.select_ha_cluster_name_and_slaves(), 'master_slave': server_sql.is_master(0, master_slave=1), 'user_subscription': roxywi_common.return_user_subscription(), - 'autorefresh': autorefresh, 'servers': servers_with_status1, 'lang': g.user_params['lang'], 'serv': serv, diff --git a/app/static/js/overview.js b/app/static/js/overview.js index a2232447..ddba31b3 100644 --- a/app/static/js/overview.js +++ b/app/static/js/overview.js @@ -7,26 +7,22 @@ function showHapservers(serv, hostnamea, service) { } } function showHapserversCallBack(serv, hostnamea, service) { - $.ajax( { + $.ajax({ url: "/service/" + service + "/" + serv + "/last-edit", - beforeSend: function() { - $("#edit_date_"+hostnamea).html(''); + beforeSend: function () { + $("#edit_date_" + hostnamea).html(''); }, type: "GET", - success: function( data ) { - if (data.indexOf('error:') != '-1') { - toastr.error(data); + success: function (data) { + if (data.indexOf('ls: cannot access') != '-1') { + $("#edit_date_" + hostnamea).empty(); + $("#edit_date_" + hostnamea).html(); } else { - if (data.indexOf('ls: cannot access') != '-1') { - $("#edit_date_" + hostnamea).empty(); - $("#edit_date_" + hostnamea).html(); - } else { - $("#edit_date_" + hostnamea).empty(); - $("#edit_date_" + hostnamea).html(data); - } + $("#edit_date_" + hostnamea).empty(); + $("#edit_date_" + hostnamea).html(data); } } - } ); + }); } function overviewHapserverBackends(serv, hostname, service) { let div = ''; @@ -294,10 +290,6 @@ function updateHapWIServer(id, service_name) { function change_pos(pos, id) { $.ajax({ url: "/service/position/" + id + "/" + pos, - // data: { - // token: $('#token').val() - // }, - // type: "POST", error: function () { console.log(w.data_error); } @@ -391,10 +383,6 @@ function keepalivedBecameMaster(serv) { function showUsersOverview() { $.ajax( { url: "overview/users", - // data: { - // show_users_ovw: 1, - // token: $('#token').val() - // }, type: "GET", beforeSend: function() { $("#users-table").html(''); @@ -412,10 +400,6 @@ function showUsersOverview() { function showSubOverview() { $.ajax( { url: "/overview/sub", - // data: { - // show_sub_ovw: 1, - // token: $('#token').val() - // }, type: "GET", beforeSend: function() { $("#sub-table").html(''); @@ -513,21 +497,23 @@ function serverSettingsSave(id, name, service, dialog_id) { }); } function check_service_status(id, ip, service) { - if (sessionStorage.getItem('check-service') == 0) { + if (sessionStorage.getItem('check-service-'+service+'-'+id) === '0') { return false; } NProgress.configure({showSpinner: false}); - if (service === 'keepalived') return false; let server_div = $('#div-server-' + id); $.ajax({ url: "/service/" + service + "/" + id + "/status", contentType: "application/json; charset=utf-8", statusCode: { 401: function (xhr) { - sessionStorage.setItem('check-service', 0) + sessionStorage.setItem('check-service-'+service+'-'+id, '0') }, 404: function (xhr) { - sessionStorage.setItem('check-service', 0) + sessionStorage.setItem('check-service-'+service+'-'+id, '0') + }, + 500: function (xhr) { + sessionStorage.setItem('check-service-'+service+'-'+id, '0') } }, success: function (data) { @@ -545,13 +531,25 @@ function check_service_status(id, ip, service) { } } } else { - console.log(data.length) if (data.status === 'failed') { + server_div.removeClass('div-server-head-unknown'); server_div.removeClass('div-server-head-up'); server_div.addClass('div-server-head-down'); } else { - server_div.addClass('div-server-head-up'); - server_div.removeClass('div-server-head-down'); + if (data.Status === 'running') { + server_div.addClass('div-server-head-up'); + server_div.removeClass('div-server-head-down'); + server_div.removeClass('div-server-head-unknown'); + $('#uptime-word-'+id).text(translate_div.attr('data-uptime')); + } else { + server_div.removeClass('div-server-head-up'); + server_div.removeClass('div-server-head-unknown'); + server_div.addClass('div-server-head-down'); + $('#uptime-word-'+id).text(translate_div.attr('data-downtime')); + } + $('#service-version-'+id).text(data.Version); + $('#service-process_num-'+id).text(data.Process); + $('#service-uptime-'+id).text(data.Uptime); } } } diff --git a/app/templates/base.html b/app/templates/base.html index ddc5ccaa..1c92e62e 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -20,7 +20,7 @@ data-installing="{{lang.words.installing|title()}}" data-creating="{{lang.words.creating|title()}}" data-roxywi_timeout="{{lang.ha_page.roxywi_timeout}}" data-check_apache_log="{{lang.ha_page.check_apache_log}}" data-was_installed="{{lang.ha_page.was_installed}}" data-start_enter="{{lang.ha_page.start_enter}}" data-apply="{{lang.words.apply|title()}}" data-reconfigure="{{lang.words.reconfigure|title()}}" data-server="{{lang.words.server|title()}}" data-port="{{lang.words.port}}" - data-weight="{{lang.words.weight}}" /> + data-weight="{{lang.words.weight}}" data-uptime="{{lang.words.uptime}}" data-downtime="{{lang.words.downtime}}" /> {% include 'include/main_head.html' %} diff --git a/app/templates/service.html b/app/templates/service.html index fd43069f..cb191546 100644 --- a/app/templates/service.html +++ b/app/templates/service.html @@ -72,7 +72,7 @@ removeData(); {%- if service == 'haproxy' %} {%- for s in servers %} - {%- if s.7.0.9 %} + {%- if s.4.0.9 %} getChartData(server_ip) getHttpChartData(server_ip) getWafChartData(server_ip) @@ -82,12 +82,12 @@ showOverviewServer('{{s.1}}', server_ip, '{{s.0}}', '{{service}}'); {%- if service == 'nginx' %} showNginxConnections(server_ip) - {% if s.7.0.21 %} + {% if s.4.0.21 %} getNginxChartData(server_ip) {% endif %} {%- elif service == 'apache' %} showApachekBytes(server_ip) - {% if s.7.0.27 %} + {% if s.4.0.27 %} getApacheChartData(server_ip) {% endif %} {%- elif service == 'haproxy' %} @@ -164,42 +164,22 @@ {% endif %} {% set checker_desc = lang.services.hapservers_desc %} {% if service == 'nginx' %} - {% set is_auto_start_enabled = s.7.0.17 %} - {% set is_checker_enabled = s.7.0.19 %} - {% set is_metrics_enabled = s.7.0.21 %} - {% if s.5.0.1 == 'active' or s.5.0.1 == 'Up' %} - {% set additional_status_class = 'div-server-head-up' %} - {% else %} - {% set additional_status_class = 'div-server-head-down' %} - {% endif %} + {% set is_auto_start_enabled = s.4.0.17 %} + {% set is_checker_enabled = s.4.0.19 %} + {% set is_metrics_enabled = s.4.0.21 %} {% elif service == 'keepalived' %} - {% set is_auto_start_enabled = s.7.0.22 %} - {% set is_checker_enabled = s.7.0.23 %} - {% if s.5.0.1 == 'active' %} - {% set additional_status_class = 'div-server-head-up' %} - {% else %} - {% set additional_status_class = 'div-server-head-down' %} - {% endif %} + {% set is_auto_start_enabled = s.4.0.22 %} + {% set is_checker_enabled = s.4.0.23 %} {% elif service == 'apache' %} - {% set is_auto_start_enabled = s.7.0.25 %} - {% set is_checker_enabled = s.7.0.26 %} - {% set is_metrics_enabled = s.7.0.27 %} - {% if 'Apache' in s.4.0 %} - {% set additional_status_class = 'div-server-head-up' %} - {% else %} - {% set additional_status_class = 'div-server-head-down' %} - {% endif %} + {% set is_auto_start_enabled = s.4.0.25 %} + {% set is_checker_enabled = s.4.0.26 %} + {% set is_metrics_enabled = s.4.0.27 %} {% elif service == 'haproxy' %} - {% set is_auto_start_enabled = s.7.0.12 %} - {% set is_checker_enabled = s.7.0.8 %} - {% set is_metrics_enabled = s.7.0.9 %} - {% if s.5 != False %} - {% set additional_status_class = 'div-server-head-up' %} - {% else %} - {% set additional_status_class = 'div-server-head-down' %} - {% endif %} + {% set is_auto_start_enabled = s.4.0.12 %} + {% set is_checker_enabled = s.4.0.8 %} + {% set is_metrics_enabled = s.4.0.9 %} {% endif %} -
+
@@ -208,7 +188,7 @@ {% else %} {{s.1}} {% endif %} - {% if s.6|int() >= 1 %} + {% if s.5|int() >= 1 %} = 1 %} class="shield green" title="Autostart {{lang.words.is}} {{lang.words.enabled2}}"> @@ -217,7 +197,7 @@ {% endif %} {% endif %} - {% if s.7.0.20 == 1 %} + {% if s.4.0.20 == 1 %} {% endif %} {% for set in docker_settings %} @@ -230,11 +210,9 @@ - {% if service != 'keepalived' %} - {% endif %} {% for set in restart_settings %} {% if set.server_id == s.0 and set.setting == 'restart' and set.value|int == 0 %} @@ -270,32 +248,9 @@ {{s.3}} {% endif %}
- {% if service == 'nginx' or service == 'keepalived' %} - {{lang.words.version|title()}}: {{s.5.0.0}} {{lang.words.process_num|title()}}: {{s.5.0.3}} -
- {% if s.5.0.1 == 'active' or s.5.0.1 == 'Up' %} - {{lang.words.started|title()}}: - {% else %} - {{lang.words.stopped|title()}}: - {% endif %} - {{s.5.0.2}} - {% elif service == 'apache' %} - {% if s.4.0 is defined %} - {{s.4.0.split(' ')[0].split('Server')[1]}} {{s.4.0.split(' ')[1]}} {{s.4.2}} -
- {{s.4.1.split(' ')[0].split('Server')[1]}} {% for i in s.4.1.split(' ')[1:5] %} {{i}}{% endfor %} - {% else %} - {{lang.errors.cannot_get_info}} Apache - {% endif %} - {% else %} - {% if s.5.0 is defined %} - {{s.5.0.0}} {{s.5.0.1}} -
- {{s.5.0.2}} - {% else %} - {{lang.errors.cannot_get_info}} HAProxy - {% endif %} - {% endif %} + {{lang.words.version|title()}}: + {{lang.words.process_num|title()}}:
+ {{lang.words.uptime|title()}}: {{lang.services.last_edit}}: @@ -317,10 +272,10 @@ {{lang.words.slave_for}}: {{ copy_to_clipboard(value=master.0, style='font-weight: bold') }} {% endif %} {% endfor %} - {% if s.8.0 == '1' %} + {% if s.5.0 == '1' %} VRRP: - {% if s.8.1 == 'MASTER' or s.8.1 == 'BACKUP' or s.8.1 == 'INIT' or s.8.1 == 'FAULT' %} - {{s.8.1}} + {% if s.5.1 == 'MASTER' or s.5.1 == 'BACKUP' or s.5.1 == 'INIT' or s.5.1 == 'FAULT' %} + {{s.5.1}} {% else %} {{lang.words.error|title()}} {% endif %} @@ -328,9 +283,9 @@ {% endif %}
-