diff --git a/apps/api/src/controllers/track.controller.ts b/apps/api/src/controllers/track.controller.ts index f043d2ed..aa4f5b53 100644 --- a/apps/api/src/controllers/track.controller.ts +++ b/apps/api/src/controllers/track.controller.ts @@ -29,6 +29,7 @@ export function getStringHeaders(headers: FastifyRequest['headers']) { 'openpanel-sdk-name', 'openpanel-sdk-version', 'openpanel-client-id', + 'request-id', ], headers, ), diff --git a/apps/api/src/utils/parse-ip.ts b/apps/api/src/utils/parse-ip.ts index 2f97f44f..90d5ae83 100644 --- a/apps/api/src/utils/parse-ip.ts +++ b/apps/api/src/utils/parse-ip.ts @@ -40,7 +40,12 @@ export async function parseIp(ip?: string): Promise { } const hash = crypto.createHash('sha256').update(ip).digest('hex'); - const cached = await getRedisCache().get(`geo:${hash}`); + const cached = await getRedisCache() + .get(`geo:${hash}`) + .catch(() => { + logger.warn('Failed to get geo location from cache', { hash }); + return null; + }); if (cached) { return JSON.parse(cached); @@ -69,7 +74,7 @@ export async function parseIp(ip?: string): Promise { `geo:${hash}`, JSON.stringify(geo), 'EX', - 60 * 30, + 60 * 60 * 24, ); return geo; diff --git a/apps/worker/src/jobs/events.create-session-end.ts b/apps/worker/src/jobs/events.create-session-end.ts index 41304502..c3718603 100644 --- a/apps/worker/src/jobs/events.create-session-end.ts +++ b/apps/worker/src/jobs/events.create-session-end.ts @@ -72,6 +72,7 @@ export async function createSessionEnd( const logger = baseLogger.child({ payload: job.data.payload, jobId: job.id, + reqId: job.data.payload.properties?.__reqId ?? 'unknown', }); const payload = job.data.payload; diff --git a/apps/worker/src/jobs/events.incoming-event.ts b/apps/worker/src/jobs/events.incoming-event.ts index 3c3f86d9..9825e334 100644 --- a/apps/worker/src/jobs/events.incoming-event.ts +++ b/apps/worker/src/jobs/events.incoming-event.ts @@ -2,7 +2,7 @@ import { getReferrerWithQuery, parseReferrer } from '@/utils/parse-referrer'; import type { Job } from 'bullmq'; import { omit } from 'ramda'; -import { logger } from '@/utils/logger'; +import { logger as baseLogger } from '@/utils/logger'; import { createSessionEnd, getSessionEnd } from '@/utils/session-handler'; import { isSameDomain, parsePath } from '@openpanel/common'; import { parseUserAgent } from '@openpanel/common/server'; @@ -12,6 +12,7 @@ import { createEvent, eventBuffer, } from '@openpanel/db'; +import type { ILogger } from '@openpanel/logger'; import type { EventsQueuePayloadIncomingEvent } from '@openpanel/queue'; import * as R from 'ramda'; @@ -26,6 +27,7 @@ const merge = (a: Partial, b: Partial): A & B => async function createEventAndNotify( payload: IServiceCreateEventPayload, jobData: Job['data']['payload'], + logger: ILogger, ) { await checkNotificationRulesForEvent(payload).catch((e) => { logger.error('Error checking notification rules', { error: e }); @@ -47,6 +49,10 @@ export async function incomingEvent(job: Job) { priority, } = job.data.payload; const properties = body.properties ?? {}; + const reqId = headers['request-id'] ?? 'unknown'; + const logger = baseLogger.child({ + reqId, + }); const getProperty = (name: string): string | undefined => { // replace thing is just for older sdks when we didn't have `__` // remove when kiddokitchen app (24.09.02) is not used anymore @@ -82,6 +88,7 @@ export async function incomingEvent(job: Job) { __user_agent: userAgent, __hash: hash, __query: query, + __reqId: reqId, }), createdAt, duration: 0, @@ -116,7 +123,11 @@ export async function incomingEvent(job: Job) { : null; const payload = merge(omit(['properties'], event ?? {}), baseEvent); - return createEventAndNotify(payload as IServiceEvent, job.data.payload); + return createEventAndNotify( + payload as IServiceEvent, + job.data.payload, + logger, + ); } const sessionEnd = await getSessionEnd({ @@ -147,5 +158,5 @@ export async function incomingEvent(job: Job) { await createSessionEnd({ payload }); } - return createEventAndNotify(payload, job.data.payload); + return createEventAndNotify(payload, job.data.payload, logger); } diff --git a/packages/db/src/services/event.service.ts b/packages/db/src/services/event.service.ts index 6dab3d0f..17bd0879 100644 --- a/packages/db/src/services/event.service.ts +++ b/packages/db/src/services/event.service.ts @@ -143,6 +143,8 @@ export interface IServiceEvent { properties: Record & { hash?: string; query?: Record; + __reqId?: string; + __user_agent?: string; }; createdAt: Date; country?: string | undefined;