diff options
Diffstat (limited to 'u/server/request.ts')
-rw-r--r-- | u/server/request.ts | 64 |
1 files changed, 47 insertions, 17 deletions
diff --git a/u/server/request.ts b/u/server/request.ts index 6c4e602..7aa9917 100644 --- a/u/server/request.ts +++ b/u/server/request.ts @@ -1,27 +1,57 @@ -import { ITrace } from "@emprespresso/pengueno"; -import { ITraceWith } from "../trace/mod.ts"; +import { LogMetricTraceable } from "@emprespresso/pengueno"; -class RequestTraceWith { +const greetings = [ + "hewwo :D", + "hiya cutie (✿◠‿◠)", + "boop! ૮・ᴥ・ა", + "sending virtual hugs! (づ。◕‿‿◕。)づ", + "stay pawsitive ₍^..^₎⟆", + "⋆。‧˚❆🐧❆˚‧。⋆", +]; +const penguenoGreeting = () => + greetings[Math.floor(Math.random() * greetings.length)]; + +export class PenguenoRequest extends Request { private constructor( + _input: URL, + _requestInit: RequestInit, public readonly id: string, - public readonly received: Date, + public readonly at: Date, ) { + super(_input, _requestInit); } - public static from() { - const id = crypto.randomUUID(); - const received = new Date(); - return new RequestTraceWith(id, received); - } -} -export class RequestTrace implements ITrace<RequestTraceWith> { - public readonly requestTrace: RequestTraceWith; - constructor(reques); + public baseResponseHeaders(): Record<string, string> { + const ServerRequestTime = this.at.getTime(); + const ServerResponseTime = Date.now(); + const DeltaTime = ServerResponseTime - ServerRequestTime; + const RequestId = this.id; - public addTrace(_t: ITraceWith<RequestTraceWith>) { - return; + return Object.entries({ + RequestId, + ServerRequestTime, + ServerResponseTime, + DeltaTime, + Hai: penguenoGreeting(), + }).reduce((acc, [key, val]) => ({ ...acc, [key]: (val.toString()) }), {}); } - addTrace: Mapper<ITraceWith<TraceWith>, ITrace<TraceWith>>; - trace: SideEffect<ITraceWith<TraceWith>>; + public static from( + request: Request, + ): LogMetricTraceable<PenguenoRequest> { + const id = crypto.randomUUID(); + const url = new URL(request.url); + const { pathname } = url; + const traceSupplier = () => `[${id} <- ${request.method}'d @ ${pathname}]`; + return LogMetricTraceable + .from( + new PenguenoRequest( + url, + { ...request }, + id, + new Date(), + ), + ) + .bimap((_request) => [_request.get(), traceSupplier]); + } } |