mirror of
https://github.com/gethomepage/homepage.git
synced 2025-12-07 09:35:54 -08:00
Feature: true ping, rename old ping to siteMonitor (#2215)
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
import { performance } from "perf_hooks";
|
||||
import { promise as ping } from "ping";
|
||||
|
||||
import { getServiceItem } from "utils/config/service-helpers";
|
||||
import createLogger from "utils/logger";
|
||||
import { httpProxy } from "utils/proxy/http";
|
||||
|
||||
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({
|
||||
error: "No ping URL given",
|
||||
error: "No ping host given",
|
||||
});
|
||||
}
|
||||
|
||||
let hostname = pingHostOrURL;
|
||||
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();
|
||||
}
|
||||
|
||||
return res.status(200).json({
|
||||
status,
|
||||
latency: endTime - startTime,
|
||||
});
|
||||
// maintain backwards compatibility with old ping where may be http://...
|
||||
hostname = new URL(pingHostOrURL).hostname;
|
||||
} catch (e) {
|
||||
logger.debug("Error attempting ping: %s", JSON.stringify(e));
|
||||
// eslint-disable-line no-empty
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await ping.probe(hostname);
|
||||
return res.status(200).json(response);
|
||||
} catch (e) {
|
||||
logger.debug("Error attempting ping: %s", e);
|
||||
return res.status(400).send({
|
||||
error: "Error attempting ping, see logs.",
|
||||
});
|
||||
|
||||
52
src/pages/api/siteMonitor.js
Normal file
52
src/pages/api/siteMonitor.js
Normal file
@@ -0,0 +1,52 @@
|
||||
import { performance } from "perf_hooks";
|
||||
|
||||
import { getServiceItem } from "utils/config/service-helpers";
|
||||
import createLogger from "utils/logger";
|
||||
import { httpProxy } from "utils/proxy/http";
|
||||
|
||||
const logger = createLogger("siteMonitor");
|
||||
|
||||
export default async function handler(req, res) {
|
||||
const { group, service } = req.query;
|
||||
const serviceItem = await getServiceItem(group, service);
|
||||
if (!serviceItem) {
|
||||
logger.debug(`No service item found for group ${group} named ${service}`);
|
||||
return res.status(400).send({
|
||||
error: "Unable to find service, see log for details.",
|
||||
});
|
||||
}
|
||||
|
||||
const { siteMonitor: monitorURL } = serviceItem;
|
||||
|
||||
if (!monitorURL) {
|
||||
logger.debug("No http monitor URL specified");
|
||||
return res.status(400).send({
|
||||
error: "No http monitor URL given",
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
let startTime = performance.now();
|
||||
let [status] = await httpProxy(monitorURL, {
|
||||
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(monitorURL);
|
||||
endTime = performance.now();
|
||||
}
|
||||
|
||||
return res.status(200).json({
|
||||
status,
|
||||
latency: endTime - startTime,
|
||||
});
|
||||
} catch (e) {
|
||||
logger.debug("Error attempting http monitor: %s", e);
|
||||
return res.status(400).send({
|
||||
error: "Error attempting http monitor, see logs.",
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user