Skip to content

Commit f19417d

Browse files
committed
cleanup
1 parent e02ad3c commit f19417d

File tree

1 file changed

+57
-25
lines changed

1 file changed

+57
-25
lines changed

packages/rpc/src/routers/websites.ts

Lines changed: 57 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,48 @@ const websiteCache = createDrizzleCache({ redis, namespace: "websites" });
3737
const CACHE_DURATION = 60; // seconds
3838
const TREND_THRESHOLD = 5; // percentage
3939

40+
type EventsCheckResult = {
41+
hasEvents: boolean;
42+
error: string | null;
43+
};
44+
45+
async function getTrackingEventsStatus(
46+
websiteId: string
47+
): Promise<EventsCheckResult> {
48+
try {
49+
const trackingCheckResult = await Promise.race([
50+
chQuery<{ count: number }>(
51+
`SELECT COUNT(*) as count FROM analytics.events WHERE client_id = {websiteId:String} AND event_name = 'screen_view' LIMIT 1`,
52+
{ websiteId }
53+
),
54+
new Promise<never>((_, reject) =>
55+
setTimeout(() => reject(new Error("ClickHouse query timeout")), 10_000)
56+
),
57+
]);
58+
59+
return {
60+
hasEvents: (trackingCheckResult[0]?.count ?? 0) > 0,
61+
error: null,
62+
};
63+
} catch (error) {
64+
const message =
65+
error instanceof Error ? error.message : "Unknown error checking events";
66+
logger.error({ websiteId }, `Error checking tracking events: ${message}`);
67+
return { hasEvents: false, error: message };
68+
}
69+
}
70+
71+
const buildStatusMessage = (hasEvents: boolean, eventsError: string | null) => {
72+
if (hasEvents) {
73+
return "Tracking is active and receiving events.";
74+
}
75+
76+
if (eventsError) {
77+
return `Unable to check events: ${eventsError}`;
78+
}
79+
80+
return "Tracking not set up. Please install the script tag.";
81+
};
4082
type ChartDataPoint = {
4183
websiteId: string;
4284
date: string;
@@ -593,35 +635,25 @@ export const websitesRouter = {
593635
try {
594636
await authorizeWebsiteAccess(context, input.websiteId, "read");
595637

596-
let hasTrackingEvents = false;
597-
try {
598-
const trackingCheckResult = await Promise.race([
599-
chQuery<{ count: number }>(
600-
`SELECT COUNT(*) as count FROM analytics.events WHERE client_id = {websiteId:String} AND event_name = 'screen_view' LIMIT 1`,
601-
{ websiteId: input.websiteId }
602-
),
603-
new Promise<never>((_, reject) =>
604-
setTimeout(
605-
() => reject(new Error("ClickHouse query timeout")),
606-
10_000
607-
)
608-
),
609-
]);
610-
611-
hasTrackingEvents = (trackingCheckResult[0]?.count ?? 0) > 0;
612-
} catch (error) {
613-
logger.error(
614-
{ websiteId: input.websiteId },
615-
`Error checking tracking events: ${error instanceof Error ? error.message : String(error)}`
616-
);
617-
hasTrackingEvents = false;
618-
}
638+
const { hasEvents, error: eventsError } = await getTrackingEventsStatus(
639+
input.websiteId
640+
);
619641

620642
return {
621-
tracking_setup: hasTrackingEvents,
622-
integration_type: hasTrackingEvents ? "manual" : null,
643+
tracking_setup: hasEvents,
644+
integration_type: hasEvents ? "manual" : null,
645+
has_events: hasEvents,
646+
status_message: buildStatusMessage(hasEvents, eventsError),
623647
};
624648
} catch (error) {
649+
if (error instanceof ORPCError) {
650+
if (error.code === "NOT_FOUND") {
651+
throw new ORPCError("NOT_FOUND", {
652+
message: `Website with ID "${input.websiteId}" not found. Please verify the website ID is correct.`,
653+
});
654+
}
655+
throw error;
656+
}
625657
logger.error(
626658
{ websiteId: input.websiteId },
627659
`Error in isTrackingSetup: ${error instanceof Error ? error.message : String(error)}`

0 commit comments

Comments
 (0)