handle session_end when no session_start was found

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-09-02 20:36:59 +02:00
parent 727da535b0
commit 63168eafde
2 changed files with 18 additions and 4 deletions

View File

@@ -1,4 +1,5 @@
import type { Job } from 'bullmq';
import { last } from 'ramda';
import { getTime } from '@openpanel/common';
import {
@@ -58,12 +59,26 @@ export async function createSessionEnd(
return acc + event.duration;
}, 0);
const sessionStart = events.find((event) => event.name === 'session_start');
let sessionStart = events.find((event) => event.name === 'session_start');
const lastEvent = events[0];
const screenViews = events.filter((event) => event.name === 'screen_view');
if (!sessionStart) {
throw new Error('Failed to find a session_start');
const firstScreenView = last(screenViews);
if (!firstScreenView) {
throw new Error('Could not found session_start or any screen_view');
}
job.log('Creating session_start since it was not found');
sessionStart = {
...firstScreenView,
name: 'session_start',
createdAt: new Date(getTime(firstScreenView.createdAt) - 100),
};
await createEvent(sessionStart);
}
if (!lastEvent) {

View File

@@ -181,8 +181,7 @@ export async function incomingEvent(job: Job<EventsQueuePayloadIncomingEvent>) {
await createEvent({
...payload,
name: 'session_start',
// @ts-expect-error
createdAt: toISOString(getTime(payload.createdAt) - 100),
createdAt: new Date(getTime(payload.createdAt) - 100),
});
}