From de9fecaf65ffcc4a752758b202cb456e8f89956f Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 7 Dec 2023 18:43:24 -0600 Subject: [PATCH] Add a stats module (draft) --- src/stats.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/stats.ts diff --git a/src/stats.ts b/src/stats.ts new file mode 100644 index 00000000..741c418c --- /dev/null +++ b/src/stats.ts @@ -0,0 +1,32 @@ +import { open as lmdb } from 'npm:lmdb'; +import { Event } from '@/deps.ts'; + +const db = lmdb({ path: 'data/ditto.lmdb' }); + +/** Store stats for the event in LMDB. */ +async function saveStats(event: Event): Promise { + switch (event.kind) { + case 6: + return await incrementMentionedEvent(event, 'reposts'); + case 7: + return await incrementMentionedEvent(event, 'reactions'); + } +} + +/** Increment the subkey for the first mentioned event. */ +async function incrementMentionedEvent(event: Event, subkey: string): Promise { + const eventId = event.tags.find(([name]) => name === 'e')?.[1]; + if (eventId) { + return await incrementKey([eventId, subkey]); + } +} + +/** Increase the counter by 1, or set the key if it doesn't exist. */ +function incrementKey(key: string[]): Promise { + return db.transaction(() => { + const value = db.get(key) || 0; + db.put(key, value + 1); + }); +} + +export { saveStats };