diff --git a/README.md b/README.md index 2f88921..9a7a3f7 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Le due variabili **non** possono essere usate nello stesso momento. Per inserire più di un peer nelle variabili d'ambiente, separarli con un `;`. Non inserire spazi o altri caratteri, solo i nomi/ID dei peer e `;` sono accettati. Se vengono specificati degli hostname o degli ID non validi insieme a degli hostname o degli ID validi, quelli non validi saranno ignorati. 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`. La sua dimensione massima di default è 10MB, ma può essere modificata da un numero nella variabile d'ambiente `MAX_LOG_SIZE`. Il programma restituisce come codice di errore: @@ -33,6 +33,21 @@ Attualmente sono fornite immagini precompilate per le architettura arm64 e amd64 ## Docker Docker run: -`docker run -p 3000:3000 -e BASE_TOKEN= -e HOSTNAMES=";" -v /var/log/NetBird-UptimeKuma:/app/log gitea.laprogrammatriceverde.crabdance.com/verde/netbird-uptimekuma:latest` +```console +docker run -p 3000:3000 -e BASE_TOKEN= -e HOSTNAMES=";" -v /var/log/NetBird-UptimeKuma:/app/log gitea.laprogrammatriceverde.crabdance.com/verde/netbird-uptimekuma:latest +``` -Per il Docker Compose, vedere il file relativo. +Docker Compose di esempio: +```yaml +--- +services: + netbird-uptimekuma: + image: gitea.laprogrammatriceverde.crabdance.com/verde/netbird-uptimekuma:latest + ports: + - 3000:3000 + environment: + BASE_TOKEN: "" + HOSTNAMES: ";" + volumes: + - /var/log/NetBird-UptimeKuma:/app/log +``` diff --git a/index.js b/index.js index 645f42c..53c13cc 100644 --- a/index.js +++ b/index.js @@ -40,10 +40,8 @@ app.get("/", (_, res) => { /* TODO: - Fare in modo che la durata del timer di rinnovo sia dinamica e dipenda dalla durata rimasta del token inserito -- Fare in modo che con CTRL+C il programma effettivamente esca +- Fare in modo che con CTRL+C il programma effettivamente esca (in docker) - Aggiungere un timer modificato dall'esterno (opzionale, default 1 giorno) che decida per quanto tenere un log prima di cancellarlo -- Quando un log viene cancellato copiare il token corrente nel log - All'uscita del programma far stampare l'ultimo token in uso - Usare i log con docker logs -- Aggiornare Node e il metodo di build */ diff --git a/logs.js b/logs.js index b714925..abdd6e3 100644 --- a/logs.js +++ b/logs.js @@ -5,19 +5,59 @@ let logFile; let dir = 'log/'; -if (!fs.existsSync(dir)){ - fs.mkdirSync(dir); +if (!fs.existsSync(dir)) { + fs.mkdirSync(dir); } - logFile = path.join(__dirname + '/' + dir, "NetBird-UptimeKuma.log"); -console.log(`[${shared.now()}] File di log situato in ${__dirname}/${dir}NetBird-UptimeKuma.log`); - +logFile = path.join(__dirname + '/' + dir, "NetBird-UptimeKuma.log"); + +console.log(`[${shared.now()}] File di log situato in ${logFile}`); + +if ("MAX_LOG_SIZE" in process.env) { + shared.setMaxLogSize(process.env.MAX_LOG_SIZE); +} +console.log(`[${shared.now()}] Dimensione massima del file di log: ${shared.getMaxLogSize()} MB`); + function writeToLog(message) { fs.appendFileSync(logFile, `${message}\n`); } function Log(message) { console.log(message); + keepLogfileSmall(); writeToLog(message); } +function keepLogfileSmall() { + let stats = fs.statSync(logFile); + let currentLogSize = stats.size / (1024 * 1024); + + if (currentLogSize >= shared.getMaxLogSize()) { + try { + const data = fs.readFileSync(logFile, 'utf8'); + + let lastWorkingTokenIndex = data.lastIndexOf("Nuovo token creato"); + if (lastWorkingTokenIndex == -1) { + try { + fs.writeFileSync(logFile, ""); + Log(`[${shared.now()}] Log precedente cancellato correttamente.`) + } catch (err) { + Log(`[${shared.now()}] Errore nella scrittura del file: ${err}`); + + } + } else { + let lastWorkingTokenLine = data.substring(lastWorkingTokenIndex - 22, lastWorkingTokenIndex + 60) + "\n"; + + try { + fs.writeFileSync(logFile, lastWorkingTokenLine); + Log(`[${shared.now()}] Log precedente cancellato correttamente.`) + } catch (err) { + Log(`[${shared.now()}] Errore nella scrittura del file: ${err}`); + } + } + } catch (err) { + Log(`[${shared.now()}] Errore nella lettura del file: ${err}`); + } + + } +} module.exports = { Log }; diff --git a/shared.js b/shared.js index ec9084b..c46a40e 100644 --- a/shared.js +++ b/shared.js @@ -23,6 +23,13 @@ module.exports = { dayjs.extend(utc); dayjs.extend(timezone); dayjs.tz.setDefault(dayjs.tz.guess()); - return dayjs().format("DD/MM/YYYY HH:mm:ss.sss"); + return dayjs().format("DD/MM/YYYY HH:mm:ss"); + }, + maxLogSize: 10, + setMaxLogSize(maxLogSize) { + this.maxLogSize = maxLogSize; + }, + getMaxLogSize() { + return this.maxLogSize; }, };