|
@@ -1,8 +1,7 @@
|
|
-import { performance } from "perf_hooks";
|
|
|
|
|
|
+import { promise as ping } from "ping";
|
|
|
|
|
|
import { getServiceItem } from "utils/config/service-helpers";
|
|
import { getServiceItem } from "utils/config/service-helpers";
|
|
import createLogger from "utils/logger";
|
|
import createLogger from "utils/logger";
|
|
-import { httpProxy } from "utils/proxy/http";
|
|
|
|
|
|
|
|
const logger = createLogger("ping");
|
|
const logger = createLogger("ping");
|
|
|
|
|
|
@@ -16,35 +15,28 @@ export default async function handler(req, res) {
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
- const { ping: pingURL } = serviceItem;
|
|
|
|
|
|
+ const { ping: pingHostOrURL } = serviceItem;
|
|
|
|
|
|
- if (!pingURL) {
|
|
|
|
- logger.debug("No ping URL specified");
|
|
|
|
|
|
+ if (!pingHostOrURL) {
|
|
|
|
+ logger.debug("No ping host specified");
|
|
return res.status(400).send({
|
|
return res.status(400).send({
|
|
- error: "No ping URL given",
|
|
|
|
|
|
+ error: "No ping host given",
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ let hostname = pingHostOrURL;
|
|
try {
|
|
try {
|
|
- let startTime = performance.now();
|
|
|
|
- let [status] = await httpProxy(pingURL, {
|
|
|
|
- method: "HEAD",
|
|
|
|
- });
|
|
|
|
- let endTime = performance.now();
|
|
|
|
-
|
|
|
|
- if (status > 403) {
|
|
|
|
- // try one more time as a GET in case HEAD is rejected for whatever reason
|
|
|
|
- startTime = performance.now();
|
|
|
|
- [status] = await httpProxy(pingURL);
|
|
|
|
- endTime = performance.now();
|
|
|
|
- }
|
|
|
|
|
|
+ // maintain backwards compatibility with old ping where may be http://...
|
|
|
|
+ hostname = new URL(pingHostOrURL).hostname;
|
|
|
|
+ } catch (e) {
|
|
|
|
+ // eslint-disable-line no-empty
|
|
|
|
+ }
|
|
|
|
|
|
- return res.status(200).json({
|
|
|
|
- status,
|
|
|
|
- latency: endTime - startTime,
|
|
|
|
- });
|
|
|
|
|
|
+ try {
|
|
|
|
+ const response = await ping.probe(hostname);
|
|
|
|
+ return res.status(200).json(response);
|
|
} catch (e) {
|
|
} catch (e) {
|
|
- logger.debug("Error attempting ping: %s", JSON.stringify(e));
|
|
|
|
|
|
+ logger.debug("Error attempting ping: %s", e);
|
|
return res.status(400).send({
|
|
return res.status(400).send({
|
|
error: "Error attempting ping, see logs.",
|
|
error: "Error attempting ping, see logs.",
|
|
});
|
|
});
|