Module demo_api.utils.services.report_service
Service de génération de rapports
Classes
class ReportService (api_client: utils.api.ApiClient)-
Expand source code
class ReportService: """Service pour la génération de rapports""" def __init__(self, api_client: Api): """ Initialise le service de rapport Args: api_client: Client API unifié """ self.api = api_client def generate_users_vms_report( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_users.json", ) -> Optional[str]: """ Génère un rapport utilisateurs/VMs Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport utilisateurs/VMs") if not users or not vms: logger.warning( "Impossible de générer le rapport: données manquantes", users_count=len(users), vms_count=len(vms), ) return None # Associer les VMs aux utilisateurs self.api.users.add_vms_to_users(users, vms) # Génération du rapport JSON try: logger.info("Génération du rapport JSON") json_generator = JSONReportGenerator() report_file = json_generator.generate_users_vms_report(users, filename) logger.info("Rapport JSON généré avec succès", filename=report_file) return report_file except (IOError, TypeError) as e: logger.error("Erreur lors de la génération du rapport", error=str(e)) return None def generate_status_report( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_status_report.json", ) -> Optional[str]: """ Génère un rapport des VMs par statut Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport de statut des VMs") if not vms: logger.warning( "Impossible de générer le rapport de statut: pas de VMs disponibles" ) return None # Compter les VMs par statut status_counts: Dict[str, int] = {} for vm in vms: status = vm.get("status", "unknown") status_counts[status] = status_counts.get(status, 0) + 1 # Créer le rapport avec une structure claire et concise status_report = { "summary": { "total_vms": len(vms), "total_users": len(users), }, "vm_status_counts": status_counts, } try: json_generator = JSONReportGenerator() report_file = json_generator.generate(status_report, filename) logger.info("Rapport de statut généré avec succès", filename=report_file) return report_file except (IOError, TypeError) as e: logger.error( "Erreur lors de la génération du rapport de statut", error=str(e) ) return None def generate_users_vms_report_markdown( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_users.md", ) -> Optional[str]: """ Génère un rapport utilisateurs/VMs en Markdown Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport utilisateurs/VMs Markdown") if not users or not vms: logger.warning( "Impossible de générer le rapport: données manquantes", users_count=len(users), vms_count=len(vms), ) return None # Associer les VMs aux utilisateurs self.api.users.add_vms_to_users(users, vms) # Génération du rapport Markdown try: logger.info("Génération du rapport Markdown") markdown_generator = MarkdownReportGenerator() report_file = markdown_generator.generate_users_vms_report(users, filename) logger.info("Rapport Markdown généré avec succès", filename=report_file) return report_file except (IOError, TypeError) as e: logger.error( "Erreur lors de la génération du rapport Markdown", error=str(e) ) return None def generate_users_vms_report_html( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_users.html", ) -> Optional[str]: """ Génère un rapport utilisateurs/VMs en HTML Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport utilisateurs/VMs HTML") if not users or not vms: logger.warning( "Impossible de générer le rapport: données manquantes", users_count=len(users), vms_count=len(vms), ) return None # Associer les VMs aux utilisateurs self.api.users.add_vms_to_users(users, vms) # Génération du rapport HTML try: logger.info("Génération du rapport HTML") html_generator = HTMLReportGenerator() report_file = html_generator.generate_users_vms_report(users, filename) logger.info("Rapport HTML généré avec succès", filename=report_file) return report_file except (IOError, TypeError) as e: logger.error("Erreur lors de la génération du rapport HTML", error=str(e)) return None def generate_status_report_markdown( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_status_report.md", ) -> Optional[str]: """ Génère un rapport de statut des VMs en Markdown Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport de statut des VMs Markdown") if not vms: logger.warning( "Impossible de générer le rapport de statut: pas de VMs disponibles" ) return None # Compter les VMs par statut status_counts: Dict[str, int] = {} for vm in vms: status = vm.get("status", "unknown") status_counts[status] = status_counts.get(status, 0) + 1 # Créer le rapport avec une structure claire et concise status_report = { "summary": { "total_vms": len(vms), "total_users": len(users), }, "vm_status_counts": status_counts, } try: markdown_generator = MarkdownReportGenerator() report_file = markdown_generator.generate_status_report( status_report, filename ) logger.info( "Rapport de statut Markdown généré avec succès", filename=report_file ) return report_file except (IOError, TypeError) as e: logger.error( "Erreur lors de la génération du rapport de statut Markdown", error=str(e), ) return None def generate_status_report_html( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_status_report.html", ) -> Optional[str]: """ Génère un rapport de statut des VMs en HTML Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport de statut des VMs HTML") if not vms: logger.warning( "Impossible de générer le rapport de statut: pas de VMs disponibles" ) return None # Compter les VMs par statut status_counts: Dict[str, int] = {} for vm in vms: status = vm.get("status", "unknown") status_counts[status] = status_counts.get(status, 0) + 1 # Créer le rapport avec une structure claire et concise status_report = { "summary": { "total_vms": len(vms), "total_users": len(users), }, "vm_status_counts": status_counts, } try: html_generator = HTMLReportGenerator() report_file = html_generator.generate_status_report(status_report, filename) logger.info( "Rapport de statut HTML généré avec succès", filename=report_file ) return report_file except (IOError, TypeError) as e: logger.error( "Erreur lors de la génération du rapport de statut HTML", error=str(e) ) return NoneService pour la génération de rapports
Initialise le service de rapport
Args
api_client- Client API unifié
Methods
def generate_status_report(self,
users: List[Dict[str, Any]],
vms: List[Dict[str, Any]],
filename: str = 'vm_status_report.json') ‑> str | None-
Expand source code
def generate_status_report( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_status_report.json", ) -> Optional[str]: """ Génère un rapport des VMs par statut Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport de statut des VMs") if not vms: logger.warning( "Impossible de générer le rapport de statut: pas de VMs disponibles" ) return None # Compter les VMs par statut status_counts: Dict[str, int] = {} for vm in vms: status = vm.get("status", "unknown") status_counts[status] = status_counts.get(status, 0) + 1 # Créer le rapport avec une structure claire et concise status_report = { "summary": { "total_vms": len(vms), "total_users": len(users), }, "vm_status_counts": status_counts, } try: json_generator = JSONReportGenerator() report_file = json_generator.generate(status_report, filename) logger.info("Rapport de statut généré avec succès", filename=report_file) return report_file except (IOError, TypeError) as e: logger.error( "Erreur lors de la génération du rapport de statut", error=str(e) ) return NoneGénère un rapport des VMs par statut
Args
users- Liste des utilisateurs
vms- Liste des VMs
filename- Nom du fichier de sortie
Returns
Chemin du fichier généré ou None si échec
def generate_status_report_html(self,
users: List[Dict[str, Any]],
vms: List[Dict[str, Any]],
filename: str = 'vm_status_report.html') ‑> str | None-
Expand source code
def generate_status_report_html( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_status_report.html", ) -> Optional[str]: """ Génère un rapport de statut des VMs en HTML Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport de statut des VMs HTML") if not vms: logger.warning( "Impossible de générer le rapport de statut: pas de VMs disponibles" ) return None # Compter les VMs par statut status_counts: Dict[str, int] = {} for vm in vms: status = vm.get("status", "unknown") status_counts[status] = status_counts.get(status, 0) + 1 # Créer le rapport avec une structure claire et concise status_report = { "summary": { "total_vms": len(vms), "total_users": len(users), }, "vm_status_counts": status_counts, } try: html_generator = HTMLReportGenerator() report_file = html_generator.generate_status_report(status_report, filename) logger.info( "Rapport de statut HTML généré avec succès", filename=report_file ) return report_file except (IOError, TypeError) as e: logger.error( "Erreur lors de la génération du rapport de statut HTML", error=str(e) ) return NoneGénère un rapport de statut des VMs en HTML
Args
users- Liste des utilisateurs
vms- Liste des VMs
filename- Nom du fichier de sortie
Returns
Chemin du fichier généré ou None si échec
def generate_status_report_markdown(self,
users: List[Dict[str, Any]],
vms: List[Dict[str, Any]],
filename: str = 'vm_status_report.md') ‑> str | None-
Expand source code
def generate_status_report_markdown( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_status_report.md", ) -> Optional[str]: """ Génère un rapport de statut des VMs en Markdown Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport de statut des VMs Markdown") if not vms: logger.warning( "Impossible de générer le rapport de statut: pas de VMs disponibles" ) return None # Compter les VMs par statut status_counts: Dict[str, int] = {} for vm in vms: status = vm.get("status", "unknown") status_counts[status] = status_counts.get(status, 0) + 1 # Créer le rapport avec une structure claire et concise status_report = { "summary": { "total_vms": len(vms), "total_users": len(users), }, "vm_status_counts": status_counts, } try: markdown_generator = MarkdownReportGenerator() report_file = markdown_generator.generate_status_report( status_report, filename ) logger.info( "Rapport de statut Markdown généré avec succès", filename=report_file ) return report_file except (IOError, TypeError) as e: logger.error( "Erreur lors de la génération du rapport de statut Markdown", error=str(e), ) return NoneGénère un rapport de statut des VMs en Markdown
Args
users- Liste des utilisateurs
vms- Liste des VMs
filename- Nom du fichier de sortie
Returns
Chemin du fichier généré ou None si échec
def generate_users_vms_report(self,
users: List[Dict[str, Any]],
vms: List[Dict[str, Any]],
filename: str = 'vm_users.json') ‑> str | None-
Expand source code
def generate_users_vms_report( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_users.json", ) -> Optional[str]: """ Génère un rapport utilisateurs/VMs Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport utilisateurs/VMs") if not users or not vms: logger.warning( "Impossible de générer le rapport: données manquantes", users_count=len(users), vms_count=len(vms), ) return None # Associer les VMs aux utilisateurs self.api.users.add_vms_to_users(users, vms) # Génération du rapport JSON try: logger.info("Génération du rapport JSON") json_generator = JSONReportGenerator() report_file = json_generator.generate_users_vms_report(users, filename) logger.info("Rapport JSON généré avec succès", filename=report_file) return report_file except (IOError, TypeError) as e: logger.error("Erreur lors de la génération du rapport", error=str(e)) return NoneGénère un rapport utilisateurs/VMs
Args
users- Liste des utilisateurs
vms- Liste des VMs
filename- Nom du fichier de sortie
Returns
Chemin du fichier généré ou None si échec
def generate_users_vms_report_html(self,
users: List[Dict[str, Any]],
vms: List[Dict[str, Any]],
filename: str = 'vm_users.html') ‑> str | None-
Expand source code
def generate_users_vms_report_html( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_users.html", ) -> Optional[str]: """ Génère un rapport utilisateurs/VMs en HTML Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport utilisateurs/VMs HTML") if not users or not vms: logger.warning( "Impossible de générer le rapport: données manquantes", users_count=len(users), vms_count=len(vms), ) return None # Associer les VMs aux utilisateurs self.api.users.add_vms_to_users(users, vms) # Génération du rapport HTML try: logger.info("Génération du rapport HTML") html_generator = HTMLReportGenerator() report_file = html_generator.generate_users_vms_report(users, filename) logger.info("Rapport HTML généré avec succès", filename=report_file) return report_file except (IOError, TypeError) as e: logger.error("Erreur lors de la génération du rapport HTML", error=str(e)) return NoneGénère un rapport utilisateurs/VMs en HTML
Args
users- Liste des utilisateurs
vms- Liste des VMs
filename- Nom du fichier de sortie
Returns
Chemin du fichier généré ou None si échec
def generate_users_vms_report_markdown(self,
users: List[Dict[str, Any]],
vms: List[Dict[str, Any]],
filename: str = 'vm_users.md') ‑> str | None-
Expand source code
def generate_users_vms_report_markdown( self, users: List[Dict[str, Any]], vms: List[Dict[str, Any]], filename: str = "vm_users.md", ) -> Optional[str]: """ Génère un rapport utilisateurs/VMs en Markdown Args: users: Liste des utilisateurs vms: Liste des VMs filename: Nom du fichier de sortie Returns: Chemin du fichier généré ou None si échec """ logger.info("Début de génération du rapport utilisateurs/VMs Markdown") if not users or not vms: logger.warning( "Impossible de générer le rapport: données manquantes", users_count=len(users), vms_count=len(vms), ) return None # Associer les VMs aux utilisateurs self.api.users.add_vms_to_users(users, vms) # Génération du rapport Markdown try: logger.info("Génération du rapport Markdown") markdown_generator = MarkdownReportGenerator() report_file = markdown_generator.generate_users_vms_report(users, filename) logger.info("Rapport Markdown généré avec succès", filename=report_file) return report_file except (IOError, TypeError) as e: logger.error( "Erreur lors de la génération du rapport Markdown", error=str(e) ) return NoneGénère un rapport utilisateurs/VMs en Markdown
Args
users- Liste des utilisateurs
vms- Liste des VMs
filename- Nom du fichier de sortie
Returns
Chemin du fichier généré ou None si échec