docs: add standardized comments to all services (Python, Go, Bash)

- Add docs/commenting-standard.md defining per-language comment standards
  (Go godoc, Python PEP-257, C Doxygen, Bash header blocks, SQL banners)

- services/dashboard: 100% docstring coverage (100/100 functions)
  - All FastAPI route handlers, helpers, classes, and models documented
  - Language: French (project convention)

- services/bot-detector: 100% docstring coverage (53/53 symbols)
  - bot_detector.py: 14 functions + module docstring
  - anubis/fetch_rules.py: 9 functions

- shared/python/ja4_common: full docstrings on ClickHouseClient (7 methods)
  and ClickHouseSettings class

- services/correlator: 24 godoc comments added across 6 Go files
  - correlation_service.go: 10 private helpers
  - unixsocket/source.go: 6 parsing/socket helpers
  - correlated_log.go: 4 field extraction helpers
  - orchestrator.go, logger.go, main.go: 4 comments

- services/correlator/scripts/audit-architecture.sh: standardized header block

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
toto
2026-04-07 21:32:29 +02:00
parent 12d60975da
commit 3dfeba860b
22 changed files with 388 additions and 10 deletions

View File

@ -8,6 +8,7 @@ from enum import Enum
class ThreatLevel(str, Enum):
"""Niveaux de menace supportés par le modèle de détection."""
CRITICAL = "CRITICAL"
HIGH = "HIGH"
MEDIUM = "MEDIUM"
@ -19,6 +20,7 @@ class ThreatLevel(str, Enum):
# ─────────────────────────────────────────────────────────────────────────────
class MetricsSummary(BaseModel):
"""Résumé agrégé des métriques sur les dernières 24 heures."""
total_detections: int
critical_count: int
high_count: int
@ -30,6 +32,7 @@ class MetricsSummary(BaseModel):
class TimeSeriesPoint(BaseModel):
"""Point de série temporelle par heure pour les métriques."""
hour: datetime
total: int
critical: int
@ -39,6 +42,7 @@ class TimeSeriesPoint(BaseModel):
class MetricsResponse(BaseModel):
"""Réponse complète des métriques du dashboard avec série temporelle."""
summary: MetricsSummary
timeseries: List[TimeSeriesPoint]
threat_distribution: Dict[str, int]
@ -49,6 +53,7 @@ class MetricsResponse(BaseModel):
# ─────────────────────────────────────────────────────────────────────────────
class Detection(BaseModel):
"""Représentation d'une détection d'anomalie émise par le modèle ML."""
detected_at: datetime
src_ip: str
ja4: str
@ -82,6 +87,7 @@ class Detection(BaseModel):
class DetectionsListResponse(BaseModel):
"""Liste paginée de détections d'anomalies."""
items: List[Detection]
total: int
page: int
@ -94,6 +100,7 @@ class DetectionsListResponse(BaseModel):
# ─────────────────────────────────────────────────────────────────────────────
class AttributeValue(BaseModel):
"""Valeur d'attribut avec comptage, pourcentage et métadonnées temporelles."""
value: str
count: int
percentage: float
@ -105,6 +112,7 @@ class AttributeValue(BaseModel):
class VariabilityAttributes(BaseModel):
"""Ensemble des attributs de variabilité comportementale pour une entité."""
user_agents: List[AttributeValue] = Field(default_factory=list)
ja4: List[AttributeValue] = Field(default_factory=list)
countries: List[AttributeValue] = Field(default_factory=list)
@ -115,11 +123,13 @@ class VariabilityAttributes(BaseModel):
class Insight(BaseModel):
"""Message d'analyse contextuelle (alerte, information ou succès)."""
type: str # "warning", "info", "success"
message: str
class VariabilityResponse(BaseModel):
"""Réponse d'analyse de variabilité pour un attribut donné."""
type: str
value: str
total_detections: int
@ -134,11 +144,13 @@ class VariabilityResponse(BaseModel):
# ─────────────────────────────────────────────────────────────────────────────
class AttributeListItem(BaseModel):
"""Élément de la liste des valeurs uniques d'un attribut avec son comptage."""
value: str
count: int
class AttributeListResponse(BaseModel):
"""Réponse de la liste des valeurs uniques pour un type d'attribut."""
type: str
items: List[AttributeListItem]
total: int
@ -149,6 +161,7 @@ class AttributeListResponse(BaseModel):
# ─────────────────────────────────────────────────────────────────────────────
class UserAgentValue(BaseModel):
"""Valeur de User-Agent avec comptage et plage temporelle d'observation."""
value: str
count: int
percentage: float
@ -157,6 +170,7 @@ class UserAgentValue(BaseModel):
class UserAgentsResponse(BaseModel):
"""Réponse de la liste des User-Agents associés à une entité."""
type: str
value: str
user_agents: List[UserAgentValue]
@ -169,12 +183,14 @@ class UserAgentsResponse(BaseModel):
# ─────────────────────────────────────────────────────────────────────────────
class ClassificationLabel(str, Enum):
"""Étiquettes de classification SOC pour les IPs et fingerprints JA4."""
LEGITIMATE = "legitimate"
SUSPICIOUS = "suspicious"
MALICIOUS = "malicious"
class ClassificationBase(BaseModel):
"""Modèle de base partagé pour les classifications SOC."""
ip: Optional[str] = None
ja4: Optional[str] = None
label: ClassificationLabel
@ -198,6 +214,7 @@ class Classification(ClassificationBase):
class ClassificationsListResponse(BaseModel):
"""Liste paginée des classifications SOC enregistrées."""
items: List[Classification]
total: int