Skip to content

Commit

Permalink
middleware and midaz-id implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
tpmpb committed Dec 4, 2024
1 parent 1cedb5c commit 5b27d40
Show file tree
Hide file tree
Showing 8 changed files with 87 additions and 22 deletions.
2 changes: 1 addition & 1 deletion next.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ const nextConfig = {
return config
},
experimental: {
serverComponentsExternalPackages: ['pino']
serverComponentsExternalPackages: ['pino', 'pino-pretty']
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,20 @@ export async function DELETE(
{ params }: { params: { id: string; ledgerId: string; portfolioId: string } }
) {
const { id: organizationId, ledgerId, portfolioId } = params
const midazId = request.headers.get('X-Midaz-Id')
return RequestContextManager.runWithContext(
request.url,
request.method,
{
organizationId,
ledgerId,
portfolioId,
deletedAt: new Date().toISOString()
deletedAt: new Date().toISOString(),
midazId
},
async () => {
console.log('midazId delete', midazId)

try {
await deletePortfolioUseCase.execute(
organizationId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,15 @@ export async function POST(
{ params }: { params: { id: string; ledgerId: string } }
) {
const { id: organizationId, ledgerId } = params

const midazId = request.headers.get('X-Midaz-Id')
return RequestContextManager.runWithContext(
request.url,
request.method,
{ organizationId, ledgerId },
{ organizationId, ledgerId, midazId },
async () => {
try {
console.log('midazId post', midazId)
console.log('request readers', request.headers)
const body = await request.json()
const portfolio = await createPortfolioUseCase.execute(
organizationId,
Expand Down
80 changes: 68 additions & 12 deletions src/lib/logger/pino-logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import pino, { Logger, LoggerOptions } from 'pino'
import { randomUUID } from 'crypto'
import { LogContext, LogEntry, LogMetadata } from './types'
import { NextRequest } from 'next/server'

export class PinoLogger {
private static instance: PinoLogger
Expand Down Expand Up @@ -48,40 +49,95 @@ export class PinoLogger {
level: LogEntry['level'],
message: string,
metadata: LogMetadata,
context: LogContext
context: LogContext,
request?: NextRequest
): LogEntry {
return {
level,
message,
timestamp: new Date().toISOString(),
traceId: metadata.traceId || randomUUID(),
metadata,
context
}
}

info(message: string, metadata: LogMetadata = {}, context: LogContext) {
const logEntry = this.createLogEntry('INFO', message, metadata, context)
info(
message: string,
metadata: LogMetadata = {},
context: LogContext,
request?: NextRequest
) {
const logEntry = this.createLogEntry(
'INFO',
message,
metadata,
context,
request
)
this.logger.info(logEntry)
}

error(message: string, metadata: LogMetadata = {}, context: LogContext) {
const logEntry = this.createLogEntry('ERROR', message, metadata, context)
error(
message: string,
metadata: LogMetadata = {},
context: LogContext,
request?: NextRequest
) {
const logEntry = this.createLogEntry(
'ERROR',
message,
metadata,
context,
request
)
this.logger.error(logEntry)
}

warn(message: string, metadata: LogMetadata = {}, context: LogContext) {
const logEntry = this.createLogEntry('WARN', message, metadata, context)
warn(
message: string,
metadata: LogMetadata = {},
context: LogContext,
request?: NextRequest
) {
const logEntry = this.createLogEntry(
'WARN',
message,
metadata,
context,
request
)
this.logger.warn(logEntry)
}

debug(message: string, metadata: LogMetadata = {}, context: LogContext) {
const logEntry = this.createLogEntry('DEBUG', message, metadata, context)
debug(
message: string,
metadata: LogMetadata = {},
context: LogContext,
request?: NextRequest
) {
const logEntry = this.createLogEntry(
'DEBUG',
message,
metadata,
context,
request
)
this.logger.debug(logEntry)
}

audit(message: string, metadata: LogMetadata = {}, context: LogContext) {
const logEntry = this.createLogEntry('AUDIT', message, metadata, context)
audit(
message: string,
metadata: LogMetadata = {},
context: LogContext,
request?: NextRequest
) {
const logEntry = this.createLogEntry(
'AUDIT',
message,
metadata,
context,
request
)
this.logger.info(logEntry)
}
}
1 change: 1 addition & 0 deletions src/lib/logger/request-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export class RequestContextManager {
initialMetadata: Record<string, any>,
fn: () => Promise<T>
): Promise<T> {
console.log('initialMetadata', initialMetadata)
const context: RequestContext = {
requestId: crypto.randomUUID(),
startTime: Date.now(),
Expand Down
2 changes: 1 addition & 1 deletion src/lib/logger/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export interface LogEntry {
level: 'INFO' | 'ERROR' | 'WARN' | 'DEBUG' | 'AUDIT'
message: string
timestamp: string
traceId: string
midazId?: string
metadata: LogMetadata
context: LogContext
}
8 changes: 5 additions & 3 deletions src/middleware/middleware.ts → src/middleware.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { apiLoggerMiddleware } from './api-logger.middleware'
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

import { apiLoggerMiddleware } from './middleware/api-logger.middleware'
export async function middleware(request: NextRequest) {
if (request.nextUrl.pathname.startsWith('/api')) {
return apiLoggerMiddleware(request, () =>
Expand All @@ -13,5 +12,8 @@ export async function middleware(request: NextRequest) {
}

export const config = {
matcher: ['/((?!_next/static|_next/image|favicon.ico|public/).*)']
matcher: [
'/api/:path*',
'/((?!_next/static|_next/image|favicon.ico|public/.*).*)'
]
}
4 changes: 2 additions & 2 deletions src/middleware/api-logger.middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ export async function apiLoggerMiddleware(
...requestMetadata
}
})

response.headers.set('X-Request-Id', requestId)
console.log('reponse api-logger middleware', response)
response.headers.set('X-Midaz-Id', requestId)
return response
} catch (error) {
const duration = Date.now() - startTime
Expand Down

0 comments on commit 5b27d40

Please sign in to comment.