summaryrefslogtreecommitdiff
path: root/u/server/request.ts
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2025-05-18 12:24:09 -0700
committerElizabeth Alexander Hunt <me@liz.coffee>2025-05-18 12:24:09 -0700
commit9cf3fc0259730b7dcf47b3ab4a04369e39fb4614 (patch)
treea96d39b4f28d38e327376cbef7ba60dbaa95e111 /u/server/request.ts
parentef51b25e4388cbdf3a27e23d9f1fa381ae20a5ad (diff)
downloadci-9cf3fc0259730b7dcf47b3ab4a04369e39fb4614.tar.gz
ci-9cf3fc0259730b7dcf47b3ab4a04369e39fb4614.zip
finish up pengueno
Diffstat (limited to 'u/server/request.ts')
-rw-r--r--u/server/request.ts64
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]);
+ }
}