fix session end bug

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-02-19 11:58:58 +01:00
parent 95bc55b493
commit 6eae474eb2

View File

@@ -1,6 +1,6 @@
import type { Job } from 'bullmq'; import type { Job } from 'bullmq';
import { getTime, toISOString } from '@mixan/common'; import { getTime } from '@mixan/common';
import { createEvent, getEvents } from '@mixan/db'; import { createEvent, getEvents } from '@mixan/db';
import type { EventsQueuePayloadCreateSessionEnd } from '@mixan/queue/src/queues'; import type { EventsQueuePayloadCreateSessionEnd } from '@mixan/queue/src/queues';
@@ -43,7 +43,6 @@ export async function createSessionEnd(
return acc + event.duration; return acc + event.duration;
}, 0); }, 0);
let lastScreenView = events.find((event) => event.name === 'screen_view');
const sessionStart = events.find((event) => event.name === 'session_start'); const sessionStart = events.find((event) => event.name === 'session_start');
const lastEvent = events[0]; const lastEvent = events[0];
const screenViews = events.filter((event) => event.name === 'screen_view'); const screenViews = events.filter((event) => event.name === 'screen_view');
@@ -52,31 +51,19 @@ export async function createSessionEnd(
throw new Error('Failed to find a session_start'); throw new Error('Failed to find a session_start');
} }
if (!lastScreenView && lastEvent) { if (!lastEvent) {
lastScreenView = lastEvent; throw new Error('No last event found');
job.log(
`No screen_view found, using last event ${
lastEvent.name
} (${lastEvent.createdAt.toISOString()})`
);
}
if (!lastScreenView) {
job.log(
'No screen_view found, creating session_end event with session_start path'
);
throw new Error('No screen_view found');
} }
return createEvent({ return createEvent({
...sessionStart, ...sessionStart,
properties: { properties: {
...sessionStart.properties, ...sessionStart.properties,
_bounce: screenViews.length === 1, _bounce: screenViews.length <= 1,
}, },
name: 'session_end', name: 'session_end',
duration: sessionDuration, duration: sessionDuration,
path: lastScreenView?.path ?? sessionStart.path, path: lastEvent.path,
createdAt: new Date(getTime(lastScreenView.createdAt) + 100), createdAt: new Date(getTime(lastEvent?.createdAt) + 100),
}); });
} }