handle session_end when no session_start was found
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import type { Job } from 'bullmq';
|
import type { Job } from 'bullmq';
|
||||||
|
import { last } from 'ramda';
|
||||||
|
|
||||||
import { getTime } from '@openpanel/common';
|
import { getTime } from '@openpanel/common';
|
||||||
import {
|
import {
|
||||||
@@ -58,12 +59,26 @@ export async function createSessionEnd(
|
|||||||
return acc + event.duration;
|
return acc + event.duration;
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
const sessionStart = events.find((event) => event.name === 'session_start');
|
let 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');
|
||||||
|
|
||||||
if (!sessionStart) {
|
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) {
|
if (!lastEvent) {
|
||||||
|
|||||||
@@ -181,8 +181,7 @@ export async function incomingEvent(job: Job<EventsQueuePayloadIncomingEvent>) {
|
|||||||
await createEvent({
|
await createEvent({
|
||||||
...payload,
|
...payload,
|
||||||
name: 'session_start',
|
name: 'session_start',
|
||||||
// @ts-expect-error
|
createdAt: new Date(getTime(payload.createdAt) - 100),
|
||||||
createdAt: toISOString(getTime(payload.createdAt) - 100),
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user