aboutsummaryrefslogtreecommitdiff
path: root/src/integration/assets/omp
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-14 04:10:38 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-14 04:10:43 +0300
commit9e4fdd6102e6f68e42fbe419d447b758c161f0db (patch)
tree66df19412e2fcd152611ffcd6543ddf5db09df58 /src/integration/assets/omp
parentca7ae086e8d6e80f6efc969d541b390328a6d143 (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.ts29
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),