@@ -54,9 +54,7 @@ import { LoggerSpanExporter } from "./telemetry/loggerExporter.server";
5454import { CompactMetricExporter } from "./telemetry/compactMetricExporter.server" ;
5555import { logger } from "~/services/logger.server" ;
5656import { flattenAttributes } from "@trigger.dev/core/v3" ;
57- import { prisma } from "~/db.server" ;
5857import { metricsRegister } from "~/metrics.server" ;
59- import type { Prisma } from "@trigger.dev/database" ;
6058import { performance } from "node:perf_hooks" ;
6159
6260export const SEMINTATTRS_FORCE_RECORDING = "forceRecording" ;
@@ -330,221 +328,12 @@ function setupMetrics() {
330328
331329 const meter = meterProvider . getMeter ( "trigger.dev" , "3.3.12" ) ;
332330
333- configurePrismaMetrics ( { meter } ) ;
334331 configureNodejsMetrics ( { meter } ) ;
335332 configureHostMetrics ( { meterProvider } ) ;
336333
337334 return meter ;
338335}
339336
340- function configurePrismaMetrics ( { meter } : { meter : Meter } ) {
341- // Counters
342- const queriesTotal = meter . createObservableCounter ( "db.client.queries.total" , {
343- description : "Total number of Prisma Client queries executed" ,
344- unit : "queries" ,
345- } ) ;
346- const datasourceQueriesTotal = meter . createObservableCounter ( "db.datasource.queries.total" , {
347- description : "Total number of datasource queries executed" ,
348- unit : "queries" ,
349- } ) ;
350- const connectionsOpenedTotal = meter . createObservableCounter ( "db.pool.connections.opened.total" , {
351- description : "Total number of pool connections opened" ,
352- unit : "connections" ,
353- } ) ;
354- const connectionsClosedTotal = meter . createObservableCounter ( "db.pool.connections.closed.total" , {
355- description : "Total number of pool connections closed" ,
356- unit : "connections" ,
357- } ) ;
358-
359- // Gauges
360- const queriesActive = meter . createObservableGauge ( "db.client.queries.active" , {
361- description : "Number of currently active Prisma Client queries" ,
362- unit : "queries" ,
363- } ) ;
364- const queriesWait = meter . createObservableGauge ( "db.client.queries.wait" , {
365- description : "Number of queries currently waiting for a connection" ,
366- unit : "queries" ,
367- } ) ;
368- const totalGauge = meter . createObservableGauge ( "db.pool.connections.total" , {
369- description : "Open Prisma-pool connections" ,
370- unit : "connections" ,
371- } ) ;
372- const busyGauge = meter . createObservableGauge ( "db.pool.connections.busy" , {
373- description : "Connections currently executing queries" ,
374- unit : "connections" ,
375- } ) ;
376- const freeGauge = meter . createObservableGauge ( "db.pool.connections.free" , {
377- description : "Idle (free) connections in the pool" ,
378- unit : "connections" ,
379- } ) ;
380-
381- // Histogram statistics as gauges
382- const queriesWaitTimeCount = meter . createObservableGauge ( "db.client.queries.wait_time.count" , {
383- description : "Number of wait time observations" ,
384- unit : "observations" ,
385- } ) ;
386- const queriesWaitTimeSum = meter . createObservableGauge ( "db.client.queries.wait_time.sum" , {
387- description : "Total wait time across all observations" ,
388- unit : "ms" ,
389- } ) ;
390- const queriesWaitTimeMean = meter . createObservableGauge ( "db.client.queries.wait_time.mean" , {
391- description : "Average wait time for a connection" ,
392- unit : "ms" ,
393- } ) ;
394-
395- const queriesDurationCount = meter . createObservableGauge ( "db.client.queries.duration.count" , {
396- description : "Number of query duration observations" ,
397- unit : "observations" ,
398- } ) ;
399- const queriesDurationSum = meter . createObservableGauge ( "db.client.queries.duration.sum" , {
400- description : "Total query duration across all observations" ,
401- unit : "ms" ,
402- } ) ;
403- const queriesDurationMean = meter . createObservableGauge ( "db.client.queries.duration.mean" , {
404- description : "Average duration of Prisma Client queries" ,
405- unit : "ms" ,
406- } ) ;
407-
408- const datasourceQueriesDurationCount = meter . createObservableGauge (
409- "db.datasource.queries.duration.count" ,
410- {
411- description : "Number of datasource query duration observations" ,
412- unit : "observations" ,
413- }
414- ) ;
415- const datasourceQueriesDurationSum = meter . createObservableGauge (
416- "db.datasource.queries.duration.sum" ,
417- {
418- description : "Total datasource query duration across all observations" ,
419- unit : "ms" ,
420- }
421- ) ;
422- const datasourceQueriesDurationMean = meter . createObservableGauge (
423- "db.datasource.queries.duration.mean" ,
424- {
425- description : "Average duration of datasource queries" ,
426- unit : "ms" ,
427- }
428- ) ;
429-
430- // Single helper so we hit Prisma only once per scrape ---------------------
431- async function readPrismaMetrics ( ) {
432- const metrics = await prisma . $metrics . json ( ) ;
433-
434- // Extract counter values
435- const counters : Record < string , number > = { } ;
436- for ( const counter of metrics . counters ) {
437- counters [ counter . key ] = counter . value ;
438- }
439-
440- // Extract gauge values
441- const gauges : Record < string , number > = { } ;
442- for ( const gauge of metrics . gauges ) {
443- gauges [ gauge . key ] = gauge . value ;
444- }
445-
446- // Extract histogram values
447- const histograms : Record < string , Prisma . MetricHistogram > = { } ;
448- for ( const histogram of metrics . histograms ) {
449- histograms [ histogram . key ] = histogram . value ;
450- }
451-
452- return {
453- counters : {
454- queriesTotal : counters [ "prisma_client_queries_total" ] ?? 0 ,
455- datasourceQueriesTotal : counters [ "prisma_datasource_queries_total" ] ?? 0 ,
456- connectionsOpenedTotal : counters [ "prisma_pool_connections_opened_total" ] ?? 0 ,
457- connectionsClosedTotal : counters [ "prisma_pool_connections_closed_total" ] ?? 0 ,
458- } ,
459- gauges : {
460- queriesActive : gauges [ "prisma_client_queries_active" ] ?? 0 ,
461- queriesWait : gauges [ "prisma_client_queries_wait" ] ?? 0 ,
462- connectionsOpen : gauges [ "prisma_pool_connections_open" ] ?? 0 ,
463- connectionsBusy : gauges [ "prisma_pool_connections_busy" ] ?? 0 ,
464- connectionsIdle : gauges [ "prisma_pool_connections_idle" ] ?? 0 ,
465- } ,
466- histograms : {
467- queriesWait : histograms [ "prisma_client_queries_wait_histogram_ms" ] ,
468- queriesDuration : histograms [ "prisma_client_queries_duration_histogram_ms" ] ,
469- datasourceQueriesDuration : histograms [ "prisma_datasource_queries_duration_histogram_ms" ] ,
470- } ,
471- } ;
472- }
473-
474- meter . addBatchObservableCallback (
475- async ( res ) => {
476- const { counters, gauges, histograms } = await readPrismaMetrics ( ) ;
477-
478- // Observe counters
479- res . observe ( queriesTotal , counters . queriesTotal ) ;
480- res . observe ( datasourceQueriesTotal , counters . datasourceQueriesTotal ) ;
481- res . observe ( connectionsOpenedTotal , counters . connectionsOpenedTotal ) ;
482- res . observe ( connectionsClosedTotal , counters . connectionsClosedTotal ) ;
483-
484- // Observe gauges
485- res . observe ( queriesActive , gauges . queriesActive ) ;
486- res . observe ( queriesWait , gauges . queriesWait ) ;
487- res . observe ( totalGauge , gauges . connectionsOpen ) ;
488- res . observe ( busyGauge , gauges . connectionsBusy ) ;
489- res . observe ( freeGauge , gauges . connectionsIdle ) ;
490-
491- // Observe histogram statistics as gauges
492- if ( histograms . queriesWait ) {
493- res . observe ( queriesWaitTimeCount , histograms . queriesWait . count ) ;
494- res . observe ( queriesWaitTimeSum , histograms . queriesWait . sum ) ;
495- res . observe (
496- queriesWaitTimeMean ,
497- histograms . queriesWait . count > 0
498- ? histograms . queriesWait . sum / histograms . queriesWait . count
499- : 0
500- ) ;
501- }
502-
503- if ( histograms . queriesDuration ) {
504- res . observe ( queriesDurationCount , histograms . queriesDuration . count ) ;
505- res . observe ( queriesDurationSum , histograms . queriesDuration . sum ) ;
506- res . observe (
507- queriesDurationMean ,
508- histograms . queriesDuration . count > 0
509- ? histograms . queriesDuration . sum / histograms . queriesDuration . count
510- : 0
511- ) ;
512- }
513-
514- if ( histograms . datasourceQueriesDuration ) {
515- res . observe ( datasourceQueriesDurationCount , histograms . datasourceQueriesDuration . count ) ;
516- res . observe ( datasourceQueriesDurationSum , histograms . datasourceQueriesDuration . sum ) ;
517- res . observe (
518- datasourceQueriesDurationMean ,
519- histograms . datasourceQueriesDuration . count > 0
520- ? histograms . datasourceQueriesDuration . sum / histograms . datasourceQueriesDuration . count
521- : 0
522- ) ;
523- }
524- } ,
525- [
526- queriesTotal ,
527- datasourceQueriesTotal ,
528- connectionsOpenedTotal ,
529- connectionsClosedTotal ,
530- queriesActive ,
531- queriesWait ,
532- totalGauge ,
533- busyGauge ,
534- freeGauge ,
535- queriesWaitTimeCount ,
536- queriesWaitTimeSum ,
537- queriesWaitTimeMean ,
538- queriesDurationCount ,
539- queriesDurationSum ,
540- queriesDurationMean ,
541- datasourceQueriesDurationCount ,
542- datasourceQueriesDurationSum ,
543- datasourceQueriesDurationMean ,
544- ]
545- ) ;
546- }
547-
548337function configureNodejsMetrics ( { meter } : { meter : Meter } ) {
549338 if ( ! env . INTERNAL_OTEL_NODEJS_METRICS_ENABLED ) {
550339 return ;
0 commit comments