This commit is contained in:
Mateusz Gruszczyński
2026-08-16 11:46:35 +02:00
parent e8e5515e24
commit e5d344622e
22 changed files with 3511 additions and 11 deletions
+42 -1
View File
@@ -21,6 +21,7 @@ from .flow_tracker import FlowTracker
from .forensics import ForensicPcapRing
from .live import EventBus, LiveEventPipeline, TrafficHistory, TrafficNormalizer
from .maintenance import clear_suricata_logs, storage_info
from .metrics import PrometheusMetrics
from .ndr import NDRAnalyzer, ThreatIntelManager
from .notifier import WebhookNotifier
from .policy import PolicyEngine
@@ -210,7 +211,7 @@ def main() -> int:
cfg.redis_snapshot_seconds,
cfg.redis_aof,
)
if cfg.redis_managed and not redis_supervisor.start(wait_ready_seconds=15):
if cfg.redis_managed and not redis_supervisor.start(wait_ready_seconds=120):
raise RuntimeError(
f"managed Redis failed to start: {redis_supervisor.status().get('last_error') or 'unknown error'}"
)
@@ -422,6 +423,45 @@ def main() -> int:
"runtime": stats.snapshot(),
}
version_path = Path(__file__).resolve().parents[1] / "VERSION"
try:
app_version = version_path.read_text(encoding="ascii").strip() or "unknown"
except OSError:
app_version = "unknown"
def metrics_state() -> dict:
return {
"components": {
"web": True,
"tzsp": receiver.is_alive() and receiver.sock is not None,
"tap": tap.fd is not None,
"suricata": suricata.poll() is None,
"eve": watcher.is_alive(),
},
"features": {
"auto_block": cfg.auto_block,
"ndr": cfg.ndr_enabled,
"notifications": notifier.enabled,
"routeros": routeros.configured,
"redis_managed": cfg.redis_managed,
"forensic_pcap": cfg.forensic_pcap_mode != "off",
},
}
prometheus_metrics = PrometheusMetrics(
stats,
version=app_version,
mode="full",
started_at=started_at,
state_provider=metrics_state,
flow_tracker=flow_tracker,
event_bus=event_bus,
live_pipeline=live_pipeline,
ndr_analyzer=ndr_analyzer,
notifier=notifier,
forensic_pcap=forensic_pcap,
)
web = WebServer(
cfg,
store,
@@ -437,6 +477,7 @@ def main() -> int:
ndr_analyzer=ndr_analyzer,
backup_manager=backup_manager,
forensic_pcap=forensic_pcap,
metrics_provider=prometheus_metrics.render,
)
def housekeeping() -> None: