diff --git a/apps/api/src/utils/parseIp.ts b/apps/api/src/utils/parseIp.ts index 1d9b48a1..dc7437e6 100644 --- a/apps/api/src/utils/parseIp.ts +++ b/apps/api/src/utils/parseIp.ts @@ -7,21 +7,24 @@ interface RemoteIpLookupResponse { country: string | undefined; city: string | undefined; stateprov: string | undefined; - continent: string | undefined; + longitude: number | undefined; + latitude: number | undefined; } interface GeoLocation { country: string | undefined; city: string | undefined; region: string | undefined; - continent: string | undefined; + longitude: number | undefined; + latitude: number | undefined; } const geo: GeoLocation = { country: undefined, city: undefined, region: undefined, - continent: undefined, + longitude: undefined, + latitude: undefined, }; const ignore = ['127.0.0.1', '::1']; @@ -45,7 +48,8 @@ export async function parseIp(ip?: string): Promise { country: res.country, city: res.city, region: res.stateprov, - continent: res.continent, + longitude: res.longitude, + latitude: res.latitude, }; } catch (e) { logger.error('Failed to fetch geo location for ip', e); diff --git a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-details.tsx b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-details.tsx index 89299eae..76e03835 100644 --- a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-details.tsx +++ b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-details.tsx @@ -122,13 +122,6 @@ export function EventDetails({ event, open, setOpen }: Props) { setFilter('country', event.country ?? ''); }, }, - { - name: 'Continent', - value: event.continent, - onClick() { - setFilter('continent', event.continent ?? ''); - }, - }, { name: 'Device', value: event.device, diff --git a/apps/worker/src/jobs/events.incoming-event.ts b/apps/worker/src/jobs/events.incoming-event.ts index 8e8d9aaa..f124631e 100644 --- a/apps/worker/src/jobs/events.incoming-event.ts +++ b/apps/worker/src/jobs/events.incoming-event.ts @@ -68,7 +68,8 @@ export async function incomingEvent(job: Job) { country: event?.country || geo.country || '', city: event?.city || geo.city || '', region: event?.region || geo.region || '', - continent: event?.continent || geo.continent || '', + longitude: geo.longitude, + latitude: geo.latitude, os: event?.os ?? '', osVersion: event?.osVersion ?? '', browser: event?.browser ?? '', @@ -150,7 +151,8 @@ export async function incomingEvent(job: Job) { country: geo.country, city: geo.city, region: geo.region, - continent: geo.continent, + longitude: geo.longitude, + latitude: geo.latitude, os: uaInfo?.os ?? '', osVersion: uaInfo?.osVersion ?? '', browser: uaInfo?.browser ?? '', diff --git a/packages/db/clickhouse_tables.sql b/packages/db/clickhouse_tables.sql index daa4443c..d8933c83 100644 --- a/packages/db/clickhouse_tables.sql +++ b/packages/db/clickhouse_tables.sql @@ -15,7 +15,8 @@ CREATE TABLE openpanel.events ( `country` String, `city` String, `region` String, - `continent` String, + `longitude` Int16, + `latitude` Int16, `os` String, `os_version` String, `browser` String, @@ -77,6 +78,16 @@ ALTER TABLE ADD COLUMN id UUID DEFAULT generateUUIDv4() FIRST; +ALTER TABLE + events +ADD + COLUMN longitude Nullable(Int16); + +ALTER TABLE + events +ADD + COLUMN latitude Nullable(Int16); + --- Materialized views (DAU) CREATE MATERIALIZED VIEW dau_mv ENGINE = AggregatingMergeTree() PARTITION BY toYYYYMMDD(date) ORDER BY diff --git a/packages/db/src/services/event.service.ts b/packages/db/src/services/event.service.ts index 825b0ab5..263bbe1b 100644 --- a/packages/db/src/services/event.service.ts +++ b/packages/db/src/services/event.service.ts @@ -37,6 +37,8 @@ export interface IClickhouseEvent { country: string; city: string; region: string; + longitude: number | null; + latitude: number | null; os: string; os_version: string; browser: string; @@ -65,6 +67,8 @@ export function transformEvent( country: event.country, city: event.city, region: event.region, + longitude: event.longitude, + latitude: event.latitude, os: event.os, osVersion: event.os_version, browser: event.browser, @@ -97,7 +101,8 @@ export interface IServiceCreateEventPayload { country?: string | undefined; city?: string | undefined; region?: string | undefined; - continent?: string | undefined; + longitude?: number | undefined | null; + latitude?: number | undefined | null; os?: string | undefined; osVersion?: string | undefined; browser?: string | undefined; @@ -121,6 +126,8 @@ export interface IServiceEventMinimal { sessionId: string; createdAt: Date; country?: string | undefined; + longitude?: number | undefined | null; + latitude?: number | undefined | null; os?: string | undefined; browser?: string | undefined; device?: string | undefined; @@ -156,6 +163,8 @@ export function transformMinimalEvent( sessionId: event.sessionId, createdAt: event.createdAt, country: event.country, + longitude: event.longitude, + latitude: event.latitude, os: event.os, browser: event.browser, device: event.device, @@ -228,6 +237,8 @@ export async function createEvent( country: payload.country, city: payload.city, region: payload.region, + longitude: payload.longitude, + latitude: payload.latitude, os: payload.os, os_version: payload.osVersion, browser: payload.browser, @@ -255,6 +266,8 @@ export async function createEvent( country: payload.country ?? '', city: payload.city ?? '', region: payload.region ?? '', + longitude: payload.longitude ?? null, + latitude: payload.latitude ?? null, os: payload.os ?? '', os_version: payload.osVersion ?? '', browser: payload.browser ?? '', diff --git a/packages/queue/src/queues.ts b/packages/queue/src/queues.ts index 1c760a75..0e10114b 100644 --- a/packages/queue/src/queues.ts +++ b/packages/queue/src/queues.ts @@ -14,7 +14,8 @@ export interface EventsQueuePayloadIncomingEvent { country: string | undefined; city: string | undefined; region: string | undefined; - continent: string | undefined; + longitude: number | undefined; + latitude: number | undefined; }; headers: { origin: string | undefined;