add statuspage support :3

This commit is contained in:
Ashley 2023-06-30 11:17:52 +00:00
parent 06cfad8fa3
commit 6b50d4e577

View file

@ -18,6 +18,9 @@ const {
getRandomArbitrary, getRandomArbitrary,
} = require("../ptutils/libpt-coreutils.js"); } = require("../ptutils/libpt-coreutils.js");
var http = require("https");
var ping = require("ping");
const sha384 = modules.hash; const sha384 = modules.hash;
function getJson(str) { function getJson(str) {
@ -62,10 +65,82 @@ module.exports = function (app, config, renderTemplate) {
}); });
}); });
app.get("/:v*?", async function (req, res) { app.get("/:v*?", async function (req, res) {
const uaos = req.useragent.os; const uaos = req.useragent.os;
const browser = req.useragent.browser; const browser = req.useragent.browser;
const isOldWindows = (uaos === "Windows 7" || uaos === "Windows 8") && browser === "Firefox"; const isOldWindows =
(uaos === "Windows 7" || uaos === "Windows 8") && browser === "Firefox";
if (process.env.STATUSPAGE_API) {
// The following 4 are the actual values that pertain to your account and this specific metric.
var apiKey = process.env.STATUSPAGE_API;
var pageId = process.env.STATUSPAGE_PAGEID;
var metricId = process.env.STATUSPAGE_METRICID;
var apiBase = "https://api.statuspage.io/v1";
var url =
apiBase + "/pages/" + pageId + "/metrics/" + metricId + "/data.json";
var authHeader = { Authorization: "OAuth " + apiKey };
var options = { method: "POST", headers: authHeader };
var totalPoints = (60 / 5) * 24;
var epochInSeconds = Math.floor(new Date() / 1000);
var count = 0 + 1;
if (count > totalPoints) return;
var currentTimestamp = epochInSeconds - (count - 1) * 5 * 60;
// Measure server ping here
var host = "poketube.fun"; // Replace with the server you want to ping
ping.promise
.probe(host)
.then((result) => {
var ping = result.time !== "unknown" ? parseInt(result.time) : -1;
ping = Math.min(Math.max(ping, 20), 250);
var data = {
timestamp: currentTimestamp,
value: ping,
};
var request = http.request(url, options, function (res) {
if (res.statusMessage === "Unauthorized") {
const genericError =
"Error encountered. Please ensure that your page code and authorization key are correct.";
return console.error(genericError);
}
res.on("data", function () {
console.log("Submitted point " + count + " of " + totalPoints);
});
res.on("end", function () {
});
res.on("error", (error) => {
console.error(`Error caught: ${error.message}`);
});
});
request.end(JSON.stringify({ data: data }));
})
.catch((error) => {
console.error("Ping failed:", error);
// Submit a default value if the ping fails
var data = {
timestamp: currentTimestamp,
value: -1, // Use -1 to indicate ping failure
};
var request = http.request(url, options, function (res) {
// Handle response
});
request.end(JSON.stringify({ data: data }));
});
}
const rendermainpage = () => { const rendermainpage = () => {
if (req.useragent.isMobile) { if (req.useragent.isMobile) {
@ -85,6 +160,5 @@ app.get("/:v*?", async function (req, res) {
} }
return rendermainpage(); return rendermainpage();
}); });
}; };