Skip to content

Pipeline Issues — 2026-03-17

import { Aside, Badge } from ‘@astrojs/starlight/components’;

#ProbleemErnstStatusImpact
1Pipeline stap 2/3/4 scripts niet gevonden🔴 KritiekOpgelostWas: 0 producten gesynchroniseerd
2XD Connect: Excel seriedatums in stock🟠 HoogOpgelostWas: 1.263 stock-records falen per run
3NewWave: varchar(255) overflow🟡 MediumOpgelostWas: 6 producten mislukken per run
4PF Concept: SVG downloads — 0 bestanden🟡 MediumOpgelostWas: 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 ”

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/server
PIM_SCRIPT_DIR=/app

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 ”

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.

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 ”

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 ”

De pfconcept_imagedata_2d connector meldde: Downloaded 0 SVG files for 8 models. De connector rapporteerde success: true maar downloadde niets.

De 2D changelog-URL’s zijn gestructureerd als:

/2d/logs/aggregate/YYYY/MM/DD/all_imprints.log

De 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.log
const 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_by kolom in de runs tabel (paars badge = handmatig, grijs = cron)