mirror of
https://github.com/kremalicious/umami.git
synced 2025-02-14 21:10:34 +01:00
fix clickhouse date timezone issues
This commit is contained in:
parent
fc3c39be3c
commit
55ba7d95ab
@ -3,7 +3,7 @@ CREATE TABLE pageview
|
|||||||
(
|
(
|
||||||
website_id UInt32,
|
website_id UInt32,
|
||||||
session_uuid UUID,
|
session_uuid UUID,
|
||||||
created_at DateTime,
|
created_at DateTime('UTC'),
|
||||||
url String,
|
url String,
|
||||||
referrer String
|
referrer String
|
||||||
)
|
)
|
||||||
@ -14,7 +14,7 @@ CREATE TABLE pageview
|
|||||||
CREATE TABLE pageview_queue (
|
CREATE TABLE pageview_queue (
|
||||||
website_id UInt32,
|
website_id UInt32,
|
||||||
session_uuid UUID,
|
session_uuid UUID,
|
||||||
created_at DateTime,
|
created_at DateTime('UTC'),
|
||||||
url String,
|
url String,
|
||||||
referrer String
|
referrer String
|
||||||
)
|
)
|
||||||
@ -40,7 +40,7 @@ CREATE TABLE session
|
|||||||
(
|
(
|
||||||
session_uuid UUID,
|
session_uuid UUID,
|
||||||
website_id UInt32,
|
website_id UInt32,
|
||||||
created_at DateTime,
|
created_at DateTime('UTC'),
|
||||||
hostname LowCardinality(String),
|
hostname LowCardinality(String),
|
||||||
browser LowCardinality(String),
|
browser LowCardinality(String),
|
||||||
os LowCardinality(String),
|
os LowCardinality(String),
|
||||||
@ -56,7 +56,7 @@ CREATE TABLE session
|
|||||||
CREATE TABLE session_queue (
|
CREATE TABLE session_queue (
|
||||||
session_uuid UUID,
|
session_uuid UUID,
|
||||||
website_id UInt32,
|
website_id UInt32,
|
||||||
created_at DateTime,
|
created_at DateTime('UTC'),
|
||||||
hostname LowCardinality(String),
|
hostname LowCardinality(String),
|
||||||
browser LowCardinality(String),
|
browser LowCardinality(String),
|
||||||
os LowCardinality(String),
|
os LowCardinality(String),
|
||||||
@ -92,7 +92,7 @@ CREATE TABLE event
|
|||||||
event_uuid UUID,
|
event_uuid UUID,
|
||||||
website_id UInt32,
|
website_id UInt32,
|
||||||
session_uuid UUID,
|
session_uuid UUID,
|
||||||
created_at DateTime,
|
created_at DateTime('UTC'),
|
||||||
url String,
|
url String,
|
||||||
event_name String
|
event_name String
|
||||||
)
|
)
|
||||||
@ -104,7 +104,7 @@ CREATE TABLE event_queue (
|
|||||||
event_uuid UUID,
|
event_uuid UUID,
|
||||||
website_id UInt32,
|
website_id UInt32,
|
||||||
session_uuid UUID,
|
session_uuid UUID,
|
||||||
created_at DateTime,
|
created_at DateTime('UTC'),
|
||||||
url String,
|
url String,
|
||||||
event_name String
|
event_name String
|
||||||
)
|
)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { PrismaClient } from '@prisma/client';
|
import { PrismaClient } from '@prisma/client';
|
||||||
import { ClickHouse } from 'clickhouse';
|
import { ClickHouse } from 'clickhouse';
|
||||||
import { Kafka } from 'kafkajs';
|
import { Kafka } from 'kafkajs';
|
||||||
|
import dateFormat from 'dateformat';
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import {
|
import {
|
||||||
MYSQL,
|
MYSQL,
|
||||||
@ -164,13 +165,13 @@ export function getDateQuery(field, unit, timezone) {
|
|||||||
|
|
||||||
export function getDateQueryClickhouse(field, unit, timezone) {
|
export function getDateQueryClickhouse(field, unit, timezone) {
|
||||||
if (timezone) {
|
if (timezone) {
|
||||||
return `date_trunc('${unit}', ${field},'${timezone}')`;
|
return `date_trunc('${unit}', ${field}, '${timezone}')`;
|
||||||
}
|
}
|
||||||
return `date_trunc('${unit}', ${field})`;
|
return `date_trunc('${unit}', ${field})`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getDateFormatClickhouse(date) {
|
export function getDateFormatClickhouse(date) {
|
||||||
return `parseDateTimeBestEffort('${date.toUTCString()}')`;
|
return `'${dateFormat(date, 'UTC:yyyy-mm-dd HH:MM:ss')}'`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getBetweenDatesClickhouse(field, start_at, end_at) {
|
export function getBetweenDatesClickhouse(field, start_at, end_at) {
|
||||||
@ -357,3 +358,7 @@ export async function kafkaProducer(params, topic) {
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getDateFormatKafka(date) {
|
||||||
|
return dateFormat(date, 'UTC:yyyy-mm-dd HH:MM:ss');
|
||||||
|
}
|
||||||
|
@ -66,6 +66,7 @@
|
|||||||
"cross-spawn": "^7.0.3",
|
"cross-spawn": "^7.0.3",
|
||||||
"date-fns": "^2.23.0",
|
"date-fns": "^2.23.0",
|
||||||
"date-fns-tz": "^1.1.4",
|
"date-fns-tz": "^1.1.4",
|
||||||
|
"dateformat": "^5.0.3",
|
||||||
"del": "^6.0.0",
|
"del": "^6.0.0",
|
||||||
"detect-browser": "^5.2.0",
|
"detect-browser": "^5.2.0",
|
||||||
"dotenv": "^10.0.0",
|
"dotenv": "^10.0.0",
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { CLICKHOUSE, RELATIONAL, KAFKA, URL_LENGTH } from 'lib/constants';
|
import { CLICKHOUSE, RELATIONAL, KAFKA, URL_LENGTH } from 'lib/constants';
|
||||||
import {
|
import {
|
||||||
getDateFormatClickhouse,
|
getDateFormatClickhouse,
|
||||||
|
getDateFormatKafka,
|
||||||
prisma,
|
prisma,
|
||||||
rawQueryClickhouse,
|
rawQueryClickhouse,
|
||||||
runAnalyticsQuery,
|
runAnalyticsQuery,
|
||||||
@ -50,7 +51,7 @@ async function clickhouseQuery(website_id, { event_uuid, session_uuid, url, even
|
|||||||
|
|
||||||
return rawQueryClickhouse(
|
return rawQueryClickhouse(
|
||||||
`
|
`
|
||||||
insert into umami_dev.event (created_at, website_id, session_uuid, url, event_name)
|
insert into umami.event (created_at, website_id, session_uuid, url, event_name)
|
||||||
values (${getDateFormatClickhouse(new Date())}, $1, $2, $3, $4);`,
|
values (${getDateFormatClickhouse(new Date())}, $1, $2, $3, $4);`,
|
||||||
params,
|
params,
|
||||||
);
|
);
|
||||||
@ -61,6 +62,7 @@ async function kafkaQuery(website_id, { event_uuid, session_uuid, url, event_nam
|
|||||||
event_uuid: event_uuid,
|
event_uuid: event_uuid,
|
||||||
website_id: website_id,
|
website_id: website_id,
|
||||||
session_uuid: session_uuid,
|
session_uuid: session_uuid,
|
||||||
|
created_at: getDateFormatKafka(new Date()),
|
||||||
url: url?.substr(0, URL_LENGTH),
|
url: url?.substr(0, URL_LENGTH),
|
||||||
event_name: event_name?.substr(0, 50),
|
event_name: event_name?.substr(0, 50),
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { CLICKHOUSE, RELATIONAL, KAFKA, URL_LENGTH } from 'lib/constants';
|
import { CLICKHOUSE, RELATIONAL, KAFKA, URL_LENGTH } from 'lib/constants';
|
||||||
import {
|
import {
|
||||||
getDateFormatClickhouse,
|
getDateFormatClickhouse,
|
||||||
|
getDateFormatKafka,
|
||||||
prisma,
|
prisma,
|
||||||
rawQueryClickhouse,
|
rawQueryClickhouse,
|
||||||
runAnalyticsQuery,
|
runAnalyticsQuery,
|
||||||
@ -39,7 +40,7 @@ async function clickhouseQuery(website_id, { session_uuid, url, referrer }) {
|
|||||||
|
|
||||||
return rawQueryClickhouse(
|
return rawQueryClickhouse(
|
||||||
`
|
`
|
||||||
insert into umami_dev.pageview (created_at, website_id, session_uuid, url, referrer)
|
insert into umami.pageview (created_at, website_id, session_uuid, url, referrer)
|
||||||
values (${getDateFormatClickhouse(new Date())}, $1, $2, $3, $4);`,
|
values (${getDateFormatClickhouse(new Date())}, $1, $2, $3, $4);`,
|
||||||
params,
|
params,
|
||||||
);
|
);
|
||||||
@ -49,6 +50,7 @@ async function kafkaQuery(website_id, { session_uuid, url, referrer }) {
|
|||||||
const params = {
|
const params = {
|
||||||
website_id: website_id,
|
website_id: website_id,
|
||||||
session_uuid: session_uuid,
|
session_uuid: session_uuid,
|
||||||
|
created_at: getDateFormatKafka(new Date()),
|
||||||
url: url?.substr(0, URL_LENGTH),
|
url: url?.substr(0, URL_LENGTH),
|
||||||
referrer: referrer?.substr(0, URL_LENGTH),
|
referrer: referrer?.substr(0, URL_LENGTH),
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { CLICKHOUSE, RELATIONAL, KAFKA } from 'lib/constants';
|
import { CLICKHOUSE, RELATIONAL, KAFKA } from 'lib/constants';
|
||||||
import {
|
import {
|
||||||
getDateFormatClickhouse,
|
getDateFormatClickhouse,
|
||||||
|
getDateFormatKafka,
|
||||||
prisma,
|
prisma,
|
||||||
rawQueryClickhouse,
|
rawQueryClickhouse,
|
||||||
runAnalyticsQuery,
|
runAnalyticsQuery,
|
||||||
@ -48,7 +49,7 @@ async function clickhouseQuery(
|
|||||||
];
|
];
|
||||||
|
|
||||||
await rawQueryClickhouse(
|
await rawQueryClickhouse(
|
||||||
`insert into umami_dev.session (created_at, session_uuid, website_id, hostname, browser, os, device, screen, language, country)
|
`insert into umami.session (created_at, session_uuid, website_id, hostname, browser, os, device, screen, language, country)
|
||||||
values (${getDateFormatClickhouse(new Date())}, $1, $2, $3, $4, $5, $6, $7, $8, $9);`,
|
values (${getDateFormatClickhouse(new Date())}, $1, $2, $3, $4, $5, $6, $7, $8, $9);`,
|
||||||
params,
|
params,
|
||||||
);
|
);
|
||||||
@ -63,6 +64,7 @@ async function kafkaQuery(
|
|||||||
const params = {
|
const params = {
|
||||||
session_uuid: session_uuid,
|
session_uuid: session_uuid,
|
||||||
website_id: website_id,
|
website_id: website_id,
|
||||||
|
created_at: getDateFormatKafka(new Date()),
|
||||||
hostname: hostname,
|
hostname: hostname,
|
||||||
browser: browser,
|
browser: browser,
|
||||||
os: os,
|
os: os,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user