35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { fetch } from "undici";
|
|
|
|
import { extractErrorMessage } from "@homarr/common";
|
|
import { UndiciHttpAgent } from "@homarr/core/infrastructure/http";
|
|
import { withTimeoutAsync } from "@homarr/core/infrastructure/http/timeout";
|
|
import { createLogger } from "@homarr/core/infrastructure/logs";
|
|
import { ErrorWithMetadata } from "@homarr/core/infrastructure/logs/error";
|
|
|
|
const logger = createLogger({ module: "ping" });
|
|
|
|
export const sendPingRequestAsync = async (url: string) => {
|
|
try {
|
|
const start = performance.now();
|
|
return await withTimeoutAsync(async (signal) => {
|
|
return await fetch(url, {
|
|
dispatcher: new UndiciHttpAgent({
|
|
connect: {
|
|
rejectUnauthorized: false, // Ping should always work, even with untrusted certificates
|
|
},
|
|
}),
|
|
signal,
|
|
});
|
|
}).then((response) => {
|
|
const end = performance.now();
|
|
const durationMs = end - start;
|
|
return { statusCode: response.status, durationMs };
|
|
});
|
|
} catch (error) {
|
|
logger.error(new ErrorWithMetadata("Failed to send ping request", { url }, { cause: error }));
|
|
return {
|
|
error: extractErrorMessage(error),
|
|
};
|
|
}
|
|
};
|