This commit is contained in:
Michael Zhang 2024-05-30 12:30:03 -05:00
parent d9eefa17d4
commit 33187f5066
3 changed files with 27 additions and 16 deletions

1
data/scores.db Normal file
View file

@ -0,0 +1 @@
{"$$indexCreated":{"fieldName":"key","unique":true,"sparse":false}}

0
data/transitions.db Normal file
View file

42
main.ts
View file

@ -8,19 +8,6 @@ const prisma = new PrismaClient();
const redirectUri = "http://localhost:3000/auth/callback";
const db = {
scores: new Datastore({ filename: "data/scores.db", autoload: true }),
transitions: new Datastore({
filename: "data/transitions.db",
autoload: true,
}),
};
db.scores.ensureIndex({ fieldName: "key", unique: true });
db.scores.persistence.setAutocompactionInterval(5000);
// await new Promise((resolve) => db.loadDatabase(resolve));
async function getUserToken() {
const rlInterface = createInterface({
input: process.stdin,
@ -200,17 +187,40 @@ async function scrapeSingle(channelId) {
async function scrapeChannels() {
const channels: Channel[] = await fetchApi("/chat/channels");
// // biome-ignore lint/style/noNonNullAssertion: <explanation>
// const osuChannel = channels.find((channel) => channel.name === "#osu")!;
// const { channel_id: osuChannelId } = osuChannel;
if (!Array.isArray(channels)) return;
await Promise.all(
channels.map((channel) => scrapeSingle(channel.channel_id)),
);
}
async function getStats(elapsed) {
const result = await prisma.score.count();
console.log(
`${result} total scores (prev query: ${Math.round(elapsed / 10) / 100}s)`,
);
const result2 = await prisma.$queryRaw`
SELECT
beatmapset_id, artist, title, COUNT(*) as count
FROM Score
JOIN BeatmapSet ON Score.beatmapset_id = BeatmapSet.id
GROUP BY beatmapset_id
ORDER BY count DESC
LIMIT 5;
`;
for (const row of result2) {
console.log(` ${row.count}\t${row.artist} - ${row.title}`);
}
}
async function mainLoop() {
while (true) {
const start = performance.now();
await scrapeChannels();
const end = performance.now();
await getStats(end - start);
await sleep(10000);
}
}