Monorepo for wisp.place. A static site hosting service built on top of the AT Protocol. wisp.place
1import type { Context } from 'hono' 2import { metricsCollector, logCollector } from '../core' 3 4/** 5 * Hono middleware for observability 6 * Tracks request metrics 7 */ 8export function observabilityMiddleware(service: string) { 9 return async (c: Context, next: () => Promise<void>) => { 10 const startTime = Date.now() 11 12 await next() 13 14 const duration = Date.now() - startTime 15 const { pathname } = new URL(c.req.url) 16 17 metricsCollector.recordRequest( 18 pathname, 19 c.req.method, 20 c.res.status, 21 duration, 22 service 23 ) 24 } 25} 26 27/** 28 * Hono error handler for observability 29 * Logs errors with context 30 */ 31export function observabilityErrorHandler(service: string) { 32 return (err: Error, c: Context) => { 33 const { pathname } = new URL(c.req.url) 34 35 logCollector.error( 36 `Request failed: ${c.req.method} ${pathname}`, 37 service, 38 err, 39 { statusCode: c.res.status || 500 } 40 ) 41 42 return c.text('Internal Server Error', 500) 43 } 44}