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),
subdivision2 LowCardinality(String),
city String,
ip String,
--pageviews
url_path String,
url_query String,

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -25,6 +25,7 @@ async function relationalQuery(websiteId: string, sessionId: string) {
country,
subdivision1,
city,
ip,
min(min_time) as "firstAt",
max(max_time) as "lastAt",
count(distinct visit_id) as visits,
@ -44,6 +45,7 @@ async function relationalQuery(websiteId: string, sessionId: string) {
session.country,
session.subdivision1,
session.city,
session.ip,
min(website_event.created_at) as min_time,
max(website_event.created_at) as max_time,
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,
subdivision1,
city,
ip,
${getDateStringSQL('min(min_time)')} as firstAt,
${getDateStringSQL('max(max_time)')} as lastAt,
uniq(visit_id) visits,
@ -94,6 +97,7 @@ async function clickhouseQuery(websiteId: string, sessionId: string) {
country,
subdivision1,
city,
ip,
min(min_time) as min_time,
max(max_time) as max_time,
sum(views) as views,