diff --git a/IT_Abteilung/Automatisierung/Channable_stack.md b/IT_Abteilung/Automatisierung/Channable_stack.md index 5ec290a..87634ca 100644 --- a/IT_Abteilung/Automatisierung/Channable_stack.md +++ b/IT_Abteilung/Automatisierung/Channable_stack.md @@ -2,7 +2,7 @@ title: Channable Stack LT24 Profice Dokumentation description: published: true -date: 2026-03-06T11:09:09.239Z +date: 2026-03-06T11:13:13.929Z tags: editor: markdown dateCreated: 2026-03-06T11:09:09.239Z @@ -49,48 +49,38 @@ Die Pipeline ersetzt den kommerziellen SaaS-Dienst **Channable** durch eine voll ```mermaid graph TB - subgraph SERVER["๐Ÿ–ฅ๏ธ DEBIAN SERVER โ€” Docker-Host"] - direction TB - - subgraph N8N["โš™๏ธ n8n โ€” Docker Container"] - CRON["โฐ Cron-Trigger
tรคglich 00:00 Uhr"] - ERR_HANDLER["๐Ÿ”” Error-Handler
E-Mail / Slack Alert"] - end - - subgraph PYTHON["๐Ÿ PYTHON 3.11+ โ€” Virtual Environment"] - direction LR - - subgraph EXTRACT["๐Ÿ“ฅ EXTRACT"] - JTL["๐Ÿ“„ JTL-WAWI
CSV-Export"] - GAPI["โ˜๏ธ Google Ads/GA
API โ€” 90 Tage"] - end - - subgraph TRANSFORM["๐Ÿ”„ TRANSFORM"] - DUCKDB_JOIN["๐Ÿฆ† DuckDB
LEFT JOIN
Produkte โŸ• Sales"] - POLARS["โšก Polars
Regel-Engine
rules.yaml"] - end - - subgraph LOAD["๐Ÿ“ค LOAD"] - GCONTENT["๐Ÿ›’ Google
Content API
Batch-Upload
mit Rate-Limiting
"] - end - end - - DUCKDB_FILE[("๐Ÿ’พ DuckDB
products.duckdb")] - LOGS["๐Ÿ“‹ Logs & Monitoring
/opt/etl-pipeline/logs/"] + subgraph N8N [n8n - Docker Container] + CRON[Cron-Trigger - 00:00 Uhr] + ERR_HANDLER[Error-Handler - E-Mail / Slack] end - CRON -->|"startet Pipeline"| JTL - CRON -->|"startet Pipeline"| GAPI - JTL -->|"CSV Import"| DUCKDB_JOIN - GAPI -->|"Sales-Daten"| DUCKDB_JOIN - DUCKDB_JOIN -->|"DataFrame"| POLARS - POLARS -->|"transformierte Daten"| GCONTENT - DUCKDB_JOIN -.->|"persistiert"| DUCKDB_FILE - ERR_HANDLER -.->|"bei Exit-Code 1"| LOGS + subgraph EXTRACT [EXTRACT - Datenquellen] + JTL[JTL-WAWI CSV-Export] + GAPI[Google Ads/GA API - 90 Tage] + end + + subgraph TRANSFORM [TRANSFORM - Verarbeitung] + DUCKDB_JOIN[DuckDB - LEFT JOIN] + POLARS[Polars Regel-Engine - rules.yaml] + end + + subgraph LOAD [LOAD - Upload] + GCONTENT[Google Content API - Batch-Upload] + end + + DUCKDB_FILE[(DuckDB - products.duckdb)] + LOGS[Logs und Monitoring] + + CRON -->|startet| JTL + CRON -->|startet| GAPI + JTL -->|CSV Import| DUCKDB_JOIN + GAPI -->|Sales-Daten| DUCKDB_JOIN + DUCKDB_JOIN -->|DataFrame| POLARS + POLARS -->|transformierte Daten| GCONTENT + DUCKDB_JOIN -.->|persistiert| DUCKDB_FILE + ERR_HANDLER -.->|bei Fehler| LOGS - style SERVER fill:#1a1a2e,stroke:#16213e,color:#e0e0e0 style N8N fill:#2d3436,stroke:#636e72,color:#dfe6e9 - style PYTHON fill:#2d3436,stroke:#636e72,color:#dfe6e9 style EXTRACT fill:#0a3d62,stroke:#3c6382,color:#dfe6e9 style TRANSFORM fill:#1e3799,stroke:#4a69bd,color:#dfe6e9 style LOAD fill:#6a0572,stroke:#a834a8,color:#dfe6e9 @@ -108,11 +98,11 @@ graph TB ### ETL-Datenfluss (vereinfacht) ```mermaid -flowchart LR - A["๐Ÿ“„ JTL CSV
200k+ Artikel"] --> C["๐Ÿฆ† DuckDB
LEFT JOIN"] - B["โ˜๏ธ Google API
Sales 90 Tage"] --> C - C --> D["โšก Polars
rules.yaml
Custom Labels
Titel-Optimierung
Preis-Logik
Ausschlรผsse
"] - D --> E["๐Ÿ›’ Google Content API
Batch-Upload
Rate-Limiting"] +graph LR + A[JTL CSV - 200k+ Artikel] --> C[DuckDB - LEFT JOIN] + B[Google API - Sales 90 Tage] --> C + C --> D[Polars - rules.yaml] + D --> E[Google Content API - Batch-Upload] style A fill:#079992,stroke:#38ada9,color:#fff style B fill:#079992,stroke:#38ada9,color:#fff @@ -2386,17 +2376,17 @@ Die Kommunikation zwischen n8n (Docker-Container) und der Python-Pipeline auf de ## 7.2 Workflow-Architektur ```mermaid -flowchart TD - CRON["โฐ Cron Trigger
tรคglich 00:00 Uhr"] - EXEC["โšก Execute Command
/opt/etl-pipeline/venv/bin/python
-m scripts.main
"] - CHECK{"๐Ÿ” Exit-Code
prรผfen
"} - SUCCESS["โœ… Erfolgs-Meldung
Log + optionale E-Mail"] - ERROR["โŒ Fehler-Alarm
E-Mail / Slack
Benachrichtigung
"] +graph TD + CRON[Cron Trigger - 00:00 Uhr] + EXEC[Execute Command - python -m scripts.main] + CHECK{Exit-Code pruefen} + SUCCESS[Erfolgs-Meldung - Log + E-Mail] + ERROR[Fehler-Alarm - E-Mail / Slack] CRON --> EXEC EXEC --> CHECK - CHECK -->|"Exit = 0 โ€” OK"| SUCCESS - CHECK -->|"Exit = 1 โ€” Fehler"| ERROR + CHECK -->|Exit 0 - OK| SUCCESS + CHECK -->|Exit 1 - Fehler| ERROR style CRON fill:#e58e26,stroke:#fa983a,color:#fff style EXEC fill:#0c2461,stroke:#1e3799,color:#fff