Monorepo for wisp.place. A static site hosting service built on top of the AT Protocol. wisp.place
1import { metricsCollector, logCollector } from '../core' 2 3/** 4 * Elysia middleware for observability 5 * Tracks request metrics and logs errors 6 */ 7export function observabilityMiddleware(service: string) { 8 return { 9 beforeHandle: ({ request }: any) => { 10 // Store start time on request object 11 (request as any).__startTime = Date.now() 12 }, 13 afterHandle: ({ request, set }: any) => { 14 const duration = Date.now() - ((request as any).__startTime || Date.now()) 15 const url = new URL(request.url) 16 17 metricsCollector.recordRequest( 18 url.pathname, 19 request.method, 20 set.status || 200, 21 duration, 22 service 23 ) 24 }, 25 onError: ({ request, error, set }: any) => { 26 const duration = Date.now() - ((request as any).__startTime || Date.now()) 27 const url = new URL(request.url) 28 29 metricsCollector.recordRequest( 30 url.pathname, 31 request.method, 32 set.status || 500, 33 duration, 34 service 35 ) 36 37 // Don't log 404 errors 38 const statusCode = set.status || 500 39 if (statusCode !== 404) { 40 logCollector.error( 41 `Request failed: ${request.method} ${url.pathname}`, 42 service, 43 error, 44 { statusCode } 45 ) 46 } 47 } 48 } 49}