Pipeline
I 5 step della pipeline FireFeed e come funziona l'aggregazione per N source parallele.
Ogni esecuzione di un progetto attraversa 5 step sequenziali:
FETCH → PARSE → MERGE → RULES → EXPORTStep
1. FETCH
Scarica i dati grezzi da ogni source configurata (CSV via SFTP, JSON via HTTPS, XML via FTP, Amazon SP-API, …). I download girano in parallelo tra source diverse.
2. PARSE
Decodifica i byte scaricati nel formato dichiarato (CSV con separatore custom, JSON con jq-like extraction, XML con XPath) e mappa le colonne sui campi del progetto secondo la mapping configurata in UI.
3. MERGE
Se sono attive più source che alimentano lo stesso progetto, ognuna popola solo i campi che mappa. Lo step MERGE le unisce per merge_key (di default id): un prodotto viene aggiornato in-place se esiste, altrimenti viene inserito. Source diverse che toccano lo stesso prodotto compongono il record finale.
4. RULES
Per ogni export attivo vengono applicate le sue regole
(filter/transform/exclude) in una tabella temporanea isolata rules_tmp_*. Le regole sono
JSONLogic, generate dal query builder UI. Una regola in un export non altera i dati
visibili agli altri export.
5. EXPORT
Ogni export prende il suo set filtrato e produce l'artefatto: file scaricabile (link /api/feeds/[token]), push verso FTP/SFTP/HTTP, chiamata API marketplace. Anche qui gli export girano in parallelo.
Esecuzione
L'esecuzione è orchestrata via BullMQ sul worker Fastify. Ogni step pubblica eventi progress su Redis pubsub, e il web app espone uno stream SSE su /api/projects/[id]/pipeline/events che la dashboard consuma in tempo reale.
Aggregazione N source parallele
Quando girano N import o N export in parallelo, la timeline UI mostra una barra aggregata stabile (media monotona delle source) + un accordion "Per import: …" sotto che mostra le singole righe di progress per source. Lo step è considerato completed solo quando tutte le source attese hanno raggiunto il 100%.
Dettagli implementativi: packages/web/hooks/use-pipeline-sse.ts, packages/web/components/pipeline-monitor.tsx.