Persist spans to DB via logger

Implement fire-and-forget span persistence:
- Add logSpanToDatabase and persistSpanToDatabase to logger
- Persist spans, attributes, events, and event attributes to new tables
- Wire edgeFunctionWrapper to call DB persistence after each span
- Create required tables, views, and security policies
- Ensure non-blocking and guard for missing Supabase creds
This commit is contained in:
gpt-engineer-app[bot]
2025-11-11 04:28:17 +00:00
parent 177eb540a8
commit 0dfc5ff724
3 changed files with 241 additions and 2 deletions

View File

@@ -15,8 +15,9 @@ import {
endSpan,
addSpanEvent,
logSpan,
logSpanToDatabase,
extractSpanContextFromHeaders,
type Span
type Span
} from './logger.ts';
import { formatEdgeError, toError } from './errorFormatter.ts';
import { ValidationError, logValidationError } from './typeValidation.ts';
@@ -188,6 +189,7 @@ export function wrapEdgeFunction(
endSpan(span, 'ok');
logSpan(span);
logSpanToDatabase(span, requestId);
// Clone response to add tracking headers
const responseBody = await response.text();
@@ -221,6 +223,7 @@ export function wrapEdgeFunction(
logValidationError(error, requestId, name);
endSpan(span, 'error', error);
logSpan(span);
logSpanToDatabase(span, requestId);
const duration = span.endTime ? span.duration : Date.now() - span.startTime;
@@ -291,6 +294,7 @@ export function wrapEdgeFunction(
endSpan(span, 'error', error);
logSpan(span);
logSpanToDatabase(span, requestId);
const duration = span.endTime ? span.duration : Date.now() - span.startTime;
@@ -333,6 +337,7 @@ export function wrapEdgeFunction(
endSpan(span, 'error', error);
logSpan(span);
logSpanToDatabase(span, requestId);
const duration = span.endTime ? span.duration : Date.now() - span.startTime;