1
Fork 0

add statuspage support :3

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

219
server.js
View file

@ -8,7 +8,7 @@
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@ -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 {
@ -54,7 +61,93 @@
); );
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,9 +157,12 @@
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 = [
"banana pie", "banana pie",
"how to buy an atom bomb", "how to buy an atom bomb",
@ -80,68 +176,77 @@
"monke", "monke",
]; ];
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) {
res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Origin", "*");
if (req.secure) { if (req.secure) {
res.header( res.header(
"Strict-Transport-Security", "Strict-Transport-Security",
"max-age=31536000; includeSubDomains; preload" "max-age=31536000; includeSubDomains; preload"
); );
}
res.header("secure-poketube-instance", "1");
next();
});
app.use(function (request, response, next) {
if (config.enablealwayshttps && !request.secure) {
if (!/^https:/i.test(request.headers["x-forwarded-proto"] || request.protocol)) {
return response.redirect("https://" + request.headers.host + request.url);
} }
} res.header("secure-poketube-instance", "1");
next(); next();
}); });
app.use(function (req, res, next) { app.use(function (request, response, next) {
res.header("X-PokeTube-Youtube-Client-Name", "1"); if (config.enablealwayshttps && !request.secure) {
res.header("X-PokeTube-Youtube-Client-Version", "2.20210721.00.00"); if (
res.header("X-PokeTube-Speeder", "6 seconds no cache, 780ms w/cache"); !/^https:/i.test(
if (req.url.match(/^\/(css|js|img|font)\/.+/)) { request.headers["x-forwarded-proto"] || request.protocol
res.setHeader("Cache-Control","public, max-age=" + config.cacher_max_age); // cache header )
res.setHeader("poketube-cacher", "STATIC_FILES"); ) {
} return response.redirect(
"https://" + request.headers.host + request.url
);
}
}
const a = 890; next();
if (!req.url.match(/^\/(css|js|img|font)\/.+/)) { });
res.setHeader("Cache-Control", "public, max-age=" + a); // cache header
res.setHeader("poketube-cacher", "PAGE");
}
next();
});
initlog("[OK] Load headers"); app.use(function (req, res, next) {
res.header("X-PokeTube-Youtube-Client-Name", "1");
res.header("X-PokeTube-Youtube-Client-Version", "2.20210721.00.00");
res.header("X-PokeTube-Speeder", "6 seconds no cache, 780ms w/cache");
if (req.url.match(/^\/(css|js|img|font)\/.+/)) {
res.setHeader(
"Cache-Control",
"public, max-age=" + config.cacher_max_age
); // cache header
res.setHeader("poketube-cacher", "STATIC_FILES");
}
const a = 890;
if (!req.url.match(/^\/(css|js|img|font)\/.+/)) {
res.setHeader("Cache-Control", "public, max-age=" + a); // cache header
res.setHeader("poketube-cacher", "PAGE");
}
next();
});
initlog("[OK] Load headers");
} catch { } catch {
initlog("[FAILED] load headers") initlog("[FAILED] load headers");
} }
try { try {
app.get("/robots.txt", (req, res) => { app.get("/robots.txt", (req, res) => {
res.sendFile(__dirname + "/robots.txt"); res.sendFile(__dirname + "/robots.txt");
}); });
initlog("[OK] Load robots.txt"); initlog("[OK] Load robots.txt");
} catch { } catch {
initlog("[FAILED] load robots.txt") initlog("[FAILED] load robots.txt");
} }
initPokeTube() initPokeTube();
})(); })();