feat(pingcheck): pings a sever and port to see if its up

This commit is contained in:
2025-12-22 11:34:11 -06:00
parent c8b554eb42
commit dc159e4404

View File

@@ -0,0 +1,83 @@
import dns from "node:dns";
import net from "node:net";
type IP = {
success: boolean;
message: string;
};
export const checkHostnamePort = async (host: string): Promise<boolean> => {
const [hostname, port] = host.split(":");
// a just incase to make sure we have the host name and port
if (!hostname || !port) {
return false;
}
// Resolve the hostname to an IP address
const ip = (await checkHostUp(hostname)) as IP;
if (!ip.success) {
return false;
}
const portNum = parseInt(port, 10);
const hostUp = (await pingHost(hostname, portNum)) as IP;
if (!hostUp.success) {
return false;
}
return true;
};
const pingHost = (host: string, port: number) => {
return new Promise((res) => {
const s = new net.Socket();
s.setTimeout(2000);
s.connect(port, host);
s.on("connect", () => {
s.destroy();
res({
success: true,
message: "Server up",
});
});
s.on("timeout", () => {
s.destroy();
res({
success: true,
message: "Server Offline or unreachable, please check connection",
});
});
s.on("error", (e) => {
s.destroy();
return res({
success: false,
message: "Encountered error while checking if host:port up",
error: e,
});
});
});
};
const checkHostUp = (host: string) => {
return new Promise((res) => {
dns.lookup(host, (err, address) => {
if (err) {
return res({
success: false,
message: "Error connecting to the server",
error: err,
});
} else {
res({ success: true, message: "Server Ip", data: address });
}
});
});
};
//checkHostnamePort("usmcd1vms036:1433");