Legacy ETL Control Plane

DataEngine Dashboard

Tenant default Dashboard Handbuch

Bedienungsanleitung

Operative Live-Dokumentation aus dem Repository. Stand: 2026-03-10 23:58:22

# Bedienungsanleitung Drive DataEngine ## 1. Zweck Drive DataEngine ist eine Symfony-basierte Kontrollschicht fuer den bestehenden Legacy-ETL-Bestand. Die Plattform stellt aktuell bereit: - Dashboard unter `https://dataengine.domgan.de` - oeffentlich lesbare Bedienungsanleitung unter `https://dataengine.domgan.de/manual` - tenant-isolierte Run-Historie in PostgreSQL mit RLS - CLI-Commands fuer Katalog, Verbindungsprofile, Run-Planung und Ausfuehrung - kontrollierte Legacy-Ausfuehrung ueber die interne Bridge - erste native Symfony-Runtime fuer Legacy-Datenbankprofile auf MySQL-Basis - erste native MySQL-Datapool-Schreiboperationen fuer Betrieb und Migration ## 2. Aktueller Architekturstand ### 2.1 Komponenten - `dashboard` Symfony-Weboberflaeche und Symfony-CLI - `legacy-bridge` startet bestehende Legacy-Runner kontrolliert per HTTP - `postgres` speichert Tenants, Runs und synchronisierte Connection-Metadaten - `traefik` bindet `dataengine.domgan.de` von aussen an ### 2.2 Legacy vs. native Runtime Aktueller Stand: - Pipelines und Engines werden nativ in Symfony erkannt und vorvalidiert. - Die eigentliche fachliche Ausfuehrung laeuft weiterhin ueber die Legacy-Bridge. - Legacy-Datenbankprofile koennen in Symfony bereits nativ bewertet werden. - Fuer MySQL-Profile existieren read-only Runtime-Probes, Datapool-Inspektion sowie erste Write-Operationen. - ODBC-Profile bleiben vorerst im Legacy-Pfad. ## 3. Zugriff ### 3.1 Web - URL: `https://dataengine.domgan.de` - aktueller Status: oeffentlich erreichbar ueber Traefik - Handbuch: `https://dataengine.domgan.de/manual` ### 3.2 Server - Deployment-Ziel: `ortho-live` - Projektpfad auf dem Server: `/opt/containers/drive-dataengine` - Compose-Datei: `/opt/containers/drive-dataengine/compose.yaml` ## 4. Mandantenmodell Die Multi-Tenant-Isolation gilt derzeit fuer die Kontrollschicht: - `tenants` - `execution_runs` - `connection_profiles` Die Isolation erfolgt ueber PostgreSQL Row Level Security und den gesetzten Tenant-Kontext in Symfony. ## 5. Dashboard bedienen ### 5.1 Startseite Die Startseite zeigt: - Anzahl erkannter Pipelines und Engines - Tenant-Kontext - erkannte Legacy-Verbindungsprofile - native Datenbank-Runtime-Abdeckung - native Datapool-Write-Abdeckung - letzte tenant-isolierte Ausfuehrungen - alle gefundenen Pipelines - alle gefundenen Engines pro Runner-Typ ### 5.5 Bedienungsanleitung im Dashboard Unter `https://dataengine.domgan.de/manual` wird immer die aktuelle Datei `docs/bedienungsanleitung.md` aus dem ausgelieferten Stand angezeigt. Damit gilt: - Jede Aenderung an Bedienung, Commands oder Betrieb muss die Markdown-Datei aktualisieren. - Nach jedem Deployment ist die Live-Anleitung automatisch synchron mit dem Container-Stand. ### 5.2 Pipeline ausfuehren Im Pipeline-Bereich: 1. Pipeline-Karte waehlen 2. `Pipeline ausfuehren` klicken 3. Das System legt einen Run in PostgreSQL an 4. Der Run wird asynchron ueber die Legacy-Bridge abgearbeitet 5. Im Run-Detail ist der native Preflight sichtbar ### 5.3 Engine ausfuehren Im Engine-Bereich: 1. Engine-Karte waehlen 2. `Engine ausfuehren` klicken 3. Der Run wird in PostgreSQL protokolliert 4. Die Ausfuehrung bleibt bis zur Portierung im Legacy-Pfad ### 5.4 Run-Detail lesen Im Run-Detail werden angezeigt: - Run-Status - Runner-Typ und Name - Trigger-Quelle - Start-/Endzeit - Exit-Code - stdout/stderr - nativer Ausfuehrungsplan mit Schritten, Connections und Validierungsfehlern ## 6. Wichtige CLI-Commands Alle Commands laufen im Dashboard-Container. Beispiel: ```bash ssh ortho-live 'cd /opt/containers/drive-dataengine && docker compose -f compose.yaml exec -T dashboard php /srv/app/symfony/bin/console <command>' ``` ### 6.1 Katalog und Planung - `app:etl:list` listet alle erkannten Pipelines und Engines - `app:etl:plan <runner-type> <name>` erzeugt den nativen Ausfuehrungsplan Beispiel: ```bash php /srv/app/symfony/bin/console app:etl:plan pipeline pipeline_update_articles_wandmontage ``` ### 6.2 Ausfuehrung - `app:etl:run-pipeline <name> [--tenant=default] [--async]` - `app:etl:run-engine <runner-type> <name> [--tenant=default] [--async]` - `app:execution:run <run-id> [--tenant=default]` interner Worker-Command ### 6.3 Verbindungsprofile - `app:etl:list-connections` zeigt erkannte Legacy-Verbindungsprofile - `app:legacy:sync-connections --tenant=default` synchronisiert redigierte Metadaten tenant-sicher nach PostgreSQL ### 6.4 Native Datenbank-Runtime - `app:etl:list-database-runtime` zeigt, welche Legacy-Datenbankprofile in Symfony nativ nutzbar sind - `app:etl:test-database-connection <profile>` fuehrt einen read-only Verbindungsprobe-Lauf fuer ein MySQL-Profil aus - `app:etl:list-datapools <profile>` listet Datapools eines nativen MySQL-Profils read-only auf - `app:etl:inspect-datapool <profile> <table> [--with-count] [--show-create-sql]` zeigt Spaltenstruktur eines Datapools und optional Zeilenzahl bzw. `SHOW CREATE TABLE` ### 6.5 Native Datapool-Write-Operationen - `app:etl:drop-datapool <profile> <table>` fuehrt `DROP TABLE IF EXISTS` kontrolliert fuer ein natives MySQL-Profil aus - `app:etl:truncate-datapool <profile> <table>` fuehrt `TRUNCATE TABLE` kontrolliert fuer ein natives MySQL-Profil aus - `app:etl:create-datapool-definition <profile> <table> <definition-file> [--drop-existing]` erzeugt einen Datapool aus einer YAML- oder JSON-Blueprint-Datei Beispiele: ```bash php /srv/app/symfony/bin/console app:etl:drop-datapool importEngine temp_articles php /srv/app/symfony/bin/console app:etl:truncate-datapool importEngine temp_articles php /srv/app/symfony/bin/console app:etl:create-datapool-definition importEngine temp_articles /srv/app/docs/examples/datapool-definition.example.yaml --drop-existing ``` Blueprint-Format: - `columns` Pflichtfeld, Mapping aus Spaltenname auf MySQL-Spaltendefinition - `primary_key` optionale Liste von Spalten fuer den Primary Key - `indices` optionale Liste von Indexdefinitionen, einzelne Werte duerfen auch `firma,ordernumber` enthalten - `engine` optional, Standard `INNODB` - `charset` optional, Standard `latin1` - `add_filter_reason` optional, fuegt die Spalte `filter_reason MEDIUMTEXT` hinzu, falls sie noch fehlt Ein lauffaehiges Beispiel liegt unter: - `docs/examples/datapool-definition.example.yaml` Beispiele: ```bash php /srv/app/symfony/bin/console app:etl:list-database-runtime php /srv/app/symfony/bin/console app:etl:test-database-connection domgan php /srv/app/symfony/bin/console app:etl:list-datapools importEngine php /srv/app/symfony/bin/console app:etl:inspect-datapool importEngine articles --with-count --show-create-sql ``` ## 7. Deployment und Betrieb ### 7.1 Compose-Stack starten oder aktualisieren ```bash ssh ortho-live 'cd /opt/containers/drive-dataengine && docker compose -f compose.yaml build dashboard && docker compose -f compose.yaml up -d dashboard' ``` ### 7.2 Stack-Status pruefen ```bash ssh ortho-live 'cd /opt/containers/drive-dataengine && docker compose -f compose.yaml ps' ``` ### 7.3 Oeffentliche Erreichbarkeit pruefen ```bash curl -sS -I https://dataengine.domgan.de ``` ### 7.4 Datenbankschema anwenden Wenn sich `docker/postgres/init/001-rls.sql` geaendert hat und der Container bereits initialisiert wurde: ```bash ssh ortho-live 'cd /opt/containers/drive-dataengine && docker compose -f compose.yaml exec -T postgres psql -U dataengine -d dataengine -f /docker-entrypoint-initdb.d/001-rls.sql' ``` ### 7.5 Repo-Guardrail lokal pruefen Vor Pushes oder Releases kann die Doku-Synchronitaet lokal geprueft werden: ```bash cd /opt/containers/drive-dataengine ./scripts/check-doc-sync.sh HEAD^ HEAD ``` ## 8. Dokumentationsstandard Diese Anleitung ist die operative Fuehrungsdokumentation fuer den aktuellen Stand. Pflicht bei jeder Aenderung: 1. `README.md` aktualisieren, wenn Einstieg oder Architektur betroffen sind. 2. Diese Bedienungsanleitung aktualisieren, wenn Bedienung, Commands, Deployment oder Grenzen betroffen sind. 3. `docs/replatforming-plan.md` aktualisieren, wenn sich Zielbild oder Migrationsgrenze verschiebt. Details stehen in `CONTRIBUTING.md`. ## 9. GitHub und Versionierung Der GitHub-Stand wird ohne produktive Secrets versioniert. Nicht versioniert werden: - `.env` - SSH-Schluessel - Cloud-Service-Account-Dateien - Legacy-Connection-Profile mit Live-Credentials Fuer diese Dateien bleibt der Server die Quelle. Neue Umgebungen muessen die Secrets separat erhalten. Das Repository erzwingt auf GitHub ueber `scripts/check-doc-sync.sh` und `.github/workflows/repository-guardrails.yml`, dass Code- und BetriebsAenderungen nicht ohne aktualisierte Dokumentation gemerged werden. Privates Repository: - `https://github.com/dominikgantenberg/drive-dataengine` ## 10. Bekannte Grenzen - Die fachliche Engine-Ausfuehrung laeuft noch ueber die Legacy-Bridge. - ODBC-Profile sind noch nicht nativ in Symfony nutzbar. - Read-only Datenbank-Probes haengen von der Netzwerkerreichbarkeit des Zielsystems vom Host `ortho-live` ab. - Native Datapool-Write-Operationen decken aktuell nur MySQL und nur die ersten Struktur-Operationen ab. - Der lokale Mount des Projektpfads kann instabil sein; im Stoerungsfall wird ueber `ssh/scp` gearbeitet.