diff --git a/Chat-Protokoll_2025-11-01_18-27-12.md b/Chat-Protokoll_2025-11-01_18-27-12.md new file mode 100755 index 0000000..d1a24f3 --- /dev/null +++ b/Chat-Protokoll_2025-11-01_18-27-12.md @@ -0,0 +1,82 @@ +# Chat-Protokoll — 2025-11-01 18:27:12 + +Dieses Dokument fasst den Chat und die vorgenommenen Änderungen zusammen und enthält die relevanten geänderten Codeabschnitte aus `docker_info.py`. + +Datum: 2025-11-01 +Uhrzeit: 18:27:12 (lokale Systemzeit) + +## Kurzfassung + +- Der Nutzer wollte neue, aussagekräftige Dateinamen für die erzeugten Dateien (CSV und GraphML). +- Empfohlenes Schema: `containers_snapshot__.(csv|graphml)`. +- `docker_info.py` wurde so angepasst, dass Ausgabedateien automatisch das Datum und den (sanierten) Hostnamen enthalten und im Verzeichnis `out_01/` abgelegt werden. + +## Geänderte Codeabschnitte + +### 1) Ergänzte Importe + +```python +import os +import datetime +import socket +``` + +Diese Imports wurden hinzugefügt, um Dateipfade anzulegen, das aktuelle Datum zu bestimmen und den Hostnamen zu ermitteln. + +### 2) Neuer Main-Block (Dateinamens-Generierung & Ausgabepfade) + +```python +if __name__ == '__main__': + print("[*] Sammle Container-Informationen...") + container_data = get_container_info() + + # Erzeuge standardisierte Dateinamen: containers_snapshot__.(csv|graphml) + date_str = datetime.date.today().isoformat() + hostname = sanitize_id(socket.gethostname()) + base_name = f"containers_snapshot_{date_str}_{hostname}" + + out_dir = 'out_01' + try: + os.makedirs(out_dir, exist_ok=True) + except Exception: + # Falls das Anlegen fehlschlägt, fahren wir mit dem aktuellen Verzeichnis fort + out_dir = '.' + + csv_file = os.path.join(out_dir, f"{base_name}.csv") + graph_file = os.path.join(out_dir, f"{base_name}.graphml") + + save_to_csv(container_data, filename=csv_file) + save_to_graphml(container_data, filename=graph_file) + print(f"[+] Dateien: {csv_file}, {graph_file}") +``` + +Die Funktionen `save_to_csv` und `save_to_graphml` verwenden weiterhin denselben Code, wurden aber so aufgerufen, dass die Dateien im neuen Schema erstellt werden. + +## Dateien erstellt/aktualisiert + +- `docker_info.py` — aktualisiert (Importe + Main-Block geändert) +- `/volume1/docker/config/Chat-Protokoll_2025-11-01_18-27-12.md` — neu (dieses Protokoll) +- Frühere Export-Datei: `/volume1/docker/config/chat_export_2025-11-01T000000.md` — existiert ebenfalls + +--- + +Wenn du möchtest, kann ich jetzt: +- das Skript so erweitern, dass es eine CLI-Option `--basename` oder `--timestamp` akzeptiert, +- vorhandene Dateien in `out_01/` automatisch umbenennen (z. B. `docker_container_info.csv` -> neues Schema), oder +- die Markdown-Datei mit einem vollständigen Diff der Änderung ergänzen. + +Welche Aktion bevorzugst du?"} + +## Vorschlag: Git Commit-Message + +Kurze Optionen (wähle eine): + +- English: feat: use timestamped output filenames (containers_snapshot__) +- Deutsch: feat: Ausgabe-Dateinamen mit Datum und Hostnamen + +Zum Anwenden mit Git: + +```bash +git add docker_info.py +git commit -m "feat: use timestamped output filenames (containers_snapshot__)" +``` diff --git a/docker_info.py b/docker_info.py index e62762e..2d60546 100755 --- a/docker_info.py +++ b/docker_info.py @@ -8,6 +8,9 @@ Die GraphML-Datei ist für die Visualisierung in yEd optimiert (Star-Schema). import docker import pandas as pd import re +import os +import datetime +import socket def sanitize_id(text): """ @@ -173,5 +176,22 @@ def save_to_graphml(data, filename='docker_container_info.graphml'): if __name__ == '__main__': print("[*] Sammle Container-Informationen...") container_data = get_container_info() - save_to_csv(container_data) - save_to_graphml(container_data) + + # Erzeuge standardisierte Dateinamen: containers_snapshot__.(csv|graphml) + date_str = datetime.date.today().isoformat() + hostname = sanitize_id(socket.gethostname()) + base_name = f"containers_snapshot_{date_str}_{hostname}" + + out_dir = 'out_01' + try: + os.makedirs(out_dir, exist_ok=True) + except Exception: + # Falls das Anlegen fehlschlägt, fahren wir mit dem aktuellen Verzeichnis fort + out_dir = '.' + + csv_file = os.path.join(out_dir, f"{base_name}.csv") + graph_file = os.path.join(out_dir, f"{base_name}.graphml") + + save_to_csv(container_data, filename=csv_file) + save_to_graphml(container_data, filename=graph_file) + print(f"[+] Dateien: {csv_file}, {graph_file}") diff --git a/graphml/containers_snapshot_2025-11-01_ds200plus.csv b/graphml/containers_snapshot_2025-11-01_ds200plus.csv new file mode 100755 index 0000000..f210617 --- /dev/null +++ b/graphml/containers_snapshot_2025-11-01_ds200plus.csv @@ -0,0 +1,28 @@ +Container Name,Watchtower Enabled,Network,IP Address,Gateway +portainer,true,my_network,172.19.0.9,172.19.0.1 +gitea,not set,my_network,172.19.0.5,172.19.0.1 +gitea,not set,proxy,172.29.0.2,172.29.0.1 +gitlab-db,true,gitlab_system,172.30.0.2,172.30.0.1 +linkwarden-db,true,my_network,172.19.0.4,172.19.0.1 +grafana,true,grafana_default,172.22.0.2,172.22.0.1 +grafana,true,my_network,172.19.0.6,172.19.0.1 +gitlab,true,gitlab_system,172.30.0.3,172.30.0.1 +gitlab,true,my_network,172.19.0.7,172.19.0.1 +linkwarden,true,my_network,172.19.0.2,172.19.0.1 +nodered,true,node-red_node-red-net,172.28.0.2,172.28.0.1 +gitlab-registry,true,gitlab_system,172.30.0.4,172.30.0.1 +gitlab-registry,true,my_network,172.19.0.8,172.19.0.1 +Watchtower,not set,watchtower_default,172.26.0.2,172.26.0.1 +Vaultwarden,not set,my_network,172.19.0.10,172.19.0.1 +influxdb,not set,my_network,172.19.0.3,172.19.0.1 +traefik,not set,my_network,172.19.0.12,172.19.0.1 +deconz,not set,deconz_default,172.24.0.2,172.24.0.1 +seafile-mysql,not set,seafile_seafile_net,172.25.0.2,172.25.0.1 +seafile,not set,my_network,172.19.0.11,172.19.0.1 +seafile,not set,seafile_seafile_net,172.25.0.3,172.25.0.1 +seafile-memcached,not set,seafile_seafile_net,172.25.0.4,172.25.0.1 +nextcloud-app,not set,nextcloud_default,, +nextcloud-db,not set,nextcloud_default,, +nextcloud-redis,not set,nextcloud_default,, +traefik-1,not set,bridge,, +HandBrake,not set,bridge,, diff --git a/graphml/containers_snapshot_2025-11-01_ds200plus.graphml b/graphml/containers_snapshot_2025-11-01_ds200plus.graphml new file mode 100755 index 0000000..772d047 --- /dev/null +++ b/graphml/containers_snapshot_2025-11-01_ds200plus.graphml @@ -0,0 +1,78 @@ + +gitlab_system +gitlab-db: IP: 172.30.0.2, GW: 172.30.0.1 +gitlab: IP: 172.30.0.3, GW: 172.30.0.1 +gitlab-registry: IP: 172.30.0.4, GW: 172.30.0.1bridge +traefik-1: IP: , GW: +HandBrake: IP: , GW: nextcloud_default +nextcloud-app: IP: , GW: +nextcloud-db: IP: , GW: +nextcloud-redis: IP: , GW: deconz_default +deconz: IP: 172.24.0.2, GW: 172.24.0.1watchtower_default +Watchtower: IP: 172.26.0.2, GW: 172.26.0.1grafana_default +grafana: IP: 172.22.0.2, GW: 172.22.0.1node-red_node-red-net +nodered: IP: 172.28.0.2, GW: 172.28.0.1seafile_seafile_net +seafile-mysql: IP: 172.25.0.2, GW: 172.25.0.1 +seafile: IP: 172.25.0.3, GW: 172.25.0.1 +seafile-memcached: IP: 172.25.0.4, GW: 172.25.0.1my_network +portainer: IP: 172.19.0.9, GW: 172.19.0.1 +gitea: IP: 172.19.0.5, GW: 172.19.0.1 +linkwarden-db: IP: 172.19.0.4, GW: 172.19.0.1 +grafana: IP: 172.19.0.6, GW: 172.19.0.1 +gitlab: IP: 172.19.0.7, GW: 172.19.0.1 +linkwarden: IP: 172.19.0.2, GW: 172.19.0.1 +gitlab-registry: IP: 172.19.0.8, GW: 172.19.0.1 +Vaultwarden: IP: 172.19.0.10, GW: 172.19.0.1 +influxdb: IP: 172.19.0.3, GW: 172.19.0.1 +traefik: IP: 172.19.0.12, GW: 172.19.0.1 +seafile: IP: 172.19.0.11, GW: 172.19.0.1proxy +gitea: IP: 172.29.0.2, GW: 172.29.0.1traefik +Watchtower: deaktiviert +IP: 172.19.0.12, GW: 172.19.0.1, Net: my_networknot setgitea +Watchtower: deaktiviert +IP: 172.19.0.5, GW: 172.19.0.1, Net: my_network +IP: 172.29.0.2, GW: 172.29.0.1, Net: proxynot setportainer +Watchtower: aktiviert +IP: 172.19.0.9, GW: 172.19.0.1, Net: my_networktrueVaultwarden +Watchtower: deaktiviert +IP: 172.19.0.10, GW: 172.19.0.1, Net: my_networknot setWatchtower +Watchtower: deaktiviert +IP: 172.26.0.2, GW: 172.26.0.1, Net: watchtower_defaultnot setlinkwarden +Watchtower: aktiviert +IP: 172.19.0.2, GW: 172.19.0.1, Net: my_networktruegitlab-db +Watchtower: aktiviert +IP: 172.30.0.2, GW: 172.30.0.1, Net: gitlab_systemtruenextcloud-db +Watchtower: deaktiviert +IP: , GW: , Net: nextcloud_defaultnot setnextcloud-redis +Watchtower: deaktiviert +IP: , GW: , Net: nextcloud_defaultnot setgitlab-registry +Watchtower: aktiviert +IP: 172.30.0.4, GW: 172.30.0.1, Net: gitlab_system +IP: 172.19.0.8, GW: 172.19.0.1, Net: my_networktruetraefik-1 +Watchtower: deaktiviert +IP: , GW: , Net: bridgenot setseafile-mysql +Watchtower: deaktiviert +IP: 172.25.0.2, GW: 172.25.0.1, Net: seafile_seafile_netnot setseafile-memcached +Watchtower: deaktiviert +IP: 172.25.0.4, GW: 172.25.0.1, Net: seafile_seafile_netnot setseafile +Watchtower: deaktiviert +IP: 172.19.0.11, GW: 172.19.0.1, Net: my_network +IP: 172.25.0.3, GW: 172.25.0.1, Net: seafile_seafile_netnot setinfluxdb +Watchtower: deaktiviert +IP: 172.19.0.3, GW: 172.19.0.1, Net: my_networknot setnextcloud-app +Watchtower: deaktiviert +IP: , GW: , Net: nextcloud_defaultnot setlinkwarden-db +Watchtower: aktiviert +IP: 172.19.0.4, GW: 172.19.0.1, Net: my_networktrueHandBrake +Watchtower: deaktiviert +IP: , GW: , Net: bridgenot setgrafana +Watchtower: aktiviert +IP: 172.22.0.2, GW: 172.22.0.1, Net: grafana_default +IP: 172.19.0.6, GW: 172.19.0.1, Net: my_networktruenodered +Watchtower: aktiviert +IP: 172.28.0.2, GW: 172.28.0.1, Net: node-red_node-red-nettruedeconz +Watchtower: deaktiviert +IP: 172.24.0.2, GW: 172.24.0.1, Net: deconz_defaultnot setgitlab +Watchtower: aktiviert +IP: 172.30.0.3, GW: 172.30.0.1, Net: gitlab_system +IP: 172.19.0.7, GW: 172.19.0.1, Net: my_networktrue \ No newline at end of file