func(session): add Ip address to session,for analyze

This commit is contained in:
eagleon 2024-09-12 18:17:07 +08:00
parent e881735a23
commit 3feacde18d
7 changed files with 21 additions and 9 deletions

View file

@ -16,6 +16,7 @@ CREATE TABLE umami.website_event
subdivision1 LowCardinality(String), subdivision1 LowCardinality(String),
subdivision2 LowCardinality(String), subdivision2 LowCardinality(String),
city String, city String,
ip String,
--pageviews --pageviews
url_path String, url_path String,
url_query String, url_query String,

View file

@ -19,10 +19,10 @@ model User {
updatedAt DateTime? @updatedAt @map("updated_at") @db.Timestamp(0) updatedAt DateTime? @updatedAt @map("updated_at") @db.Timestamp(0)
deletedAt DateTime? @map("deleted_at") @db.Timestamp(0) deletedAt DateTime? @map("deleted_at") @db.Timestamp(0)
websiteUser Website[] @relation("user") websiteUser Website[] @relation("user")
websiteCreateUser Website[] @relation("createUser") websiteCreateUser Website[] @relation("createUser")
teamUser TeamUser[] teamUser TeamUser[]
report Report[] report Report[]
@@map("user") @@map("user")
} }
@ -40,6 +40,7 @@ model Session {
subdivision1 String? @db.Char(20) subdivision1 String? @db.Char(20)
subdivision2 String? @db.VarChar(50) subdivision2 String? @db.VarChar(50)
city String? @db.VarChar(50) city String? @db.VarChar(50)
ip String? @db.VarChar(100)
createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0)
websiteEvent WebsiteEvent[] websiteEvent WebsiteEvent[]
@ -174,8 +175,8 @@ model Team {
updatedAt DateTime? @updatedAt @map("updated_at") @db.Timestamp(0) updatedAt DateTime? @updatedAt @map("updated_at") @db.Timestamp(0)
deletedAt DateTime? @map("deleted_at") @db.Timestamp(0) deletedAt DateTime? @map("deleted_at") @db.Timestamp(0)
website Website[] website Website[]
teamUser TeamUser[] teamUser TeamUser[]
@@index([accessCode]) @@index([accessCode])
@@map("team") @@map("team")

View file

@ -19,8 +19,8 @@ model User {
updatedAt DateTime? @updatedAt @map("updated_at") @db.Timestamptz(6) updatedAt DateTime? @updatedAt @map("updated_at") @db.Timestamptz(6)
deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6) deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)
websiteUser Website[] @relation("user") websiteUser Website[] @relation("user")
websiteCreateUser Website[] @relation("createUser") websiteCreateUser Website[] @relation("createUser")
teamUser TeamUser[] teamUser TeamUser[]
report Report[] report Report[]
@ -40,6 +40,7 @@ model Session {
subdivision1 String? @db.VarChar(20) subdivision1 String? @db.VarChar(20)
subdivision2 String? @db.VarChar(50) subdivision2 String? @db.VarChar(50)
city String? @db.VarChar(50) city String? @db.VarChar(50)
ip String? @db.VarChar(100)
createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
websiteEvent WebsiteEvent[] websiteEvent WebsiteEvent[]
@ -147,7 +148,7 @@ model SessionData {
id String @id() @map("session_data_id") @db.Uuid id String @id() @map("session_data_id") @db.Uuid
websiteId String @map("website_id") @db.Uuid websiteId String @map("website_id") @db.Uuid
sessionId String @map("session_id") @db.Uuid sessionId String @map("session_id") @db.Uuid
dataKey String @map("data_key") @db.VarChar(500) dataKey String @map("data_key") @db.VarChar(500)
stringValue String? @map("string_value") @db.VarChar(500) stringValue String? @map("string_value") @db.VarChar(500)
numberValue Decimal? @map("number_value") @db.Decimal(19, 4) numberValue Decimal? @map("number_value") @db.Decimal(19, 4)
dateValue DateTime? @map("date_value") @db.Timestamptz(6) dateValue DateTime? @map("date_value") @db.Timestamptz(6)

View file

@ -58,6 +58,7 @@ export async function getSession(req: NextApiRequestCollect): Promise<SessionDat
subdivision1, subdivision1,
subdivision2, subdivision2,
city, city,
ip,
}; };
} }
@ -80,6 +81,7 @@ export async function getSession(req: NextApiRequestCollect): Promise<SessionDat
subdivision1, subdivision1,
subdivision2, subdivision2,
city, city,
ip,
}); });
} catch (e: any) { } catch (e: any) {
if (!e.message.toLowerCase().includes('unique constraint')) { if (!e.message.toLowerCase().includes('unique constraint')) {

View file

@ -221,4 +221,5 @@ export interface SessionData {
subdivision1: string; subdivision1: string;
subdivision2: string; subdivision2: string;
city: string; city: string;
ip: string;
} }

View file

@ -15,6 +15,7 @@ export async function createSession(data: Prisma.SessionCreateInput) {
subdivision1, subdivision1,
subdivision2, subdivision2,
city, city,
ip,
} = data; } = data;
return prisma.client.session.create({ return prisma.client.session.create({
@ -31,6 +32,7 @@ export async function createSession(data: Prisma.SessionCreateInput) {
subdivision1, subdivision1,
subdivision2, subdivision2,
city, city,
ip,
}, },
}); });
} }

View file

@ -25,6 +25,7 @@ async function relationalQuery(websiteId: string, sessionId: string) {
country, country,
subdivision1, subdivision1,
city, city,
ip,
min(min_time) as "firstAt", min(min_time) as "firstAt",
max(max_time) as "lastAt", max(max_time) as "lastAt",
count(distinct visit_id) as visits, count(distinct visit_id) as visits,
@ -44,6 +45,7 @@ async function relationalQuery(websiteId: string, sessionId: string) {
session.country, session.country,
session.subdivision1, session.subdivision1,
session.city, session.city,
session.ip,
min(website_event.created_at) as min_time, min(website_event.created_at) as min_time,
max(website_event.created_at) as max_time, max(website_event.created_at) as max_time,
sum(case when website_event.event_type = 1 then 1 else 0 end) as views, sum(case when website_event.event_type = 1 then 1 else 0 end) as views,
@ -75,6 +77,7 @@ async function clickhouseQuery(websiteId: string, sessionId: string) {
country, country,
subdivision1, subdivision1,
city, city,
ip,
${getDateStringSQL('min(min_time)')} as firstAt, ${getDateStringSQL('min(min_time)')} as firstAt,
${getDateStringSQL('max(max_time)')} as lastAt, ${getDateStringSQL('max(max_time)')} as lastAt,
uniq(visit_id) visits, uniq(visit_id) visits,
@ -94,6 +97,7 @@ async function clickhouseQuery(websiteId: string, sessionId: string) {
country, country,
subdivision1, subdivision1,
city, city,
ip,
min(min_time) as min_time, min(min_time) as min_time,
max(max_time) as max_time, max(max_time) as max_time,
sum(views) as views, sum(views) as views,