docs: update IT_Abteilung/Automatisierung/Channable_stack
This commit is contained in:
@@ -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<br/><i>täglich 00:00 Uhr</i>"]
|
||||
ERR_HANDLER["🔔 Error-Handler<br/><i>E-Mail / Slack Alert</i>"]
|
||||
subgraph N8N [n8n - Docker Container]
|
||||
CRON[Cron-Trigger - 00:00 Uhr]
|
||||
ERR_HANDLER[Error-Handler - E-Mail / Slack]
|
||||
end
|
||||
|
||||
subgraph PYTHON["🐍 PYTHON 3.11+ — Virtual Environment"]
|
||||
direction LR
|
||||
|
||||
subgraph EXTRACT["📥 EXTRACT"]
|
||||
JTL["📄 JTL-WAWI<br/>CSV-Export"]
|
||||
GAPI["☁️ Google Ads/GA<br/>API — 90 Tage"]
|
||||
subgraph EXTRACT [EXTRACT - Datenquellen]
|
||||
JTL[JTL-WAWI CSV-Export]
|
||||
GAPI[Google Ads/GA API - 90 Tage]
|
||||
end
|
||||
|
||||
subgraph TRANSFORM["🔄 TRANSFORM"]
|
||||
DUCKDB_JOIN["🦆 DuckDB<br/>LEFT JOIN<br/><i>Produkte ⟕ Sales</i>"]
|
||||
POLARS["⚡ Polars<br/>Regel-Engine<br/><i>rules.yaml</i>"]
|
||||
subgraph TRANSFORM [TRANSFORM - Verarbeitung]
|
||||
DUCKDB_JOIN[DuckDB - LEFT JOIN]
|
||||
POLARS[Polars Regel-Engine - rules.yaml]
|
||||
end
|
||||
|
||||
subgraph LOAD["📤 LOAD"]
|
||||
GCONTENT["🛒 Google<br/>Content API<br/><i>Batch-Upload<br/>mit Rate-Limiting</i>"]
|
||||
end
|
||||
subgraph LOAD [LOAD - Upload]
|
||||
GCONTENT[Google Content API - Batch-Upload]
|
||||
end
|
||||
|
||||
DUCKDB_FILE[("💾 DuckDB<br/><i>products.duckdb</i>")]
|
||||
LOGS["📋 Logs & Monitoring<br/><i>/opt/etl-pipeline/logs/</i>"]
|
||||
end
|
||||
DUCKDB_FILE[(DuckDB - products.duckdb)]
|
||||
LOGS[Logs und Monitoring]
|
||||
|
||||
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
|
||||
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<br/><i>200k+ Artikel</i>"] --> C["🦆 DuckDB<br/><b>LEFT JOIN</b>"]
|
||||
B["☁️ Google API<br/><i>Sales 90 Tage</i>"] --> C
|
||||
C --> D["⚡ Polars<br/><b>rules.yaml</b><br/><i>Custom Labels<br/>Titel-Optimierung<br/>Preis-Logik<br/>Ausschlüsse</i>"]
|
||||
D --> E["🛒 Google Content API<br/><b>Batch-Upload</b><br/><i>Rate-Limiting</i>"]
|
||||
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["⏰ <b>Cron Trigger</b><br/><i>täglich 00:00 Uhr</i>"]
|
||||
EXEC["⚡ <b>Execute Command</b><br/><code>/opt/etl-pipeline/venv/bin/python<br/>-m scripts.main</code>"]
|
||||
CHECK{"🔍 <b>Exit-Code<br/>prüfen</b>"}
|
||||
SUCCESS["✅ <b>Erfolgs-Meldung</b><br/><i>Log + optionale E-Mail</i>"]
|
||||
ERROR["❌ <b>Fehler-Alarm</b><br/><i>E-Mail / Slack<br/>Benachrichtigung</i>"]
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user