From 1405acc4f675853e01db5956c23e764ad8885832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Wed, 24 Jul 2024 22:45:31 +0200 Subject: [PATCH] add retry logic for send batch event --- packages/cli/src/importer/importer.ts | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/importer/importer.ts b/packages/cli/src/importer/importer.ts index b8362965..ae3c150b 100644 --- a/packages/cli/src/importer/importer.ts +++ b/packages/cli/src/importer/importer.ts @@ -1,5 +1,7 @@ import { randomUUID } from 'crypto'; import fs from 'fs'; +import os from 'os'; +import path from 'path'; import readline from 'readline'; import zlib from 'zlib'; import Progress from 'progress'; @@ -323,7 +325,7 @@ async function sendBatchToAPI( clientSecret: string; } ) { - try { + async function request() { const res = await fetch(`${apiUrl}/import/events`, { method: 'POST', headers: { @@ -335,13 +337,28 @@ async function sendBatchToAPI( body: zlib.gzipSync(JSON.stringify(batch)), }); if (!res.ok) { - console.log('Failed to send batch to API'); - console.log(await res.text()); + throw new Error(`Failed to send batch: ${await res.text()}`); } await new Promise((resolve) => setTimeout(resolve, SLEEP_TIME)); + } + + try { + await request(); } catch (e) { - console.log('sendBatchToAPI failed'); - throw e; + console.log('Error sending batch, retrying...'); + await new Promise((resolve) => setTimeout(resolve, 1000)); + try { + await request(); + } catch (e) { + console.log('Error sending batch, skipping...'); + fs.writeFileSync( + path.join( + os.tmpdir(), + `openpanel/failed-import-batch-${batch[0]?.created_at ? new Date(batch[0]?.created_at).toISOString() : Date.now()}.json` + ), + JSON.stringify(batch, null, 2) + ); + } } }