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}