Move refreshAuthorStatsDebounced to stats.ts
This commit is contained in:
parent
5c2e3450a9
commit
bf479d0162
12
src/stats.ts
12
src/stats.ts
|
@ -1,6 +1,7 @@
|
||||||
import { NKinds, NostrEvent, NStore } from '@nostrify/nostrify';
|
import { NKinds, NostrEvent, NStore } from '@nostrify/nostrify';
|
||||||
import Debug from '@soapbox/stickynotes/debug';
|
import Debug from '@soapbox/stickynotes/debug';
|
||||||
import { InsertQueryBuilder, Kysely } from 'kysely';
|
import { InsertQueryBuilder, Kysely } from 'kysely';
|
||||||
|
import { LRUCache } from 'lru-cache';
|
||||||
import { SetRequired } from 'type-fest';
|
import { SetRequired } from 'type-fest';
|
||||||
|
|
||||||
import { DittoDB } from '@/db/DittoDB.ts';
|
import { DittoDB } from '@/db/DittoDB.ts';
|
||||||
|
@ -250,4 +251,13 @@ async function countAuthorStats(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export { refreshAuthorStats, updateStats };
|
const lru = new LRUCache<string, true>({ max: 1000 });
|
||||||
|
|
||||||
|
/** Calls `refreshAuthorStats` only once per author. */
|
||||||
|
function refreshAuthorStatsDebounced(pubkey: string): void {
|
||||||
|
if (lru.get(pubkey)) return;
|
||||||
|
lru.set(pubkey, true);
|
||||||
|
refreshAuthorStats(pubkey).catch(() => {});
|
||||||
|
}
|
||||||
|
|
||||||
|
export { refreshAuthorStats, refreshAuthorStatsDebounced, updateStats };
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
import { NostrEvent, NStore } from '@nostrify/nostrify';
|
import { NostrEvent, NStore } from '@nostrify/nostrify';
|
||||||
import { LRUCache } from 'lru-cache';
|
|
||||||
import { matchFilter } from 'nostr-tools';
|
import { matchFilter } from 'nostr-tools';
|
||||||
|
|
||||||
import { DittoDB } from '@/db/DittoDB.ts';
|
import { DittoDB } from '@/db/DittoDB.ts';
|
||||||
import { type DittoEvent } from '@/interfaces/DittoEvent.ts';
|
import { type DittoEvent } from '@/interfaces/DittoEvent.ts';
|
||||||
import { DittoTables } from '@/db/DittoTables.ts';
|
import { DittoTables } from '@/db/DittoTables.ts';
|
||||||
import { Conf } from '@/config.ts';
|
import { Conf } from '@/config.ts';
|
||||||
import { refreshAuthorStats } from '@/stats.ts';
|
import { refreshAuthorStatsDebounced } from '@/stats.ts';
|
||||||
|
|
||||||
interface HydrateOpts {
|
interface HydrateOpts {
|
||||||
events: DittoEvent[];
|
events: DittoEvent[];
|
||||||
|
@ -57,7 +56,7 @@ async function hydrateEvents(opts: HydrateOpts): Promise<DittoEvent[]> {
|
||||||
events: await gatherEventStats(cache),
|
events: await gatherEventStats(cache),
|
||||||
};
|
};
|
||||||
|
|
||||||
requestMissingAuthorStats(events, stats.authors);
|
refreshMissingAuthorStats(events, stats.authors);
|
||||||
|
|
||||||
// Dedupe events.
|
// Dedupe events.
|
||||||
const results = [...new Map(cache.map((event) => [event.id, event])).values()];
|
const results = [...new Map(cache.map((event) => [event.id, event])).values()];
|
||||||
|
@ -270,7 +269,7 @@ async function gatherAuthorStats(events: DittoEvent[]): Promise<DittoTables['aut
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestMissingAuthorStats(events: NostrEvent[], stats: DittoTables['author_stats'][]) {
|
function refreshMissingAuthorStats(events: NostrEvent[], stats: DittoTables['author_stats'][]) {
|
||||||
const pubkeys = new Set<string>(
|
const pubkeys = new Set<string>(
|
||||||
events
|
events
|
||||||
.filter((event) => event.kind === 0)
|
.filter((event) => event.kind === 0)
|
||||||
|
@ -286,15 +285,6 @@ function requestMissingAuthorStats(events: NostrEvent[], stats: DittoTables['aut
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const lru = new LRUCache<string, true>({ max: 1000 });
|
|
||||||
|
|
||||||
/** Calls `refreshAuthorStats` only once per author. */
|
|
||||||
function refreshAuthorStatsDebounced(pubkey: string): void {
|
|
||||||
if (lru.get(pubkey)) return;
|
|
||||||
lru.set(pubkey, true);
|
|
||||||
refreshAuthorStats(pubkey).catch(() => {});
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Collect event stats from the events. */
|
/** Collect event stats from the events. */
|
||||||
async function gatherEventStats(events: DittoEvent[]): Promise<DittoTables['event_stats'][]> {
|
async function gatherEventStats(events: DittoEvent[]): Promise<DittoTables['event_stats'][]> {
|
||||||
const ids = new Set<string>(
|
const ids = new Set<string>(
|
||||||
|
|
Loading…
Reference in New Issue