docs: update IT_Abteilung/Automatisierung/Channable_stack

This commit is contained in:
2026-03-06 11:13:15 +00:00
committed by Jane Doe
parent 0e3b3b0203
commit b877e2a859

View File

@@ -2,7 +2,7 @@
title: Channable Stack LT24 Profice Dokumentation title: Channable Stack LT24 Profice Dokumentation
description: description:
published: true published: true
date: 2026-03-06T11:09:09.239Z date: 2026-03-06T11:13:13.929Z
tags: tags:
editor: markdown editor: markdown
dateCreated: 2026-03-06T11:09:09.239Z dateCreated: 2026-03-06T11:09:09.239Z
@@ -49,48 +49,38 @@ Die Pipeline ersetzt den kommerziellen SaaS-Dienst **Channable** durch eine voll
```mermaid ```mermaid
graph TB graph TB
subgraph SERVER["🖥️ DEBIAN SERVER — Docker-Host"] subgraph N8N [n8n - Docker Container]
direction TB CRON[Cron-Trigger - 00:00 Uhr]
ERR_HANDLER[Error-Handler - E-Mail / Slack]
subgraph N8N["⚙️ n8n — Docker Container"]
CRON["⏰ Cron-Trigger<br/><i>täglich 00:00 Uhr</i>"]
ERR_HANDLER["🔔 Error-Handler<br/><i>E-Mail / Slack Alert</i>"]
end end
subgraph PYTHON["🐍 PYTHON 3.11+ — Virtual Environment"] subgraph EXTRACT [EXTRACT - Datenquellen]
direction LR JTL[JTL-WAWI CSV-Export]
GAPI[Google Ads/GA API - 90 Tage]
subgraph EXTRACT["📥 EXTRACT"]
JTL["📄 JTL-WAWI<br/>CSV-Export"]
GAPI["☁️ Google Ads/GA<br/>API — 90 Tage"]
end end
subgraph TRANSFORM["🔄 TRANSFORM"] subgraph TRANSFORM [TRANSFORM - Verarbeitung]
DUCKDB_JOIN["🦆 DuckDB<br/>LEFT JOIN<br/><i>Produkte ⟕ Sales</i>"] DUCKDB_JOIN[DuckDB - LEFT JOIN]
POLARS["⚡ Polars<br/>Regel-Engine<br/><i>rules.yaml</i>"] POLARS[Polars Regel-Engine - rules.yaml]
end end
subgraph LOAD["📤 LOAD"] subgraph LOAD [LOAD - Upload]
GCONTENT["🛒 Google<br/>Content API<br/><i>Batch-Upload<br/>mit Rate-Limiting</i>"] GCONTENT[Google Content API - Batch-Upload]
end
end end
DUCKDB_FILE[("💾 DuckDB<br/><i>products.duckdb</i>")] DUCKDB_FILE[(DuckDB - products.duckdb)]
LOGS["📋 Logs & Monitoring<br/><i>/opt/etl-pipeline/logs/</i>"] LOGS[Logs und Monitoring]
end
CRON -->|"startet Pipeline"| JTL CRON -->|startet| JTL
CRON -->|"startet Pipeline"| GAPI CRON -->|startet| GAPI
JTL -->|"CSV Import"| DUCKDB_JOIN JTL -->|CSV Import| DUCKDB_JOIN
GAPI -->|"Sales-Daten"| DUCKDB_JOIN GAPI -->|Sales-Daten| DUCKDB_JOIN
DUCKDB_JOIN -->|"DataFrame"| POLARS DUCKDB_JOIN -->|DataFrame| POLARS
POLARS -->|"transformierte Daten"| GCONTENT POLARS -->|transformierte Daten| GCONTENT
DUCKDB_JOIN -.->|"persistiert"| DUCKDB_FILE DUCKDB_JOIN -.->|persistiert| DUCKDB_FILE
ERR_HANDLER -.->|"bei Exit-Code 1"| LOGS ERR_HANDLER -.->|bei Fehler| LOGS
style SERVER fill:#1a1a2e,stroke:#16213e,color:#e0e0e0
style N8N fill:#2d3436,stroke:#636e72,color:#dfe6e9 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 EXTRACT fill:#0a3d62,stroke:#3c6382,color:#dfe6e9
style TRANSFORM fill:#1e3799,stroke:#4a69bd,color:#dfe6e9 style TRANSFORM fill:#1e3799,stroke:#4a69bd,color:#dfe6e9
style LOAD fill:#6a0572,stroke:#a834a8,color:#dfe6e9 style LOAD fill:#6a0572,stroke:#a834a8,color:#dfe6e9
@@ -108,11 +98,11 @@ graph TB
### ETL-Datenfluss (vereinfacht) ### ETL-Datenfluss (vereinfacht)
```mermaid ```mermaid
flowchart LR graph LR
A["📄 JTL CSV<br/><i>200k+ Artikel</i>"] --> C["🦆 DuckDB<br/><b>LEFT JOIN</b>"] A[JTL CSV - 200k+ Artikel] --> C[DuckDB - LEFT JOIN]
B["☁️ Google API<br/><i>Sales 90 Tage</i>"] --> C B[Google API - Sales 90 Tage] --> C
C --> D["⚡ Polars<br/><b>rules.yaml</b><br/><i>Custom Labels<br/>Titel-Optimierung<br/>Preis-Logik<br/>Ausschlüsse</i>"] C --> D[Polars - rules.yaml]
D --> E["🛒 Google Content API<br/><b>Batch-Upload</b><br/><i>Rate-Limiting</i>"] D --> E[Google Content API - Batch-Upload]
style A fill:#079992,stroke:#38ada9,color:#fff style A fill:#079992,stroke:#38ada9,color:#fff
style B 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 ## 7.2 Workflow-Architektur
```mermaid ```mermaid
flowchart TD graph TD
CRON["⏰ <b>Cron Trigger</b><br/><i>täglich 00:00 Uhr</i>"] CRON[Cron Trigger - 00:00 Uhr]
EXEC["⚡ <b>Execute Command</b><br/><code>/opt/etl-pipeline/venv/bin/python<br/>-m scripts.main</code>"] EXEC[Execute Command - python -m scripts.main]
CHECK{"🔍 <b>Exit-Code<br/>prüfen</b>"} CHECK{Exit-Code pruefen}
SUCCESS["✅ <b>Erfolgs-Meldung</b><br/><i>Log + optionale E-Mail</i>"] SUCCESS[Erfolgs-Meldung - Log + E-Mail]
ERROR["❌ <b>Fehler-Alarm</b><br/><i>E-Mail / Slack<br/>Benachrichtigung</i>"] ERROR[Fehler-Alarm - E-Mail / Slack]
CRON --> EXEC CRON --> EXEC
EXEC --> CHECK EXEC --> CHECK
CHECK -->|"Exit = 0 OK"| SUCCESS CHECK -->|Exit 0 - OK| SUCCESS
CHECK -->|"Exit = 1 Fehler"| ERROR CHECK -->|Exit 1 - Fehler| ERROR
style CRON fill:#e58e26,stroke:#fa983a,color:#fff style CRON fill:#e58e26,stroke:#fa983a,color:#fff
style EXEC fill:#0c2461,stroke:#1e3799,color:#fff style EXEC fill:#0c2461,stroke:#1e3799,color:#fff