summaryrefslogtreecommitdiff
path: root/u/trace/trace.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/trace/trace.ts
parentef51b25e4388cbdf3a27e23d9f1fa381ae20a5ad (diff)
downloadci-9cf3fc0259730b7dcf47b3ab4a04369e39fb4614.tar.gz
ci-9cf3fc0259730b7dcf47b3ab4a04369e39fb4614.zip
finish up pengueno
Diffstat (limited to 'u/trace/trace.ts')
-rw-r--r--u/trace/trace.ts94
1 files changed, 65 insertions, 29 deletions
diff --git a/u/trace/trace.ts b/u/trace/trace.ts
index 1d3d2d8..72d4eef 100644
--- a/u/trace/trace.ts
+++ b/u/trace/trace.ts
@@ -1,46 +1,82 @@
import {
- type Callable,
- type ITraceableMapper,
- type ITraceableTuple,
- LoggerImpl,
+ isMetricsTraceSupplier,
+ type ITrace,
+ type ITraceWith,
LogTrace,
type LogTraceSupplier,
+ MetricsTrace,
+ type MetricsTraceSupplier,
+ type MetricValue,
TraceableImpl,
} from "@emprespresso/pengueno";
export class LogTraceable<T> extends TraceableImpl<T, LogTraceSupplier> {
+ public static LogTrace = new LogTrace();
static from<T>(t: T) {
- return new LogTraceable(t, LogTrace(LoggerImpl));
+ return new LogTraceable(t, LogTraceable.LogTrace);
}
}
-export class TraceUtil {
- static withFunctionTrace<F extends Callable, T, Trace>(
- f: F,
- ): ITraceableMapper<
- T,
- ITraceableTuple<T, Trace>,
- Trace
- > {
- return (t) => [t.item, `[${f.name}]`];
+const getEmbeddedMetricConsumer =
+ (logTrace: LogTrace) => (metrics: Array<MetricValue>) =>
+ logTrace.addTrace("<metrics>").trace(
+ JSON.stringify(metrics, null, 2) + "</metrics>",
+ );
+export class EmbeddedMetricsTraceable<T>
+ extends TraceableImpl<T, MetricsTraceSupplier> {
+ public static MetricsTrace = new MetricsTrace(
+ getEmbeddedMetricConsumer(LogTraceable.LogTrace),
+ );
+
+ static from<T>(t: T) {
+ return new EmbeddedMetricsTraceable(
+ t,
+ EmbeddedMetricsTraceable.MetricsTrace,
+ );
}
+}
- static withClassTrace<C extends object, T, Trace>(
- c: C,
- ): ITraceableMapper<
- T,
- ITraceableTuple<T, Trace>,
- Trace
- > {
- return (t) => [t.item, `[${c.constructor.name}]`];
+export type LogMetricTraceSupplier = ITraceWith<
+ LogTraceSupplier | MetricsTraceSupplier
+>;
+export class LogMetricTrace implements ITrace<LogMetricTraceSupplier> {
+ constructor(
+ private readonly logTrace: ITrace<LogTraceSupplier>,
+ private readonly metricsTrace: ITrace<MetricsTraceSupplier>,
+ ) {}
+
+ public addTrace(
+ trace: LogTraceSupplier | MetricsTraceSupplier,
+ ): LogMetricTrace {
+ if (isMetricsTraceSupplier(trace)) {
+ this.metricsTrace.addTrace(trace);
+ return this;
+ }
+ this.logTrace.addTrace(trace);
+ return this;
}
- static promiseify<T, U, Trace>(
- mapper: ITraceableMapper<T, U, Trace>,
- ): ITraceableMapper<Promise<T>, Promise<U>, Trace> {
- return (traceablePromise) =>
- traceablePromise.flatMapAsync(async (t) =>
- t.move(await t.item).map(mapper)
- ).item;
+ public trace(trace: LogTraceSupplier | MetricsTraceSupplier) {
+ if (isMetricsTraceSupplier(trace)) {
+ this.metricsTrace.trace(trace);
+ return this;
+ }
+ this.logTrace.trace(trace);
+ return this;
+ }
+}
+
+export class LogMetricTraceable<T>
+ extends TraceableImpl<T, MetricsTraceSupplier | LogTraceSupplier> {
+ public static LogMetricTrace = new LogMetricTrace(
+ LogTraceable.LogTrace,
+ EmbeddedMetricsTraceable.MetricsTrace,
+ );
+
+ static from<T>(t: T) {
+ return new LogMetricTraceable(
+ t,
+ LogMetricTraceable.LogMetricTrace,
+ );
}
}