Files
SpigotWatch/util/stats.js
2026-02-25 18:51:13 +01:00

71 lines
1.5 KiB
JavaScript

/**
* util/stats.js
* Verfolgt Bot-Statistiken persistent in ./data/stats.json
*/
import fs from "fs";
import path from "path";
const STATS_FILE = "./data/stats.json";
const defaults = {
updatesFound: 0, // Erkannte Updates gesamt
updatesPosted: 0, // Erfolgreich gesendete Update-Embeds
checksRun: 0, // Durchgeführte Update-Checks
apiErrors: 0, // Spiget-API Fehler
dmsSent: 0, // DMs an den Owner gesendet
startedAt: null,
};
function load() {
try {
return JSON.parse(fs.readFileSync(STATS_FILE, "utf8"));
} catch {
return { ...defaults };
}
}
function save(data) {
try {
fs.mkdirSync(path.dirname(STATS_FILE), { recursive: true });
fs.writeFileSync(STATS_FILE, JSON.stringify(data, null, 2));
} catch (e) {
console.error("[Stats] Fehler beim Speichern:", e.message);
}
}
class Stats {
constructor() {
this._data = load();
if (!this._data.startedAt) {
this._data.startedAt = new Date().toISOString();
save(this._data);
}
}
/** Erhöht einen Zähler um 1 und speichert sofort */
increment(key, by = 1) {
if (key in this._data) {
this._data[key] += by;
save(this._data);
}
}
/** Gibt den aktuellen Wert eines Zählers zurück */
get(key) {
return this._data[key] ?? 0;
}
/** Gibt alle Statistiken zurück */
all() {
return { ...this._data };
}
/** Setzt die Startzeit auf jetzt */
markStart() {
this._data.startedAt = new Date().toISOString();
save(this._data);
}
}
export default new Stats();