diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-14 04:10:38 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-14 04:10:43 +0300 |
| commit | 9e4fdd6102e6f68e42fbe419d447b758c161f0db (patch) | |
| tree | 66df19412e2fcd152611ffcd6543ddf5db09df58 /src/integration/assets/omp | |
| parent | ca7ae086e8d6e80f6efc969d541b390328a6d143 (diff) | |
fix: retry dropped omp lifecycle reports
refs #1310
Diffstat (limited to 'src/integration/assets/omp')
| -rw-r--r-- | src/integration/assets/omp/herdr-agent-state.ts | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/integration/assets/omp/herdr-agent-state.ts b/src/integration/assets/omp/herdr-agent-state.ts index 1b760a90..9bb6671a 100644 --- a/src/integration/assets/omp/herdr-agent-state.ts +++ b/src/integration/assets/omp/herdr-agent-state.ts @@ -2,7 +2,7 @@ // managed by herdr; reinstalling or updating the integration overwrites this file. // add custom hooks/plugins beside this file instead of editing it. // HERDR_INTEGRATION_ID=omp -// HERDR_INTEGRATION_VERSION=4 +// HERDR_INTEGRATION_VERSION=5 // @ts-nocheck import { createConnection } from "node:net"; @@ -18,30 +18,41 @@ function enabled() { let requestQueue = Promise.resolve(); -function sendRequestNow(request: unknown): Promise<void> { +function sendRequestAttempt(request: unknown, timeoutMs: number): Promise<boolean> { if (!enabled()) { - return Promise.resolve(); + return Promise.resolve(true); } return new Promise((resolve) => { let done = false; - const finish = () => { + let timeout: ReturnType<typeof setTimeout> | undefined; + const finish = (delivered: boolean) => { if (done) return; done = true; + if (timeout) { + clearTimeout(timeout); + } socket.destroy(); - resolve(); + resolve(delivered); }; const socket = createConnection(socketPath!); - socket.on("error", finish); + socket.on("error", () => finish(false)); socket.on("connect", () => socket.write(`${JSON.stringify(request)}\n`)); - socket.on("data", finish); - socket.on("end", finish); - const timeout = setTimeout(finish, 500); + socket.on("data", () => finish(true)); + socket.on("end", () => finish(false)); + timeout = setTimeout(() => finish(false), timeoutMs); timeout.unref?.(); }); } +async function sendRequestNow(request: unknown): Promise<void> { + if (await sendRequestAttempt(request, 500)) { + return; + } + await sendRequestAttempt(request, 1500); +} + function sendRequest(request: unknown): Promise<void> { requestQueue = requestQueue.then( () => sendRequestNow(request), |
