From 77701e1d9f5e5f045fb1981b051c1e4ce06478ac Mon Sep 17 00:00:00 2001 From: Aidaho Date: Fri, 6 Sep 2024 11:38:39 +0300 Subject: [PATCH] v8.0.1: Update NGINX service handling and fix template service lookup Refactor NGINX service command execution for dockerized environments, improving status and process parsing. Fix an issue in the service template by correcting session storage key handling and ensure correct directory ownership initialization. --- app/__init__.py | 4 ++++ app/templates/service.html | 2 +- app/views/service/views.py | 39 +++++++++++++++++++++++++++----------- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 6885eed..c09f948 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -3,6 +3,8 @@ from flask_caching import Cache from flask_jwt_extended import JWTManager from flask_apscheduler import APScheduler +from app.modules.common.common import set_correct_owner + app = Flask(__name__) app.config.from_object('app.config.Configuration') app.jinja_env.add_extension('jinja2.ext.do') @@ -24,6 +26,8 @@ create_tables() default_values() update_all() +set_correct_owner('/var/lib/roxy-wi') + from app.api.routes import bp as api_bp app.register_blueprint(api_bp, url_prefix='/api') diff --git a/app/templates/service.html b/app/templates/service.html index cb19154..d5e9dec 100644 --- a/app/templates/service.html +++ b/app/templates/service.html @@ -397,7 +397,7 @@ {% endif %} showHapservers(ip, hostnamea, '{{service}}'); {% for s in servers %} - sessionStorage.removeItem('check-service-{{ service }}-{{s.2}}') + sessionStorage.removeItem('check-service-{{ service }}-{{s.0}}') check_service_status({{s.0}}, '{{s.2}}', '{{service}}'); {% endfor %} diff --git a/app/views/service/views.py b/app/views/service/views.py index c6cc1ad..3d86746 100644 --- a/app/views/service/views.py +++ b/app/views/service/views.py @@ -106,19 +106,31 @@ class ServiceView(MethodView): elif service == 'nginx': is_dockerized = service_sql.select_service_setting(server_id, service, 'dockerized') if is_dockerized == '1': - cmd = ("docker exec -it {container_name} /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") + container_name = sql.get_setting(f'{service}_container_name') + cmd = (f"sudo docker exec -it {container_name} /usr/sbin/nginx -v 2>&1|awk '{{print $3}}' && " + f"docker ps -a -f name={container_name} --format '{{{{.Status}}}}' && ps ax |grep nginx:|grep -v grep |wc -l") + out = server_mod.ssh_command(server.ip, cmd) + out = out.replace('\n', '') + out1 = out.split('\r') + if out1[0] == 'from': + out1[0] = '' + out1[1] = out1[1].split(')')[1] + else: + out1[0] = out1[0].split('/')[1] else: 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") - try: out = server_mod.ssh_command(server.ip, cmd) - out1 = out.split() + out = out.replace('\n', '') + out1 = out.split('\r') + out1[0] = out1[0].split('/')[1] + out1[1] = out1[1].split(';')[1] + try: data = { - "Version": out1[0].split('/')[1], - "Uptime": out1[2], - "Process": out1[3], - "Status": self._service_status(out1[3])} + "Version": out1[0], + "Uptime": out1[1], + "Process": out1[2], + "Status": self._service_status(out1[2])} except IndexError: return ErrorResponse(error='NGINX service not found').model_dump(mode='json'), 404 except Exception as e: @@ -137,13 +149,18 @@ class ServiceView(MethodView): for k in out: servers_with_status.append(k) data = { - "Version": servers_with_status[0][0].split('/')[1], + "Version": servers_with_status[0][0].split('/')[1].split(' ')[0], "Uptime": servers_with_status[0][1].split(':')[1].strip(), "Process": servers_with_status[0][2].split(' ')[1], "Status": self._service_status(servers_with_status[0][2].split(' ')[1]) } except IndexError: - return ErrorResponse(error='Apache service not found').model_dump(mode='json'), 404 + data = { + "Version": '', + "Uptime": '', + "Process": 0, + "Status": self._service_status('0') + } except Exception as e: data = ErrorResponse(error=str(e)).model_dump(mode='json') elif service == 'keepalived': @@ -175,7 +192,7 @@ class ServiceView(MethodView): return data @staticmethod - def _service_status(process_num: int) -> str: + def _service_status(process_num: str) -> str: if process_num == '0': return 'stopped' return 'running'