From da79285e7f3151e254634a88f9df4e98dfa540a8 Mon Sep 17 00:00:00 2001 From: Moritz Schneider <9135566+bazumo@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:46:36 -0700 Subject: [PATCH] add opentelemetry log function and telemetry for primary_email_auth_enabled usage (#523) Co-authored-by: Konsti Wohlwend --- apps/backend/src/app/api/latest/users/crud.tsx | 5 +++++ apps/backend/src/utils/telemetry.tsx | 13 +++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/apps/backend/src/app/api/latest/users/crud.tsx b/apps/backend/src/app/api/latest/users/crud.tsx index 3b63509d4..69ea82e20 100644 --- a/apps/backend/src/app/api/latest/users/crud.tsx +++ b/apps/backend/src/app/api/latest/users/crud.tsx @@ -4,6 +4,7 @@ import { PrismaTransaction } from "@/lib/types"; import { sendTeamMembershipDeletedWebhook, sendUserCreatedWebhook, sendUserDeletedWebhook, sendUserUpdatedWebhook } from "@/lib/webhooks"; import { RawQuery, prismaClient, rawQuery, retryTransaction } from "@/prisma-client"; import { createCrudHandlers } from "@/route-handlers/crud-handler"; +import { log } from "@/utils/telemetry"; import { runAsynchronouslyAndWaitUntil } from "@/utils/vercel"; import { BooleanTrue, Prisma } from "@prisma/client"; import { KnownErrors } from "@stackframe/stack-shared"; @@ -536,6 +537,10 @@ export const usersCrudHandlers = createLazyProxy(() => createCrudHandlers(usersC }; }, onCreate: async ({ auth, data }) => { + log("create_user_endpoint_primaryAuthEnabled", { + value: data.primary_email_auth_enabled, + email: data.primary_email ?? undefined, + }); const result = await retryTransaction(async (tx) => { const passwordHash = await getPasswordHashFromData(data); await checkAuthData(tx, { diff --git a/apps/backend/src/utils/telemetry.tsx b/apps/backend/src/utils/telemetry.tsx index 75de51689..39e6ac1fd 100644 --- a/apps/backend/src/utils/telemetry.tsx +++ b/apps/backend/src/utils/telemetry.tsx @@ -1,5 +1,5 @@ -import { AttributeValue, Span, trace } from "@opentelemetry/api"; - +import { Attributes, AttributeValue, Span, trace } from "@opentelemetry/api"; +import { StackAssertionError } from "@stackframe/stack-shared/dist/utils/errors"; const tracer = trace.getTracer('stack-backend'); export function withTraceSpan

(optionsOrDescription: string | { description: string, attributes?: Record }, fn: (...args: P) => Promise): (...args: P) => Promise { @@ -24,6 +24,11 @@ export async function traceSpan(optionsOrDescription: string | { description: }); } -export function log(message: string, ...args: any[]) { - console.log(`[${new Date().toISOString()}] ${message}`, ...args); +export function log(message: string, attributes: Attributes) { + const span = trace.getActiveSpan(); + if (span) { + span.addEvent(message, attributes); + } else { + throw new StackAssertionError('No active span found'); + } }