add statuspage support :3

This commit is contained in:
Ashley 2023-06-30 10:54:53 +00:00
parent 4a96f06ca0
commit 06cfad8fa3

127
server.js
View file

@ -34,7 +34,14 @@
const config = require("./config.json"); const config = require("./config.json");
const u = await media_proxy(); const u = await media_proxy();
initlog("Loading..."); initlog("Loading...");
initlog("[Welcome] Welcome To PokeTube :3 " +"Running " +`Node ${process.version} - V8 v${process.versions.v8} - ${process.platform.replace("linux", "GNU/Linux")} ${process.arch} Server - libpt ${version}` initlog(
"[Welcome] Welcome To PokeTube :3 " +
"Running " +
`Node ${process.version} - V8 v${
process.versions.v8
} - ${process.platform.replace("linux", "GNU/Linux")} ${
process.arch
} Server - libpt ${version}`
); );
const { const {
@ -55,6 +62,92 @@
const sha384 = modules.hash; const sha384 = modules.hash;
var http = require("https");
var ping = require("ping");
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 };
// Need at least 1 data point for every 5 minutes.
// Submit random data for the whole day.
var totalPoints = (60 / 5) * 24;
var epochInSeconds = Math.floor(new Date() / 1000);
// This function gets called every second.
function submit(count) {
count = count + 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 () {
setTimeout(function () {
submit(count);
}, 1000);
});
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 }));
});
}
// Initial call to start submitting data immediately.
submit(0);
}
var app = modules.express(); var app = modules.express();
initlog("Loaded express.js"); initlog("Loaded express.js");
app.engine("html", require("ejs").renderFile); app.engine("html", require("ejs").renderFile);
@ -64,7 +157,10 @@
app.enable("trust proxy"); app.enable("trust proxy");
const renderTemplate = async (res, req, template, data = {}) => { const renderTemplate = async (res, req, template, data = {}) => {
res.render(modules.path.resolve(`${templateDir}${modules.path.sep}${template}`),Object.assign(data)); res.render(
modules.path.resolve(`${templateDir}${modules.path.sep}${template}`),
Object.assign(data)
);
}; };
const random_words = [ const random_words = [
@ -82,10 +178,10 @@
const initPokeTube = function () { const initPokeTube = function () {
sinit(app, config, renderTemplate); sinit(app, config, renderTemplate);
initlog("inited super init") initlog("inited super init");
init(app); init(app);
initlog("inited app") initlog("inited app");
} };
try { try {
app.use(function (req, res, next) { app.use(function (req, res, next) {
@ -103,8 +199,14 @@
app.use(function (request, response, next) { app.use(function (request, response, next) {
if (config.enablealwayshttps && !request.secure) { if (config.enablealwayshttps && !request.secure) {
if (!/^https:/i.test(request.headers["x-forwarded-proto"] || request.protocol)) { if (
return response.redirect("https://" + request.headers.host + request.url); !/^https:/i.test(
request.headers["x-forwarded-proto"] || request.protocol
)
) {
return response.redirect(
"https://" + request.headers.host + request.url
);
} }
} }
@ -116,7 +218,10 @@
res.header("X-PokeTube-Youtube-Client-Version", "2.20210721.00.00"); res.header("X-PokeTube-Youtube-Client-Version", "2.20210721.00.00");
res.header("X-PokeTube-Speeder", "6 seconds no cache, 780ms w/cache"); res.header("X-PokeTube-Speeder", "6 seconds no cache, 780ms w/cache");
if (req.url.match(/^\/(css|js|img|font)\/.+/)) { if (req.url.match(/^\/(css|js|img|font)\/.+/)) {
res.setHeader("Cache-Control","public, max-age=" + config.cacher_max_age); // cache header res.setHeader(
"Cache-Control",
"public, max-age=" + config.cacher_max_age
); // cache header
res.setHeader("poketube-cacher", "STATIC_FILES"); res.setHeader("poketube-cacher", "STATIC_FILES");
} }
@ -130,7 +235,7 @@
initlog("[OK] Load headers"); initlog("[OK] Load headers");
} catch { } catch {
initlog("[FAILED] load headers") initlog("[FAILED] load headers");
} }
try { try {
@ -140,8 +245,8 @@
initlog("[OK] Load robots.txt"); initlog("[OK] Load robots.txt");
} catch { } catch {
initlog("[FAILED] load robots.txt") initlog("[FAILED] load robots.txt");
} }
initPokeTube() initPokeTube();
})(); })();