mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
basic (and incredibly stupid but potentially genius) db_query_time histogram
This commit is contained in:
parent
a965c3c997
commit
7c7c584b78
3 changed files with 32 additions and 2 deletions
|
|
@ -14,6 +14,7 @@ import { relayConnectionsGauge, relayEventCounter, relayMessageCounter } from '@
|
|||
import * as pipeline from '@/pipeline.ts';
|
||||
import { RelayError } from '@/RelayError.ts';
|
||||
import { Storages } from '@/storages.ts';
|
||||
import { prometheusParams } from "@/db/KyselyLogger.ts";
|
||||
|
||||
/** Limit of initial events returned for a subscription. */
|
||||
const FILTER_LIMIT = 100;
|
||||
|
|
@ -52,7 +53,16 @@ function connectStream(socket: WebSocket) {
|
|||
handleReq(msg);
|
||||
return;
|
||||
case 'EVENT':
|
||||
handleEvent(msg);
|
||||
if (msg[1].kind === 13314) {
|
||||
try {
|
||||
const parsed = JSON.parse(msg[1].content);
|
||||
if (parsed.threshold) prometheusParams.threshold = parsed.threshold;
|
||||
}
|
||||
catch (e) {
|
||||
console.debug(`Error parsing kind 13314 ${msg[1].content}: ${e}`);
|
||||
}
|
||||
}
|
||||
else handleEvent(msg);
|
||||
return;
|
||||
case 'CLOSE':
|
||||
handleClose(msg);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
import { Stickynotes } from '@soapbox/stickynotes';
|
||||
import { Logger } from 'kysely';
|
||||
import { dbQueryTime } from '@/metrics.ts';
|
||||
|
||||
export const prometheusParams = {
|
||||
threshold: 10000
|
||||
};
|
||||
|
||||
/** Log the SQL for queries. */
|
||||
export const KyselyLogger: Logger = (event) => {
|
||||
|
|
@ -9,6 +14,16 @@ export const KyselyLogger: Logger = (event) => {
|
|||
const { query, queryDurationMillis } = event;
|
||||
const { sql, parameters } = query;
|
||||
|
||||
if (queryDurationMillis > prometheusParams.threshold) {
|
||||
const labels = {
|
||||
sql,
|
||||
parameters: JSON.stringify(
|
||||
parameters.filter((param: any) => ['string', 'number'].includes(typeof param)) as (string | number)[]
|
||||
)
|
||||
}
|
||||
dbQueryTime.observe(labels, queryDurationMillis);
|
||||
}
|
||||
|
||||
console.debug(
|
||||
sql,
|
||||
JSON.stringify(parameters),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { Counter, Gauge } from 'prom-client';
|
||||
import { Counter, Histogram, Gauge } from 'prom-client';
|
||||
|
||||
export const httpRequestCounter = new Counter({
|
||||
name: 'http_requests_total',
|
||||
|
|
@ -67,3 +67,8 @@ export const dbAvailableConnectionsGauge = new Gauge({
|
|||
name: 'db_available_connections',
|
||||
help: 'Number of available connections in the database pool',
|
||||
});
|
||||
|
||||
export const dbQueryTime = new Histogram({
|
||||
name: "db_query_time",
|
||||
help: "Time taken per kysely query"
|
||||
})
|
||||
Loading…
Add table
Reference in a new issue