11import { Injectable , OnModuleDestroy , OnModuleInit } from '@nestjs/common' ;
22import { MeterProvider } from '@opentelemetry/sdk-metrics' ;
33import { Counter } from '@opentelemetry/api-metrics' ;
4- import { PrismaClient , Prisma , PrismaPromise } from '@prisma/client' ;
4+ import { Prisma , PrismaClient , PrismaPromise } from '@prisma/client' ;
55import { ConfigService } from '../configs/config.service' ;
66import { LogService } from '../log/log.service' ;
77import { TraceService } from '../trace/trace.service' ;
@@ -14,7 +14,6 @@ export { default as DatabaseModel } from '@prisma/client';
1414
1515@Injectable ( )
1616export class DatabaseService extends PrismaClient implements OnModuleInit , OnModuleDestroy {
17- private prisma : PrismaClient ;
1817 //private readonly queriesCounter: Counter;
1918 //private readonly pendingQueriesCounter: UpDownCounter;
2019
@@ -23,10 +22,7 @@ export class DatabaseService extends PrismaClient implements OnModuleInit, OnMod
2322 private readonly configService : ConfigService ,
2423 private readonly traceService : TraceService //private readonly meter,
2524 ) {
26- super ( ) ;
27- logger . info ( `Using Prisma v${ Prisma . prismaVersion . client } ${ configService . get ( 'DATABASE_URL' ) } ` ) ;
28-
29- this . prisma = new PrismaClient ( {
25+ super ( {
3026 datasources : {
3127 db : {
3228 url : configService . get ( 'DATABASE_URL' ) ,
@@ -39,6 +35,7 @@ export class DatabaseService extends PrismaClient implements OnModuleInit, OnMod
3935 // },
4036 // ]
4137 } ) ;
38+ logger . info ( `Using Prisma v${ Prisma . prismaVersion . client } ${ configService . get ( 'DATABASE_URL' ) } ` ) ;
4239
4340 /* this.meter = meterProvider.getMeter('example-exporter-collector');
4441
@@ -55,6 +52,18 @@ export class DatabaseService extends PrismaClient implements OnModuleInit, OnMod
5552 }
5653
5754 async onModuleInit ( ) : Promise < void > {
55+ this . $use ( async ( params : any , next ) => {
56+ const span = this . traceService . startSpan ( `prisma: ${ params . model } .${ params . action } ` ) ;
57+ //this.queriesCounter.add(1);
58+ // this.pendingQueriesCounter.add(1);
59+ const result = await next ( params ) ;
60+ span . end ( ) ;
61+
62+ // this.pendingQueriesCounter.add(-1);
63+
64+ return result ;
65+ } ) ;
66+
5867 const prismaEngine = ( this as any ) . _engineConfig ;
5968
6069 await ( this as any ) . $connect ( ) ;
@@ -68,19 +77,8 @@ export class DatabaseService extends PrismaClient implements OnModuleInit, OnMod
6877 // console.log(e)
6978 // })
7079
71- this . prisma . $use ( async ( params : any , next ) => {
72- //this.queriesCounter.add(1);
73- // this.pendingQueriesCounter.add(1);
74-
75- const span = this . traceService . startSpan ( '$query' ) ;
76- span . setAttributes ( { model : params . model , action : params . action } ) ;
77- const result = await next ( params ) ;
78- span . end ( ) ;
79-
80- // this.pendingQueriesCounter.add(-1);
81-
82- return result ;
83- } ) ;
80+ // console.log(e)
81+ // })
8482 }
8583
8684 async transaction < P extends PrismaPromise < any > [ ] > ( arg : [ ...P ] ) {
@@ -92,7 +90,7 @@ export class DatabaseService extends PrismaClient implements OnModuleInit, OnMod
9290 }
9391
9492 async onModuleDestroy ( ) : Promise < void > {
95- await this . $disconnect ( ) ;
93+ await super . $disconnect ( ) ;
9694
9795 this . logService . debug ( 'Disconnected from Postgres instance' ) ;
9896 }
0 commit comments