Fix deploy page: NoneType sort + version extraite du nom fichier dans dropdown

This commit is contained in:
Pierre & Lumière 2026-04-11 21:39:59 +02:00
parent 3d053019e6
commit 6411774004
2 changed files with 22 additions and 11 deletions

View File

@ -1,7 +1,7 @@
"""Service de deploiement Qualys Cloud Agent via SSH""" """Service de deploiement Qualys Cloud Agent via SSH"""
import os import os
import re
import logging import logging
import glob
from datetime import datetime from datetime import datetime
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -15,18 +15,26 @@ except ImportError:
PARAMIKO_OK = False PARAMIKO_OK = False
def _extract_version(filename):
"""Extrait la version depuis le nom du fichier"""
m = re.search(r'(\d+\.\d+\.\d+[\.\-]\d+)', filename)
return m.group(1) if m else "inconnue"
def list_packages(): def list_packages():
"""Liste les packages disponibles dans /opt/patchcenter/agents/""" """Liste les packages disponibles dans /opt/patchcenter/agents/"""
packages = {"deb": [], "rpm": []} packages = {"deb": [], "rpm": []}
if not os.path.isdir(AGENTS_DIR): if not os.path.isdir(AGENTS_DIR):
return packages return packages
for f in sorted(os.listdir(AGENTS_DIR)): for f in sorted(os.listdir(AGENTS_DIR), reverse=True):
path = os.path.join(AGENTS_DIR, f) path = os.path.join(AGENTS_DIR, f)
size_mb = round(os.path.getsize(path) / 1024 / 1024, 1) size_mb = round(os.path.getsize(path) / 1024 / 1024, 1)
version = _extract_version(f)
entry = {"name": f, "path": path, "size": size_mb, "version": version}
if f.endswith(".deb"): if f.endswith(".deb"):
packages["deb"].append({"name": f, "path": path, "size": size_mb}) packages["deb"].append(entry)
elif f.endswith(".rpm"): elif f.endswith(".rpm"):
packages["rpm"].append({"name": f, "path": path, "size": size_mb}) packages["rpm"].append(entry)
return packages return packages
@ -85,9 +93,12 @@ def check_agent(hostname, ssh_user, ssh_key_path, ssh_port=22):
status = out.strip() status = out.strip()
result["service_status"] = status result["service_status"] = status
# Get version # Get version via package manager
code, out, _ = _run_cmd(client, "qualys-cloud-agent --version 2>/dev/null || cat /etc/qualys/cloud-agent/qualys-cloud-agent.conf 2>/dev/null | grep -i version | head -1") code, out, _ = _run_cmd(client, "rpm -q qualys-cloud-agent 2>/dev/null || dpkg -l qualys-cloud-agent 2>/dev/null | grep '^ii' | awk '{print $3}'")
result["version"] = out.strip()[:50] version = out.strip()
# Extract just version number
m = re.search(r'(\d+\.\d+\.\d+[\.\-]\d+)', version)
result["version"] = m.group(1) if m else version[:50]
# Get last checkin from log # Get last checkin from log
code, out, _ = _run_cmd(client, "tail -5 /var/log/qualys/qualys-cloud-agent.log 2>/dev/null | grep 'HTTP response code: 200' | tail -1 | awk '{print $1, $2}'") code, out, _ = _run_cmd(client, "tail -5 /var/log/qualys/qualys-cloud-agent.log 2>/dev/null | grep 'HTTP response code: 200' | tail -1 | awk '{print $1, $2}'")

View File

@ -39,7 +39,7 @@
<label class="text-xs text-gray-500 block mb-1">Package DEB (Debian/Ubuntu)</label> <label class="text-xs text-gray-500 block mb-1">Package DEB (Debian/Ubuntu)</label>
<select id="package_deb" class="w-full text-xs"> <select id="package_deb" class="w-full text-xs">
{% for p in packages.deb %} {% for p in packages.deb %}
<option value="{{ p.path }}">{{ p.name }} ({{ p.size }} Mo)</option> <option value="{{ p.path }}">v{{ p.version }} — {{ p.name }} ({{ p.size }} Mo)</option>
{% endfor %} {% endfor %}
{% if not packages.deb %}<option value="">Aucun package .deb</option>{% endif %} {% if not packages.deb %}<option value="">Aucun package .deb</option>{% endif %}
</select> </select>
@ -48,7 +48,7 @@
<label class="text-xs text-gray-500 block mb-1">Package RPM (RHEL/CentOS)</label> <label class="text-xs text-gray-500 block mb-1">Package RPM (RHEL/CentOS)</label>
<select id="package_rpm" class="w-full text-xs"> <select id="package_rpm" class="w-full text-xs">
{% for p in packages.rpm %} {% for p in packages.rpm %}
<option value="{{ p.path }}">{{ p.name }} ({{ p.size }} Mo)</option> <option value="{{ p.path }}">v{{ p.version }} — {{ p.name }} ({{ p.size }} Mo)</option>
{% endfor %} {% endfor %}
{% if not packages.rpm %}<option value="">Aucun package .rpm</option>{% endif %} {% if not packages.rpm %}<option value="">Aucun package .rpm</option>{% endif %}
</select> </select>
@ -61,12 +61,12 @@
<input type="text" x-model="filter" placeholder="Rechercher hostname..." class="text-xs" style="width:200px"> <input type="text" x-model="filter" placeholder="Rechercher hostname..." class="text-xs" style="width:200px">
<select x-model="filterDom" class="text-xs" style="width:150px"> <select x-model="filterDom" class="text-xs" style="width:150px">
<option value="">Tous domaines</option> <option value="">Tous domaines</option>
{% set doms = servers|map(attribute='domain')|unique|sort %} {% set doms = servers|map(attribute='domain')|select('string')|unique|sort %}
{% for d in doms %}{% if d %}<option>{{ d }}</option>{% endif %}{% endfor %} {% for d in doms %}{% if d %}<option>{{ d }}</option>{% endif %}{% endfor %}
</select> </select>
<select x-model="filterEnv" class="text-xs" style="width:150px"> <select x-model="filterEnv" class="text-xs" style="width:150px">
<option value="">Tous envs</option> <option value="">Tous envs</option>
{% set envs = servers|map(attribute='env')|unique|sort %} {% set envs = servers|map(attribute='env')|select('string')|unique|sort %}
{% for e in envs %}{% if e %}<option>{{ e }}</option>{% endif %}{% endfor %} {% for e in envs %}{% if e %}<option>{{ e }}</option>{% endif %}{% endfor %}
</select> </select>
<select x-model="filterOs" class="text-xs" style="width:120px"> <select x-model="filterOs" class="text-xs" style="width:120px">