From 2a6f954df101b847a8c41fef8c20316bbdeb4cea Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 27 Jan 2025 15:43:29 -0600 Subject: [PATCH] Add logi, start using it in KyselyLogger --- deno.json | 1 + deno.lock | 5 +++++ src/db/KyselyLogger.ts | 36 +++++++++++++++++++++++++----------- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/deno.json b/deno.json index b16d8f08..fca56fff 100644 --- a/deno.json +++ b/deno.json @@ -52,6 +52,7 @@ "@scure/base": "npm:@scure/base@^1.1.6", "@sentry/deno": "https://deno.land/x/sentry@7.112.2/index.mjs", "@soapbox/kysely-pglite": "jsr:@soapbox/kysely-pglite@^1.0.0", + "@soapbox/logi": "jsr:@soapbox/logi@^0.1.2", "@soapbox/safe-fetch": "jsr:@soapbox/safe-fetch@^2.0.0", "@soapbox/stickynotes": "jsr:@soapbox/stickynotes@^0.4.0", "@std/assert": "jsr:@std/assert@^0.225.1", diff --git a/deno.lock b/deno.lock index 47501da6..9972204a 100644 --- a/deno.lock +++ b/deno.lock @@ -49,6 +49,7 @@ "jsr:@nostrify/types@0.36": "0.36.0", "jsr:@nostrify/types@~0.30.1": "0.30.1", "jsr:@soapbox/kysely-pglite@1": "1.0.0", + "jsr:@soapbox/logi@~0.1.2": "0.1.2", "jsr:@soapbox/safe-fetch@2": "2.0.0", "jsr:@soapbox/stickynotes@0.4": "0.4.0", "jsr:@std/assert@0.223": "0.223.0", @@ -526,6 +527,9 @@ "npm:kysely@~0.27.4" ] }, + "@soapbox/logi@0.1.2": { + "integrity": "2fbba613a4dbc092e534097729a729ace772fd67a855cd049e1139ee1facd89f" + }, "@soapbox/safe-fetch@2.0.0": { "integrity": "f451d686501c76a0faa058fe9d2073676282a8a42c3b93c59159eb9191f11b5f", "dependencies": [ @@ -2353,6 +2357,7 @@ "jsr:@nostrify/policies@~0.36.1", "jsr:@nostrify/types@0.36", "jsr:@soapbox/kysely-pglite@1", + "jsr:@soapbox/logi@~0.1.2", "jsr:@soapbox/safe-fetch@2", "jsr:@soapbox/stickynotes@0.4", "jsr:@std/assert@~0.225.1", diff --git a/src/db/KyselyLogger.ts b/src/db/KyselyLogger.ts index 514f44a4..d101dd48 100644 --- a/src/db/KyselyLogger.ts +++ b/src/db/KyselyLogger.ts @@ -1,22 +1,36 @@ -import { Stickynotes } from '@soapbox/stickynotes'; +import { logi } from '@soapbox/logi'; import { Logger } from 'kysely'; + import { dbQueriesCounter, dbQueryDurationHistogram } from '@/metrics.ts'; /** Log the SQL for queries. */ export const KyselyLogger: Logger = (event) => { - const console = new Stickynotes('ditto:sql'); - const { query, queryDurationMillis } = event; - const { sql, parameters } = query; + const { sql } = query; - const queryDurationSeconds = queryDurationMillis / 1000; + const duration = queryDurationMillis / 1000; dbQueriesCounter.inc(); - dbQueryDurationHistogram.observe(queryDurationSeconds); + dbQueryDurationHistogram.observe(duration); - console.debug( - sql, - JSON.stringify(parameters), - `\x1b[90m(${(queryDurationSeconds / 1000).toFixed(2)}s)\x1b[0m`, - ); + /** Parameters serialized to JSON. */ + const parameters = query.parameters.map((parameter) => { + try { + return JSON.stringify(parameter); + } catch { + return String(parameter); + } + }); + + if (event.level === 'query') { + logi({ level: 'debug', ns: 'ditto.sql', sql, parameters, duration }); + } + + if (event.level === 'error') { + const error = event.error instanceof Error + ? { name: event.error.name, message: event.error.message } + : { name: 'unknown', message: 'Unknown error' }; + + logi({ level: 'error', ns: 'ditto.sql', sql, parameters, error, duration }); + } };