From 9970036d203ba2d0a46b35ba6fad21d49441cdd4 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sun, 27 Jul 2025 17:03:10 -0700 Subject: hai --- lib/trace/trace.ts | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 lib/trace/trace.ts (limited to 'lib/trace/trace.ts') diff --git a/lib/trace/trace.ts b/lib/trace/trace.ts new file mode 100644 index 0000000..ab7e841 --- /dev/null +++ b/lib/trace/trace.ts @@ -0,0 +1,77 @@ +import { + isMetricsTraceSupplier, + type ITrace, + type ITraceable, + type ITraceWith, + LogLevel, + LogTrace, + type LogTraceSupplier, + MetricsTrace, + type MetricsTraceSupplier, + type MetricValue, + TraceableImpl, +} from '.'; + +export class LogTraceable extends TraceableImpl { + public static LogTrace = new LogTrace(); + static of(t: T) { + return new LogTraceable(t, LogTraceable.LogTrace); + } +} + +const getEmbeddedMetricConsumer = (logTrace: ITrace) => (metrics: Array) => { + if (metrics.length === 0) return; + logTrace.traceScope(LogLevel.SYS).trace(`Metrics = ${JSON.stringify(metrics)}`); +}; + +export class EmbeddedMetricsTraceable extends TraceableImpl { + public static MetricsTrace = new MetricsTrace(getEmbeddedMetricConsumer(LogTraceable.LogTrace)); + + static of(t: T, metricsTrace = EmbeddedMetricsTraceable.MetricsTrace) { + return new EmbeddedMetricsTraceable(t, metricsTrace); + } +} + +export type LogMetricTraceSupplier = ITraceWith; +export class LogMetricTrace implements ITrace { + constructor( + private logTrace: ITrace, + private metricsTrace: ITrace, + ) {} + + // public traceScope(trace: LogTraceSupplier | MetricsTraceSupplier): LogMetricTrace { + // if (isMetricsTraceSupplier(trace)) { + // this.metricsTrace = this.metricsTrace.traceScope(trace); + // return this; + // } + // this.logTrace = this.logTrace.traceScope(trace); + // return this; + // } + public traceScope(trace: LogTraceSupplier | MetricsTraceSupplier): LogMetricTrace { + if (isMetricsTraceSupplier(trace)) { + return new LogMetricTrace(this.logTrace, this.metricsTrace.traceScope(trace)); + } + return new LogMetricTrace(this.logTrace.traceScope(trace), this.metricsTrace); + } + + public trace(trace: LogTraceSupplier | MetricsTraceSupplier) { + if (isMetricsTraceSupplier(trace)) { + this.metricsTrace.trace(trace); + return this; + } + this.logTrace.trace(trace); + return this; + } +} + +export class LogMetricTraceable extends TraceableImpl { + static ofLogTraceable(t: ITraceable) { + const metricsTrace = new MetricsTrace(getEmbeddedMetricConsumer(t.trace)); + return new LogMetricTraceable(t.get(), new LogMetricTrace(t.trace, metricsTrace)); + } + + static of(t: T) { + const logTrace = LogTraceable.of(t); + return LogMetricTraceable.ofLogTraceable(logTrace); + } +} -- cgit v1.2.3-70-g09d2