V0.1
This commit is contained in:
@@ -7,7 +7,7 @@ from datetime import datetime
|
||||
|
||||
class InterfaceParser:
|
||||
"""
|
||||
Parses 'display interface' command output to extract interface details.
|
||||
Parse les données de la commande 'display interface' pour extraire les informations des interfaces.
|
||||
"""
|
||||
def parse(self, content: str) -> dict:
|
||||
interfaces = {}
|
||||
@@ -72,11 +72,11 @@ class InterfaceParser:
|
||||
|
||||
class LinkAggregationParser:
|
||||
"""
|
||||
Parses 'display link-aggregation verbose' command output.
|
||||
Extracts link counts, MAC mappings, and bridge mappings.
|
||||
Parse les données de la commande 'display link-aggregation verbose'.
|
||||
Extrait les comptes de liens, les mappages MAC et les mappages de pont.
|
||||
"""
|
||||
def _convert_port_name(self, port_name: str) -> str:
|
||||
"""Converts the port name to a standardized format."""
|
||||
"""Convertit le nom du port en un format standardisé."""
|
||||
port_name = re.sub(r'\([A-Z]\)', '', port_name)
|
||||
patterns = [
|
||||
(r'^XGE(\d+/\d+/\d+)$', r'Ten-GigabitEthernet\1'),
|
||||
@@ -175,11 +175,11 @@ class LinkAggregationParser:
|
||||
|
||||
class ConfigurationParser:
|
||||
"""
|
||||
Parses 'display current-configuration' command output.
|
||||
Extracts interface configurations and general switch configurations.
|
||||
Parse les données de la commande 'display current-configuration'.
|
||||
Extrait les configurations des interfaces et les configurations générales du commutateur.
|
||||
"""
|
||||
def _parse_vlan_ranges(self, vlan_string: str) -> list:
|
||||
"""Parses a VLAN string and returns a list of unique VLANs."""
|
||||
"""Parse un string de VLAN et renvoie une liste de VLANs uniques."""
|
||||
vlans = set()
|
||||
parts = vlan_string.split()
|
||||
i = 0
|
||||
@@ -370,7 +370,7 @@ class ConfigurationParser:
|
||||
|
||||
class DeviceInfoParser:
|
||||
"""
|
||||
Parses 'display device manuinfo' command output to extract MAC addresses.
|
||||
Parse les données de la commande 'display device manuinfo' pour extraire les adresses MAC.
|
||||
"""
|
||||
def parse(self, content: str) -> list[str]:
|
||||
mac_addresses = []
|
||||
@@ -394,8 +394,8 @@ class DeviceInfoParser:
|
||||
|
||||
class LogFileProcessor:
|
||||
"""
|
||||
Manages the parsing of a single log file, coordinating different parsers
|
||||
and merging their results into a unified JSON structure.
|
||||
Manage le parsing d'un fichier journal unique, en coordonnant différents analyseurs
|
||||
et en fusionnant leurs résultats dans une structure JSON unifiée.
|
||||
"""
|
||||
def __init__(self):
|
||||
self.interface_parser = InterfaceParser()
|
||||
@@ -404,7 +404,7 @@ class LogFileProcessor:
|
||||
self.device_info_parser = DeviceInfoParser()
|
||||
|
||||
def _extract_sections(self, file_content: str) -> dict:
|
||||
"""Extracts different sections from the log file content."""
|
||||
"""Extrait les sections pertinentes du contenu du fichier journal en fonction des motifs définis."""
|
||||
sections = {}
|
||||
current_section = None
|
||||
lines = file_content.splitlines()
|
||||
@@ -441,14 +441,14 @@ class LogFileProcessor:
|
||||
return sections
|
||||
|
||||
def _extract_switch_name(self, content: str) -> str | None:
|
||||
"""Extracts the switch name from the log file content."""
|
||||
"""Extrait le nom du commutateur à partir du contenu du fichier journal."""
|
||||
sysname_match = re.search(r"(?m)^\s*sysname\s+(.+)$", content)
|
||||
if sysname_match:
|
||||
return sysname_match.group(1).strip()
|
||||
return None
|
||||
|
||||
def _merge_configuration_into_interfaces(self, interfaces: dict, interfaces_config: dict):
|
||||
"""Merges configuration details into the parsed interface data."""
|
||||
"""Merge les détails de configuration dans les données d'interface analysées."""
|
||||
for interface_name, config in interfaces_config.items():
|
||||
if interface_name in interfaces:
|
||||
interfaces[interface_name].update({
|
||||
@@ -480,13 +480,13 @@ class LogFileProcessor:
|
||||
}
|
||||
|
||||
def _merge_link_aggregation_counts(self, interfaces: dict, link_counts: dict):
|
||||
"""Merges link aggregation counts into the interface data."""
|
||||
"""Merge le nombre de link aggregation dans les données d'interface."""
|
||||
for interface_name, count in link_counts.items():
|
||||
if interface_name in interfaces:
|
||||
interfaces[interface_name]["nb_liens"] = count
|
||||
|
||||
def _merge_mac_mappings(self, interfaces: dict, mac_mappings: dict):
|
||||
"""Merges MAC address mappings into the interface data."""
|
||||
"""Merge les mappages d'adresses MAC dans les données d'interface."""
|
||||
for interface_name, mac_address in mac_mappings.items():
|
||||
if interface_name in interfaces:
|
||||
interfaces[interface_name]["mac_destination"] = mac_address
|
||||
@@ -509,15 +509,15 @@ class LogFileProcessor:
|
||||
}
|
||||
|
||||
def _merge_bridge_mappings(self, interfaces: dict, bridge_mappings: dict):
|
||||
"""Merges bridge aggregation mappings into existing interfaces."""
|
||||
"""Merge les bridge agreggation dans les interfaces existantes."""
|
||||
for interface_name, bridge_name in bridge_mappings.items():
|
||||
if interface_name in interfaces:
|
||||
interfaces[interface_name]["bridge_name"] = bridge_name
|
||||
|
||||
def process_file(self, filepath: str) -> dict | None:
|
||||
"""
|
||||
Processes a single log file to extract and consolidate network device data.
|
||||
Returns a dictionary containing metadata and parsed data, or None on error.
|
||||
Gère le parsing d'un fichier journal unique pour extraire et consolider les données des appareils réseau.
|
||||
Renvoie un dictionnaire contenant des métadonnées et des données analysées, ou None en cas d'erreur.
|
||||
"""
|
||||
try:
|
||||
with open(filepath, 'r', encoding='latin-1', errors='ignore') as f:
|
||||
@@ -580,7 +580,7 @@ class LogFileProcessor:
|
||||
|
||||
class DataExporter:
|
||||
"""
|
||||
Handles the export of processed data to a JSON file.
|
||||
Gère l'export des données traitées vers un fichier JSON.
|
||||
"""
|
||||
def export(self, data: dict, output_filepath: str):
|
||||
try:
|
||||
@@ -596,7 +596,8 @@ class DataExporter:
|
||||
|
||||
class MainApplication:
|
||||
"""
|
||||
Main application class to orchestrate the log file processing.
|
||||
Application principale pour coordonner le traitement des fichiers journaux,
|
||||
l'export des données et la gestion des erreurs.
|
||||
"""
|
||||
def __init__(self):
|
||||
self.processor = LogFileProcessor()
|
||||
@@ -625,8 +626,8 @@ class MainApplication:
|
||||
|
||||
def process_file_return_json(filepath: str) -> dict | None:
|
||||
"""
|
||||
Standalone function to process a single file and return JSON object,
|
||||
useful for external calls that don't need the full CLI application.
|
||||
Fonction autonome pour traiter un fichier unique et renvoyer un objet JSON,
|
||||
utile pour les appels externes.
|
||||
"""
|
||||
processor = LogFileProcessor()
|
||||
return processor.process_file(filepath)
|
||||
|
||||
Reference in New Issue
Block a user