Add bpf_logging/src/bpf_logging/core.py
This commit is contained in:
parent
2ce9be97f4
commit
d8507ca74b
1 changed files with 55 additions and 0 deletions
55
bpf_logging/src/bpf_logging/core.py
Normal file
55
bpf_logging/src/bpf_logging/core.py
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
from bcc import BPF
|
||||||
|
|
||||||
|
_LOG_DIR = Path("output")
|
||||||
|
_LOG_FILE = _LOG_DIR / "log_entries.json"
|
||||||
|
_bpf_instance = None
|
||||||
|
|
||||||
|
def setup_bpf_logging(correlation_id: str) -> None:
|
||||||
|
"""Initialisiert die BPF-Logging-Struktur für eine gegebene Correlation-ID."""
|
||||||
|
if not isinstance(correlation_id, str) or not correlation_id.strip():
|
||||||
|
raise ValueError("correlation_id muss ein nicht-leerer String sein.")
|
||||||
|
|
||||||
|
global _bpf_instance
|
||||||
|
_LOG_DIR.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
# Beispielhaftes BPF-Setup (Stub für tatsächliches eBPF-Programm)
|
||||||
|
prog = "int kprobe__sched_switch(void *ctx) { return 0; }"
|
||||||
|
_bpf_instance = BPF(text=prog)
|
||||||
|
|
||||||
|
# Optional: Schreibe Initialeintrag
|
||||||
|
init_entry = {
|
||||||
|
"correlation_id": correlation_id,
|
||||||
|
"event_type": "setup",
|
||||||
|
"timestamp": time.time()
|
||||||
|
}
|
||||||
|
_append_log(init_entry)
|
||||||
|
|
||||||
|
|
||||||
|
def log_timekeeping_event(event_type: str, correlation_id: str) -> None:
|
||||||
|
"""Protokolliert ein Zeitmessungsereignis als JSON-Zeile."""
|
||||||
|
if not isinstance(event_type, str) or not event_type.strip():
|
||||||
|
raise ValueError("event_type muss ein nicht-leerer String sein.")
|
||||||
|
if not isinstance(correlation_id, str) or not correlation_id.strip():
|
||||||
|
raise ValueError("correlation_id muss ein nicht-leerer String sein.")
|
||||||
|
|
||||||
|
entry = {
|
||||||
|
"correlation_id": correlation_id,
|
||||||
|
"event_type": event_type,
|
||||||
|
"timestamp": time.time()
|
||||||
|
}
|
||||||
|
_append_log(entry)
|
||||||
|
|
||||||
|
|
||||||
|
def _append_log(entry: dict) -> None:
|
||||||
|
"""Hilfsfunktion zum Anhängen eines JSON-Logeintrags an die Logdatei."""
|
||||||
|
if not isinstance(entry, dict):
|
||||||
|
raise TypeError("Ein Logeintrag muss ein Dictionary sein.")
|
||||||
|
|
||||||
|
_LOG_DIR.mkdir(parents=True, exist_ok=True)
|
||||||
|
with open(_LOG_FILE, "a", encoding="utf-8") as f:
|
||||||
|
json.dump(entry, f, ensure_ascii=False)
|
||||||
|
f.write("\n")
|
||||||
Loading…
Reference in a new issue