|
1 | 1 | import { |
2 | 2 | Prisma, |
3 | 3 | PrismaClient, |
4 | | - PrismaClientOrTransaction, |
5 | | - PrismaReplicaClient, |
6 | | - PrismaTransactionClient, |
7 | | - PrismaTransactionOptions, |
| 4 | + $transaction as transac, |
| 5 | + type PrismaClientOrTransaction, |
| 6 | + type PrismaReplicaClient, |
| 7 | + type PrismaTransactionClient, |
| 8 | + type PrismaTransactionOptions, |
8 | 9 | } from "@trigger.dev/database"; |
9 | 10 | import invariant from "tiny-invariant"; |
10 | 11 | import { z } from "zod"; |
11 | 12 | import { env } from "./env.server"; |
12 | 13 | import { logger } from "./services/logger.server"; |
13 | 14 | import { isValidDatabaseUrl } from "./utils/db"; |
14 | 15 | import { singleton } from "./utils/singleton"; |
15 | | -import { $transaction as transac } from "@trigger.dev/database"; |
16 | 16 | import { startActiveSpan } from "./v3/tracer.server"; |
17 | 17 | import { Span } from "@opentelemetry/api"; |
| 18 | +import { queryPerformanceMonitor } from "./utils/queryPerformanceMonitor.server"; |
18 | 19 |
|
19 | 20 | export type { |
20 | 21 | PrismaTransactionClient, |
@@ -153,13 +154,19 @@ function getClient() { |
153 | 154 | }, |
154 | 155 | ] |
155 | 156 | : []) satisfies Prisma.LogDefinition[]), |
156 | | - // verbose |
157 | | - ...((process.env.VERBOSE_PRISMA_LOGS === "1" |
| 157 | + // Query performance monitoring |
| 158 | + ...((process.env.VERBOSE_PRISMA_LOGS === "1" || |
| 159 | + process.env.VERY_SLOW_QUERY_THRESHOLD_MS !== undefined |
158 | 160 | ? [ |
159 | 161 | { |
160 | 162 | emit: "event", |
161 | 163 | level: "query", |
162 | 164 | }, |
| 165 | + ] |
| 166 | + : []) satisfies Prisma.LogDefinition[]), |
| 167 | + // verbose |
| 168 | + ...((process.env.VERBOSE_PRISMA_LOGS === "1" |
| 169 | + ? [ |
163 | 170 | { |
164 | 171 | emit: "stdout", |
165 | 172 | level: "query", |
@@ -206,6 +213,11 @@ function getClient() { |
206 | 213 | }); |
207 | 214 | } |
208 | 215 |
|
| 216 | + // Add query performance monitoring |
| 217 | + client.$on("query", (log) => { |
| 218 | + queryPerformanceMonitor.onQuery("writer", log); |
| 219 | + }); |
| 220 | + |
209 | 221 | // connect eagerly |
210 | 222 | client.$connect(); |
211 | 223 |
|
@@ -265,13 +277,19 @@ function getReplicaClient() { |
265 | 277 | }, |
266 | 278 | ] |
267 | 279 | : []) satisfies Prisma.LogDefinition[]), |
268 | | - // verbose |
269 | | - ...((process.env.VERBOSE_PRISMA_LOGS === "1" |
| 280 | + // Query performance monitoring |
| 281 | + ...((process.env.VERBOSE_PRISMA_LOGS === "1" || |
| 282 | + process.env.VERY_SLOW_QUERY_THRESHOLD_MS !== undefined |
270 | 283 | ? [ |
271 | 284 | { |
272 | 285 | emit: "event", |
273 | 286 | level: "query", |
274 | 287 | }, |
| 288 | + ] |
| 289 | + : []) satisfies Prisma.LogDefinition[]), |
| 290 | + // verbose |
| 291 | + ...((process.env.VERBOSE_PRISMA_LOGS === "1" |
| 292 | + ? [ |
275 | 293 | { |
276 | 294 | emit: "stdout", |
277 | 295 | level: "query", |
@@ -317,6 +335,11 @@ function getReplicaClient() { |
317 | 335 | }); |
318 | 336 | } |
319 | 337 |
|
| 338 | + // Add query performance monitoring for replica client |
| 339 | + replicaClient.$on("query", (log) => { |
| 340 | + queryPerformanceMonitor.onQuery("replica", log); |
| 341 | + }); |
| 342 | + |
320 | 343 | // connect eagerly |
321 | 344 | replicaClient.$connect(); |
322 | 345 |
|
|
0 commit comments