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}