Improved error handling

This commit is contained in:
La Programmatrice Verde 2025-08-20 18:22:45 +02:00
parent db9e99cc52
commit 97ebcd4527
4 changed files with 95 additions and 57 deletions

View File

@ -9,6 +9,14 @@ Se vengono specificati degli hostname o degli ID non validi insieme a degli host
Se nessuna delle due variabili vengono specificate, il programma monitorerà tutti i peer registrati. Se nessuna delle due variabili vengono specificate, il programma monitorerà tutti i peer registrati.
Il file di log è disponibile nella cartella di esecuzione in `./log/NetBird-UptimeKuma.log` Il file di log è disponibile nella cartella di esecuzione in `./log/NetBird-UptimeKuma.log`
Il programma restituisce come codice di errore:
`1` se non viene inserito nessun token
`2` se viene inserito un token non valido
`3` se si verifica un errore in una funzione di rete
## Per iniziare ad usare il programma: ## Per iniziare ad usare il programma:
1- Recarsi su https://app.netbird.io/team/users 1- Recarsi su https://app.netbird.io/team/users

View File

@ -30,16 +30,22 @@ async function Request() {
} }
async function isConnected(hostID) { async function isConnected(hostID) {
const response = await axios.get( try {
`https://api.netbird.io/api/peers/${hostID}`, const response = await axios.get(
{ `https://api.netbird.io/api/peers/${hostID}`,
headers: { {
Accept: "application/json", headers: {
Authorization: `Token ${shared.getToken()}`, Accept: "application/json",
}, Authorization: `Token ${shared.getToken()}`,
},
}
);
Log(`[${shared.now()}] ${hostID} connected: ${response.data.connected}`);
}
catch (error) {
Log(`[${shared.now()}] ${error}`);
process.exit(3);
} }
);
Log(`[${shared.now()}] ${hostID} connected: ${response.data.connected}`);
return response.data.connected; return response.data.connected;
} }
@ -158,6 +164,7 @@ async function initHostList() {
}); });
} catch (error) { } catch (error) {
Log(`[${shared.now()}] ${error}`); Log(`[${shared.now()}] ${error}`);
process.exit(3);
} }
} }

View File

@ -10,10 +10,14 @@ const eventEmitter = new EventEmitter();
shared.eventEmitter = eventEmitter; shared.eventEmitter = eventEmitter;
let baseToken = process.env.BASE_TOKEN; let baseToken = process.env.BASE_TOKEN;
shared.setToken(baseToken); shared.setToken(baseToken);
/*
global.minute = 1000 * 60; global.minute = 1000 * 60;
global.hour = minute * 60; global.hour = minute * 60;
global.day = hour * 24; global.day = hour * 24;
*/
global.minute = 1000;
global.hour = minute * 10;
global.day = hour * 3;
app.listen(port, () => { app.listen(port, () => {
Log(`[${shared.now()}] Il server è online sulla porta ${port}`); Log(`[${shared.now()}] Il server è online sulla porta ${port}`);
@ -33,6 +37,6 @@ if ("BASE_TOKEN" in process.env) {
process.exit(1); process.exit(1);
} }
app.get("/", (req, res) => { app.get("/", (_, res) => {
res.json(shared.getHosts()); res.json(shared.getHosts());
}); });

111
tokens.js
View File

@ -7,7 +7,6 @@ let userID;
async function TokenRenew() { async function TokenRenew() {
setInterval(async () => { setInterval(async () => {
shared.eventEmitter.emit("tokenRenewalStart"); shared.eventEmitter.emit("tokenRenewalStart");
try {
// ottieni l'ID dell'utente associato al token // ottieni l'ID dell'utente associato al token
userID = await getUserID(); userID = await getUserID();
@ -21,69 +20,89 @@ async function TokenRenew() {
// cancella il token precedente // cancella il token precedente
await deleteToken(tokenID); await deleteToken(tokenID);
shared.eventEmitter.emit("tokenRenewalEnd"); shared.eventEmitter.emit("tokenRenewalEnd");
} catch (error) {
Log(`[${shared.now()}] Errore nel rinnovo del token: ${error}`);
}
}, day - hour); }, day - hour);
} }
async function getUserID() { async function getUserID() {
const response = await axios.get("https://api.netbird.io/api/users/current", { try {
headers: { const response = await axios.get(
Accept: "application/json", "https://api.netbird.io/api/users/current",
Authorization: `Token ${shared.getToken()}`, {
}, headers: {
}); Accept: "application/json",
Log(`[${shared.now()}] UserID: ${response.data.id}`); Authorization: `Token ${shared.getToken()}`,
},
}
);
Log(`[${shared.now()}] UserID: ${response.data.id}`);
} catch (error) {
Log(`[${shared.now()}] ${error}`);
process.exit(3);
}
return response.data.id; return response.data.id;
} }
async function deleteToken(tokenID) { async function deleteToken(tokenID) {
await axios.delete( try {
`https://api.netbird.io/api/users/${userID}/tokens/${tokenID}`, await axios.delete(
{ `https://api.netbird.io/api/users/${userID}/tokens/${tokenID}`,
headers: { {
Authorization: `Token ${shared.getToken()}`, headers: {
}, Authorization: `Token ${shared.getToken()}`,
} },
); }
Log(`[${shared.now()}] Token con ID ${tokenID} cancellato con successo`); );
Log(`[${shared.now()}] Token con ID ${tokenID} cancellato con successo`);
} catch (error) {
Log(`[${shared.now()}] ${error}`);
process.exit(3);
}
} }
async function getCurrentTokenID() { async function getCurrentTokenID() {
const response = await axios.get( try {
`https://api.netbird.io/api/users/${userID}/tokens`, const response = await axios.get(
{ `https://api.netbird.io/api/users/${userID}/tokens`,
headers: { {
Accept: "application/json", headers: {
Authorization: `Token ${shared.getToken()}`, Accept: "application/json",
}, Authorization: `Token ${shared.getToken()}`,
} },
); }
);
const token = response.data.find((t) => t.name === "Uptime Kuma"); const token = response.data.find((t) => t.name === "Uptime Kuma");
if (!token) throw new Error("Token 'Uptime Kuma' non trovato"); if (!token) throw new Error("Token 'Uptime Kuma' non trovato");
Log(`[${shared.now()}] CurrentTokenID: ${token.id}`); Log(`[${shared.now()}] CurrentTokenID: ${token.id}`);
} catch (error) {
Log(`[${shared.now()}] ${error}`);
process.exit(3);
}
return token.id; return token.id;
} }
async function getNewToken() { async function getNewToken() {
const response = await axios.post( try {
`https://api.netbird.io/api/users/${userID}/tokens`, const response = await axios.post(
{ `https://api.netbird.io/api/users/${userID}/tokens`,
name: "Uptime Kuma", {
expires_in: 2, name: "Uptime Kuma",
}, expires_in: 2,
{
headers: {
Accept: "application/json",
Authorization: `Token ${shared.getToken()}`,
"Content-Type": "application/json",
}, },
} {
); headers: {
Log(`[${shared.now()}] Nuovo token creato: ${response.data.plain_token}`); Accept: "application/json",
Authorization: `Token ${shared.getToken()}`,
"Content-Type": "application/json",
},
}
);
Log(`[${shared.now()}] Nuovo token creato: ${response.data.plain_token}`);
} catch (error) {
Log(`[${shared.now()}] ${error}`);
process.exit(3);
}
return response.data.plain_token; return response.data.plain_token;
} }