Pipeline Issues — 2026-03-17
import { Aside, Badge } from ‘@astrojs/starlight/components’;
Status overzicht
Section titled “Status overzicht”| # | Probleem | Ernst | Status | Impact |
|---|---|---|---|---|
| 1 | Pipeline stap 2/3/4 scripts niet gevonden | 🔴 Kritiek | ✅ Opgelost | Was: 0 producten gesynchroniseerd |
| 2 | XD Connect: Excel seriedatums in stock | 🟠 Hoog | ✅ Opgelost | Was: 1.263 stock-records falen per run |
| 3 | NewWave: varchar(255) overflow | 🟡 Medium | ✅ Opgelost | Was: 6 producten mislukken per run |
| 4 | PF Concept: SVG downloads — 0 bestanden | 🟡 Medium | ✅ Opgelost | Was: geen SVGs gedownload voor 8 modellen |
Laatste succesvolle run (run #11, 2026-03-17): 7/7 tenants OK. Na de fixes verwachten we 0 connector errors op de volgende nightly run.
Probleem 1 — Pipeline stap 2/3/4 scripts niet gevonden
Section titled “Probleem 1 — Pipeline stap 2/3/4 scripts niet gevonden ”Wat was er mis?
Section titled “Wat was er mis?”De scripts bulk_medusa_import.js, sync_categories.js en category_link.js stonden in de backend root (/app/) maar PIM_SCRIPT_DIR in docker-compose.yml wees naar /app/.medusa/server — de build output map — waar ze niet bestaan.
docker-compose.yml aangepast:
PIM_SCRIPT_DIR=/app/.medusa/serverPIM_SCRIPT_DIR=/appResultaat
Section titled “Resultaat”Run #11: devImport: ok, devCategoryLink: ok, 7/7 tenants OK. Stappen 2/3/4 draaien nu correct.
Probleem 2 — XD Connect: Excel seriedatums in stock data
Section titled “Probleem 2 — XD Connect: Excel seriedatums in stock data ”Wat was er mis?
Section titled “Wat was er mis?”De XD Connect stock connector importeerde expected_date velden als ruwe Excel seriedatums (integers, bijv. 46487) in plaats van echte datums. PostgreSQL weigerde dit:
invalid input syntax for type date: "46487"Elke run: 1.263 records faalden. Run #11 bevestigde: xdconnect_stock — Updated: 4818, Errors: 1263.
Oorzaak
Section titled “Oorzaak”Excel slaat datums op als aantal dagen sinds 1 januari 1900. Node.js xlsx leest dit als integer. De connector converteerde niet voor het wegschrijven.
In xdconnect.ts een parseExcelDate() hulpfunctie toegevoegd en toegepast op expected_delivery_date:
function parseExcelDate(val: unknown): string | undefined { if (!val) return undefined; const n = Number(val); if (isNaN(n) || n < 1) return undefined; return new Date((n - 25569) * 86400 * 1000).toISOString().split('T')[0];}// In mapStockData:expected_delivery_date: parseExcelDate(xdData['FutureIncomingStockDate1']),Bestand: /mnt/data/magic_pim/backend/src/modules/connectors/suppliers/xdconnect.ts
Probleem 3 — NewWave: varchar(255) overflow
Section titled “Probleem 3 — NewWave: varchar(255) overflow ”Wat was er mis?
Section titled “Wat was er mis?”Bij newwave_products faalden elke run 6 records. Oorzaak: het name veld (VARCHAR 255) werd overschreven door name_nl (VARCHAR 500) dat langer kan zijn dan 255 tekens. PostgreSQL weigerde de insert.
In newwave.ts de waarde afkappen vóór het wegschrijven:
if (!product.name && product.name_nl) { product.name = product.name_nl.substring(0, 255);}Bestand: /mnt/data/magic_pim/backend/src/modules/connectors/suppliers/newwave.ts
Probleem 4 — PF Concept: SVG downloads — 0 bestanden
Section titled “Probleem 4 — PF Concept: SVG downloads — 0 bestanden ”Wat was er mis?
Section titled “Wat was er mis?”De pfconcept_imagedata_2d connector meldde: Downloaded 0 SVG files for 8 models. De connector rapporteerde success: true maar downloadde niets.
Oorzaak
Section titled “Oorzaak”De 2D changelog-URL’s zijn gestructureerd als:
/2d/logs/aggregate/YYYY/MM/DD/all_imprints.logDe connector keek naar het maand-niveau en zocht daar direct naar .log bestanden — maar die zitten één niveau dieper in dag-submappen. Hierdoor werden geen changed models gevonden en was er niets om te downloaden.
De authenticatie (£ in wachtwoord) was geen probleem — execFileSync met array-argumenten verwerkt dit correct.
In pfconcept-imagedata.ts de getChangedModels('2d') functie aangepast om eerst in dag-subdirectories te navigeren:
// 2D changelogs zitten per dag: /2d/logs/aggregate/YYYY/MM/DD/all_imprints.logconst monthUrl = `${BASE_URL}/2d/logs/aggregate/${year}/${month}/`;const monthHtml = curlFetch(monthUrl);const dayDirs = parseDirectoryListing(monthHtml) .filter(d => /^\d+\/$/.test(d)) .sort();const latestDay = dayDirs.pop();logUrl = `${monthUrl}${latestDay}`;Bestand: /mnt/data/magic_pim/backend/src/modules/connectors/suppliers/pfconcept-imagedata.ts
Bonus — “Run Pipeline” knop toegevoegd
Section titled “Bonus — “Run Pipeline” knop toegevoegd”Naast de bugfixes is ook een “Run volledige pipeline” knop toegevoegd aan de pipeline-check admin pagina (/app/pipeline-check):
- Start de volledige 4-staps pipeline handmatig (zonder te wachten op de cron)
- Real-time logging met 2-seconden polling
- Auto-scroll naar het einde van het log
- Huidige stap wordt getoond als blauwe banner
triggered_bykolom in de runs tabel (paars badge = handmatig, grijs = cron)