mirror of
https://codeberg.org/ashley/poke.git
synced 2024-11-22 16:17:52 +01:00
add statuspage support :3
This commit is contained in:
parent
4a96f06ca0
commit
06cfad8fa3
1 changed files with 162 additions and 57 deletions
219
server.js
219
server.js
|
@ -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();
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in a new issue