71 lines
1.5 KiB
JavaScript
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(); |