diff --git a/lerna.json b/lerna.json index fb2212e4..14361b64 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,7 @@ { "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useWorkspaces": true, - "version": "4.0.1", + "version": "4.1.0", "packages": [ "packages/*" ], diff --git a/packages/auth/package.json b/packages/auth/package.json index 5ec70a08..e9e7d6a4 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-nestjs-auth", - "version": "4.0.1", + "version": "4.1.0", "description": "Multiversx SDK Nestjs auth package", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -38,9 +38,9 @@ "jsonwebtoken": "^9.0.0" }, "peerDependencies": { - "@multiversx/sdk-nestjs-cache": "^4.0.0", - "@multiversx/sdk-nestjs-common": "^4.0.0", - "@multiversx/sdk-nestjs-monitoring": "^4.0.0", + "@multiversx/sdk-nestjs-cache": "^4.1.0", + "@multiversx/sdk-nestjs-common": "^4.1.0", + "@multiversx/sdk-nestjs-monitoring": "^4.1.0", "@nestjs/common": "^10.x" }, "publishConfig": { diff --git a/packages/cache/package.json b/packages/cache/package.json index 5d99207a..9f56ac43 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-nestjs-cache", - "version": "4.0.1", + "version": "4.1.0", "description": "Multiversx SDK Nestjs cache package", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -40,9 +40,9 @@ "uuid": "^8.3.2" }, "peerDependencies": { - "@multiversx/sdk-nestjs-common": "^4.0.0", - "@multiversx/sdk-nestjs-monitoring": "^4.0.0", - "@multiversx/sdk-nestjs-redis": "^4.0.0", + "@multiversx/sdk-nestjs-common": "^4.1.0", + "@multiversx/sdk-nestjs-monitoring": "^4.1.0", + "@multiversx/sdk-nestjs-redis": "^4.1.0", "@nestjs/common": "^10.x", "@nestjs/core": "^10.x" }, diff --git a/packages/common/package.json b/packages/common/package.json index 0556906c..2330af2d 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-nestjs-common", - "version": "4.0.1", + "version": "4.1.0", "description": "Multiversx SDK Nestjs common package", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -40,7 +40,7 @@ "winston": "^3.7.2" }, "peerDependencies": { - "@multiversx/sdk-nestjs-monitoring": "^4.0.0", + "@multiversx/sdk-nestjs-monitoring": "^4.1.0", "@nestjs/common": "^10.x", "@nestjs/config": "^3.x", "@nestjs/core": "^10.x", diff --git a/packages/elastic/package.json b/packages/elastic/package.json index a757be0c..3cd477f7 100644 --- a/packages/elastic/package.json +++ b/packages/elastic/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-nestjs-elastic", - "version": "4.0.1", + "version": "4.1.0", "description": "Multiversx SDK Nestjs elastic package", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -31,7 +31,7 @@ "typescript": "^4.3.5" }, "peerDependencies": { - "@multiversx/sdk-nestjs-http": "^4.0.0", + "@multiversx/sdk-nestjs-http": "^4.1.0", "@nestjs/common": "^10.x" }, "publishConfig": { diff --git a/packages/http/package.json b/packages/http/package.json index 6c0df92c..73514bc4 100644 --- a/packages/http/package.json +++ b/packages/http/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-nestjs-http", - "version": "4.0.1", + "version": "4.1.0", "description": "Multiversx SDK Nestjs http package", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -38,8 +38,8 @@ "axios": "^1.7.4" }, "peerDependencies": { - "@multiversx/sdk-nestjs-common": "^4.0.0", - "@multiversx/sdk-nestjs-monitoring": "^4.0.0", + "@multiversx/sdk-nestjs-common": "^4.1.0", + "@multiversx/sdk-nestjs-monitoring": "^4.1.0", "@nestjs/common": "^10.x", "@nestjs/core": "^10.x" }, diff --git a/packages/monitoring/package.json b/packages/monitoring/package.json index 03d04ee6..19a3fc90 100644 --- a/packages/monitoring/package.json +++ b/packages/monitoring/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-nestjs-monitoring", - "version": "4.0.1", + "version": "4.1.0", "description": "Multiversx SDK Nestjs monitoring package", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/monitoring/src/interceptors/entities/index.ts b/packages/monitoring/src/interceptors/entities/index.ts new file mode 100644 index 00000000..d71df480 --- /dev/null +++ b/packages/monitoring/src/interceptors/entities/index.ts @@ -0,0 +1,2 @@ +export * from './logging.interceptor.context'; +export * from './request.cpu.time.interceptor.context'; diff --git a/packages/monitoring/src/interceptors/entities/logging.interceptor.context.ts b/packages/monitoring/src/interceptors/entities/logging.interceptor.context.ts new file mode 100644 index 00000000..169882db --- /dev/null +++ b/packages/monitoring/src/interceptors/entities/logging.interceptor.context.ts @@ -0,0 +1,13 @@ +import { ExecutionContext } from "@nestjs/common"; + +export class LoggingInterceptorContext { + apiFunction: string = ''; + durationMs: number = 0; + origin: string = ''; + statusCode: number = 0; + context!: ExecutionContext; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/packages/monitoring/src/interceptors/entities/request.cpu.time.interceptor.context.ts b/packages/monitoring/src/interceptors/entities/request.cpu.time.interceptor.context.ts new file mode 100644 index 00000000..fa39ef7a --- /dev/null +++ b/packages/monitoring/src/interceptors/entities/request.cpu.time.interceptor.context.ts @@ -0,0 +1,11 @@ +import { ExecutionContext } from '@nestjs/common'; + +export class RequestCpuTimeInterceptorContext { + apiFunction: string = ''; + durationMs: number = 0; + context!: ExecutionContext; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/packages/monitoring/src/interceptors/index.ts b/packages/monitoring/src/interceptors/index.ts index 380f3a99..fed1c0d0 100644 --- a/packages/monitoring/src/interceptors/index.ts +++ b/packages/monitoring/src/interceptors/index.ts @@ -1,3 +1,4 @@ +export * from './entities'; export * from './log.requests.interceptor'; export * from './logging.interceptor'; export * from './request.cpu.time.interceptor'; diff --git a/packages/monitoring/src/interceptors/logging.interceptor.ts b/packages/monitoring/src/interceptors/logging.interceptor.ts index e3db7d91..1aac79a9 100644 --- a/packages/monitoring/src/interceptors/logging.interceptor.ts +++ b/packages/monitoring/src/interceptors/logging.interceptor.ts @@ -3,11 +3,13 @@ import { Observable, throwError } from "rxjs"; import { catchError, tap } from "rxjs/operators"; import { MetricsService } from "../metrics"; import { PerformanceProfiler } from "../profilers/performance.profiler"; +import { LoggingInterceptorContext } from "./entities/logging.interceptor.context"; @Injectable() export class LoggingInterceptor implements NestInterceptor { constructor( private readonly metricsService: MetricsService, + private readonly onRequest?: (context: LoggingInterceptorContext) => void, ) { } intercept(context: ExecutionContext, next: CallHandler): Observable { @@ -38,6 +40,16 @@ export class LoggingInterceptor implements NestInterceptor { const res = http.getResponse(); this.metricsService.setApiCall(apiFunction, origin, res.statusCode, profiler.duration); + + if (this.onRequest) { + this.onRequest(new LoggingInterceptorContext({ + apiFunction, + durationMs: profiler.duration, + origin, + statusCode: res.statusCode, + context, + })); + } }), catchError(err => { profiler.stop(); @@ -45,6 +57,16 @@ export class LoggingInterceptor implements NestInterceptor { const statusCode = err.status ?? HttpStatus.INTERNAL_SERVER_ERROR; this.metricsService.setApiCall(apiFunction, origin, statusCode, profiler.duration); + if (this.onRequest) { + this.onRequest(new LoggingInterceptorContext({ + apiFunction, + durationMs: profiler.duration, + origin, + statusCode, + context, + })); + } + return throwError(() => err); }) ); diff --git a/packages/monitoring/src/interceptors/request.cpu.time.interceptor.ts b/packages/monitoring/src/interceptors/request.cpu.time.interceptor.ts index 208235f8..184dab7e 100644 --- a/packages/monitoring/src/interceptors/request.cpu.time.interceptor.ts +++ b/packages/monitoring/src/interceptors/request.cpu.time.interceptor.ts @@ -3,11 +3,13 @@ import { Observable, throwError } from "rxjs"; import { catchError, tap } from 'rxjs/operators'; import { MetricsService } from '../metrics'; import { CpuProfiler } from "../profilers/cpu.profiler"; +import { RequestCpuTimeInterceptorContext } from "./entities"; @Injectable() export class RequestCpuTimeInterceptor implements NestInterceptor { constructor( - private readonly metricsService: MetricsService + private readonly metricsService: MetricsService, + private readonly onRequest?: (context: RequestCpuTimeInterceptorContext) => void, ) { } intercept(context: ExecutionContext, next: CallHandler): Observable { @@ -29,6 +31,14 @@ export class RequestCpuTimeInterceptor implements NestInterceptor { const duration = profiler.stop(); this.metricsService.setApiCpuTime(apiFunction, duration); + if (this.onRequest) { + this.onRequest(new RequestCpuTimeInterceptorContext({ + apiFunction, + durationMs: duration, + context, + })); + } + if (!request.res.headersSent) { request.res.set('X-Request-Cpu-Time', duration); } @@ -37,10 +47,17 @@ export class RequestCpuTimeInterceptor implements NestInterceptor { const duration = profiler.stop(); this.metricsService.setApiCpuTime(apiFunction, duration); + if (this.onRequest) { + this.onRequest(new RequestCpuTimeInterceptorContext({ + apiFunction, + durationMs: duration, + context, + })); + } + if (!request.res.headersSent) { request.res.set('X-Request-Cpu-Time', duration); } - return throwError(() => err); }) ); diff --git a/packages/rabbitmq/package.json b/packages/rabbitmq/package.json index 69e0031b..3b0a2e36 100644 --- a/packages/rabbitmq/package.json +++ b/packages/rabbitmq/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-nestjs-rabbitmq", - "version": "4.0.1", + "version": "4.1.0", "description": "Multiversx SDK Nestjs rabbitmq client package", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -37,7 +37,7 @@ "uuid": "^8.3.2" }, "peerDependencies": { - "@multiversx/sdk-nestjs-common": "^4.0.0", + "@multiversx/sdk-nestjs-common": "^4.1.0", "@nestjs/common": "^10.x" }, "publishConfig": { diff --git a/packages/redis/package.json b/packages/redis/package.json index d5f6e4bc..4673161a 100644 --- a/packages/redis/package.json +++ b/packages/redis/package.json @@ -1,6 +1,6 @@ { "name": "@multiversx/sdk-nestjs-redis", - "version": "4.0.1", + "version": "4.1.0", "description": "Multiversx SDK Nestjs redis client package", "main": "lib/index.js", "types": "lib/index.d.ts",