From 33c6a3c1f8f5bd54647ef53bde99b833de5dc7cf Mon Sep 17 00:00:00 2001 From: alikia2x Date: Sat, 5 Apr 2025 18:26:01 +0800 Subject: [PATCH] ref: the imports of db schema --- .idea/cvsa.iml | 3 +++ .idea/deno.xml | 6 +++++ deno.json | 1 - packages/backend/deno.json | 3 ++- packages/core/db/videoSnapshot.ts | 2 +- packages/core/deno.json | 4 ++++ packages/core/main.ts | 1 + packages/crawler/db/allData.ts | 2 +- packages/crawler/db/snapshot.ts | 5 ++-- packages/crawler/db/snapshotSchedule.ts | 26 +++------------------ packages/crawler/deno.json | 3 ++- packages/crawler/mq/exec/snapshotTick.ts | 2 +- packages/crawler/mq/scheduler.ts | 3 +-- packages/crawler/mq/task/getVideoDetails.ts | 2 +- packages/crawler/mq/task/getVideoStats.ts | 19 +++++++++++---- packages/crawler/net/bulkGetVideoStats.ts | 3 +-- packages/crawler/src/filterWorker.ts | 2 +- 17 files changed, 45 insertions(+), 42 deletions(-) create mode 100644 .idea/deno.xml create mode 100644 packages/core/main.ts diff --git a/.idea/cvsa.iml b/.idea/cvsa.iml index c155925..443232d 100644 --- a/.idea/cvsa.iml +++ b/.idea/cvsa.iml @@ -14,6 +14,9 @@ + + + diff --git a/.idea/deno.xml b/.idea/deno.xml new file mode 100644 index 0000000..2e4b145 --- /dev/null +++ b/.idea/deno.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/deno.json b/deno.json index a3864b1..9104dd2 100644 --- a/deno.json +++ b/deno.json @@ -16,7 +16,6 @@ "imports": { "@astrojs/node": "npm:@astrojs/node@^9.1.3", "@astrojs/svelte": "npm:@astrojs/svelte@^7.0.8", - "@core/db/": "./packages/core/db/", "date-fns": "npm:date-fns@^4.1.0" } } diff --git a/packages/backend/deno.json b/packages/backend/deno.json index 9d3fe45..76b3f5a 100644 --- a/packages/backend/deno.json +++ b/packages/backend/deno.json @@ -4,7 +4,8 @@ "@rabbit-company/argon2id": "jsr:@rabbit-company/argon2id@^2.1.0", "hono": "jsr:@hono/hono@^4.7.5", "zod": "npm:zod", - "yup": "npm:yup" + "yup": "npm:yup", + "@core/": "../core/" }, "tasks": { "dev": "deno serve --env-file=.env --allow-env --allow-net --watch main.ts", diff --git a/packages/core/db/videoSnapshot.ts b/packages/core/db/videoSnapshot.ts index 68f07ec..48c6aa7 100644 --- a/packages/core/db/videoSnapshot.ts +++ b/packages/core/db/videoSnapshot.ts @@ -1,5 +1,5 @@ import { Client } from "https://deno.land/x/postgres@v0.19.3/mod.ts"; -import { VideoSnapshotType } from "@core/db/schema.d.ts"; +import { VideoSnapshotType } from "./schema.d.ts"; export async function getVideoSnapshots(client: Client, aid: number, limit: number, pageOrOffset: number, reverse: boolean, mode: 'page' | 'offset' = 'page') { const offset = mode === 'page' ? (pageOrOffset - 1) * limit : pageOrOffset; diff --git a/packages/core/deno.json b/packages/core/deno.json index e69de29..6467da9 100644 --- a/packages/core/deno.json +++ b/packages/core/deno.json @@ -0,0 +1,4 @@ +{ + "name": "@cvsa/core", + "exports": "./main.ts" +} diff --git a/packages/core/main.ts b/packages/core/main.ts new file mode 100644 index 0000000..1738350 --- /dev/null +++ b/packages/core/main.ts @@ -0,0 +1 @@ +export const DB_VERSION = 10; \ No newline at end of file diff --git a/packages/crawler/db/allData.ts b/packages/crawler/db/allData.ts index 79cfcbd..f2a575a 100644 --- a/packages/crawler/db/allData.ts +++ b/packages/crawler/db/allData.ts @@ -1,5 +1,5 @@ import { Client } from "https://deno.land/x/postgres@v0.19.3/mod.ts"; -import { AllDataType, BiliUserType } from "@core/db/schema.d.ts"; +import { AllDataType, BiliUserType } from "@core/db/schema"; import Akari from "ml/akari.ts"; export async function videoExistsInAllData(client: Client, aid: number) { diff --git a/packages/crawler/db/snapshot.ts b/packages/crawler/db/snapshot.ts index 0be2ccc..f09628c 100644 --- a/packages/crawler/db/snapshot.ts +++ b/packages/crawler/db/snapshot.ts @@ -1,5 +1,6 @@ import { Client } from "https://deno.land/x/postgres@v0.19.3/mod.ts"; -import { LatestSnapshotType } from "@core/db/schema.d.ts"; +import { LatestSnapshotType } from "@core/db/schema"; +import { SnapshotNumber } from "mq/task/getVideoStats.ts"; export async function getVideosNearMilestone(client: Client) { const queryResult = await client.queryObject(` @@ -18,7 +19,7 @@ export async function getVideosNearMilestone(client: Client) { }); } -export async function getLatestVideoSnapshot(client: Client, aid: number): Promise { +export async function getLatestVideoSnapshot(client: Client, aid: number): Promise { const queryResult = await client.queryObject( ` SELECT * diff --git a/packages/crawler/db/snapshotSchedule.ts b/packages/crawler/db/snapshotSchedule.ts index c6a30e0..d8d21bf 100644 --- a/packages/crawler/db/snapshotSchedule.ts +++ b/packages/crawler/db/snapshotSchedule.ts @@ -1,6 +1,5 @@ import { Client } from "https://deno.land/x/postgres@v0.19.3/mod.ts"; -import { formatTimestampToPsql } from "utils/formatTimestampToPostgre.ts"; -import { SnapshotScheduleType } from "@core/db/schema.d.ts"; +import { SnapshotScheduleType } from "@core/db/schema"; import logger from "log/logger.ts"; import { MINUTE } from "$std/datetime/constants.ts"; import { redis } from "db/redis.ts"; @@ -11,8 +10,7 @@ const REDIS_KEY = "cvsa:snapshot_window_counts"; function getCurrentWindowIndex(): number { const now = new Date(); const minutesSinceMidnight = now.getHours() * 60 + now.getMinutes(); - const currentWindow = Math.floor(minutesSinceMidnight / 5); - return currentWindow; + return Math.floor(minutesSinceMidnight / 5); } export async function refreshSnapshotWindowCounts(client: Client, redisClient: Redis) { @@ -162,24 +160,6 @@ export async function getLatestSnapshot(client: Client, aid: number): Promise(query, [startTimeString, endTimeString]); - return res.rows[0].count; -} - /* * Creates a new snapshot schedule record. * @param client The database client. @@ -227,7 +207,7 @@ export async function adjustSnapshotTime( const initialOffset = currentWindow + Math.max(targetOffset, 0); - let timePerIteration = 0; + let timePerIteration: number; const MAX_ITERATIONS = 2880; let iters = 0; const t = performance.now(); diff --git a/packages/crawler/deno.json b/packages/crawler/deno.json index 7c10eae..fdd4fb8 100644 --- a/packages/crawler/deno.json +++ b/packages/crawler/deno.json @@ -37,7 +37,8 @@ "express": "npm:express", "src/": "./src/", "onnxruntime": "npm:onnxruntime-node@1.19.2", - "chalk": "npm:chalk" + "chalk": "npm:chalk", + "@core/db/schema": "../core/db/schema.d.ts" }, "exports": "./main.ts" } diff --git a/packages/crawler/mq/exec/snapshotTick.ts b/packages/crawler/mq/exec/snapshotTick.ts index 5b89929..a4eebf6 100644 --- a/packages/crawler/mq/exec/snapshotTick.ts +++ b/packages/crawler/mq/exec/snapshotTick.ts @@ -216,7 +216,7 @@ export const regularSnapshotsWorker = async (_job: Job) => { } catch (e) { logger.error(e as Error, "mq", "fn:regularSnapshotsWorker"); } finally { - lockManager.releaseLock("dispatchRegularSnapshots"); + await lockManager.releaseLock("dispatchRegularSnapshots"); client.release(); } }; diff --git a/packages/crawler/mq/scheduler.ts b/packages/crawler/mq/scheduler.ts index 0e8c036..69206b6 100644 --- a/packages/crawler/mq/scheduler.ts +++ b/packages/crawler/mq/scheduler.ts @@ -217,8 +217,7 @@ class NetScheduler { const providerLimiterId = "provider-" + proxyName + "-" + provider; if (!this.proxyLimiters[proxyLimiterId]) { const providerLimiter = this.providerLimiters[providerLimiterId]; - const providerAvailable = await providerLimiter.getAvailability(); - return providerAvailable; + return await providerLimiter.getAvailability(); } const proxyLimiter = this.proxyLimiters[proxyLimiterId]; const providerLimiter = this.providerLimiters[providerLimiterId]; diff --git a/packages/crawler/mq/task/getVideoDetails.ts b/packages/crawler/mq/task/getVideoDetails.ts index 3d9b90e..fa5dd2f 100644 --- a/packages/crawler/mq/task/getVideoDetails.ts +++ b/packages/crawler/mq/task/getVideoDetails.ts @@ -53,7 +53,7 @@ export async function insertVideoInfo(client: Client, aid: number) { query, [aid, stat.view, stat.danmaku, stat.reply, stat.like, stat.coin, stat.share, stat.favorite], ); - + logger.log(`Inserted video metadata for aid: ${aid}`, "mq"); await ClassifyVideoQueue.add("classifyVideo", { aid }); } diff --git a/packages/crawler/mq/task/getVideoStats.ts b/packages/crawler/mq/task/getVideoStats.ts index e1d5a94..3455d93 100644 --- a/packages/crawler/mq/task/getVideoStats.ts +++ b/packages/crawler/mq/task/getVideoStats.ts @@ -1,8 +1,19 @@ import { Client } from "https://deno.land/x/postgres@v0.19.3/mod.ts"; import { getVideoInfo } from "net/getVideoInfo.ts"; -import { LatestSnapshotType } from "@core/db/schema.d.ts"; import logger from "log/logger.ts"; +export interface SnapshotNumber { + time: number; + views: number; + coins: number; + likes: number; + favorites: number; + shares: number; + danmakus: number; + aid: number; + replies: number; +} + /* * Fetch video stats from bilibili API and insert into database * @returns {Promise} @@ -17,7 +28,7 @@ export async function insertVideoSnapshot( client: Client, aid: number, task: string, -): Promise { +): Promise { const data = await getVideoInfo(aid, task); if (typeof data == "number") { return data; @@ -42,7 +53,7 @@ export async function insertVideoSnapshot( logger.log(`Taken snapshot for video ${aid}.`, "net", "fn:insertVideoSnapshot"); - const snapshot: LatestSnapshotType = { + return { aid, views, danmakus, @@ -53,6 +64,4 @@ export async function insertVideoSnapshot( favorites, time, }; - - return snapshot; } diff --git a/packages/crawler/net/bulkGetVideoStats.ts b/packages/crawler/net/bulkGetVideoStats.ts index 3ed518c..35c746e 100644 --- a/packages/crawler/net/bulkGetVideoStats.ts +++ b/packages/crawler/net/bulkGetVideoStats.ts @@ -12,8 +12,7 @@ import logger from "log/logger.ts"; * - The alicloud-fc threw an error: with error code `ALICLOUD_FC_ERROR` */ export async function bulkGetVideoStats(aids: number[]): Promise { - const baseURL = `https://api.bilibili.com/medialist/gateway/base/resource/infos?resources=`; - let url = baseURL; + let url = `https://api.bilibili.com/medialist/gateway/base/resource/infos?resources=`; for (const aid of aids) { url += `${aid}:2,`; } diff --git a/packages/crawler/src/filterWorker.ts b/packages/crawler/src/filterWorker.ts index cb336c4..54181c4 100644 --- a/packages/crawler/src/filterWorker.ts +++ b/packages/crawler/src/filterWorker.ts @@ -18,7 +18,7 @@ Deno.addSignalListener("SIGTERM", async () => { Deno.exit(); }); -Akari.init(); +await Akari.init(); const filterWorker = new Worker( "classifyVideo",