Add French docstrings and README

- Docstrings for all modules, classes and methods
- README.md with installation and usage instructions
- Update CLAUDE.md with dns.py

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-26 18:25:20 +01:00
parent 9f3c052e2a
commit b0d571ae26
8 changed files with 341 additions and 18 deletions

View File

@@ -1,3 +1,10 @@
"""
Checker SNMP.
Vérifie la disponibilité d'un équipement réseau via SNMP et peut
récupérer sa température.
"""
import asyncio
import time
@@ -11,10 +18,47 @@ from .base import BaseChecker, CheckResult
class SnmpChecker(BaseChecker):
"""
Vérifie la disponibilité d'un équipement via SNMP.
Utilise SNMPv2c pour interroger un OID et optionnellement
récupérer la température de l'équipement.
Configuration YAML:
host: Adresse IP de l'équipement (obligatoire).
port: Port SNMP (défaut: 161).
community: Communauté SNMP (défaut: public).
oid: OID à interroger (défaut: sysDescr).
temperature_oid: OID de la température (optionnel).
Note: Utiliser l'OID complet (feuille, pas branche).
Exemples:
- Mikrotik: 1.3.6.1.4.1.14988.1.1.3.100.1.3.52.0
- Synology: 1.3.6.1.4.1.6574.1.2.0
timeout: Délai d'attente en secondes (défaut: 5).
"""
def check(self) -> CheckResult:
"""
Exécute la vérification SNMP.
Wrapper synchrone autour de _async_check() pour compatibilité
avec l'interface BaseChecker.
Returns:
CheckResult avec success=True si l'équipement répond.
"""
return asyncio.run(self._async_check())
async def _async_check(self) -> CheckResult:
"""
Exécute la requête SNMP de manière asynchrone.
Interroge l'OID principal et optionnellement l'OID de température
en une seule requête SNMP GET.
Returns:
CheckResult contenant le résultat et la température si configurée.
"""
host = self.config["host"]
port = self.config.get("port", 161)
community = self.config.get("community", "public")
@@ -25,7 +69,7 @@ class SnmpChecker(BaseChecker):
start = time.time()
try:
with Slim() as slim:
# Build list of OIDs to query
# Construit la liste des OIDs à interroger
oids = [ObjectType(ObjectIdentity(oid))]
if temperature_oid:
oids.append(ObjectType(ObjectIdentity(temperature_oid)))
@@ -54,15 +98,15 @@ class SnmpChecker(BaseChecker):
response_time=None
)
else:
# Only include main OID in details, not temperature
# Inclut uniquement l'OID principal dans les détails
details = {str(var_binds[0][0]): str(var_binds[0][1])}
# Extract temperature if configured (second OID in response)
# Extrait la température si configurée (deuxième OID)
if temperature_oid and len(var_binds) >= 2:
try:
details["temperature"] = int(var_binds[1][1])
except (ValueError, TypeError):
pass # Ignore if not a valid integer
pass # Ignore si la valeur n'est pas un entier
return CheckResult(
success=True,