PR comments

pull/1330/head
Brian Cao 2022-07-22 22:42:01 -07:00
parent 1c26581cd1
commit f569055771
3 changed files with 21 additions and 26 deletions

View File

@ -29,7 +29,7 @@ function logQuery(e) {
console.log(chalk.yellow(e.params), '->', e.query, chalk.greenBright(`${e.duration}ms`));
}
function initializePrisma(options) {
function getPrismaClient(options) {
const prisma = new PrismaClient(options);
if (process.env.LOG_QUERY) {
@ -39,7 +39,7 @@ function initializePrisma(options) {
return prisma;
}
function initializeClickhouse() {
function getClickhouseClient() {
if (!process.env.ANALYTICS_URL) {
return null;
}
@ -63,8 +63,8 @@ function initializeClickhouse() {
});
}
const prisma = global.prisma || initializePrisma(options);
const clickhouse = global.clickhouse || initializeClickhouse();
const prisma = global.prisma || getPrismaClient(options);
const clickhouse = global.clickhouse || getClickhouseClient();
if (process.env.NODE_ENV !== 'production') {
global.prisma = prisma;
@ -142,15 +142,15 @@ export function getBetweenDatesClickhouse(field, start_at, end_at) {
and ${getDateFormatClickhouse(end_at)}`;
}
export function getTimestampInterval(maxColumn, minColumn) {
export function getTimestampInterval(field) {
const db = getDatabase();
if (db === POSTGRESQL) {
return `floor(extract(epoch from (${maxColumn}) - (${minColumn})))`;
return `floor(extract(epoch from max(${field}) - min(${field})))`;
}
if (db === MYSQL) {
return `floor(unix_timestamp(${maxColumn}) - unix_timestamp(${minColumn}))`;
return `floor(unix_timestamp(max(${field})) - unix_timestamp(min(${field})))`;
}
}

View File

@ -38,7 +38,7 @@ async function relationalQuery(
return rawQuery(
`
select ${getDateQuery('pageview.created_at', unit, timezone)} t,
count(${count != '*' ? `${count}${sessionKey}` : count}) y
count(${count !== '*' ? `${count}${sessionKey}` : count}) y
from pageview
${joinSession}
where pageview.website_id=$1
@ -78,7 +78,7 @@ async function clickhouseQuery(
from
(select
${getDateQueryClickhouse('created_at', unit, timezone)} t,
count(${count != '*' ? `${count}${sessionKey}` : count}) y
count(${count !== '*' ? `${count}${sessionKey}` : count}) y
from pageview
${joinSession}
where pageview.website_id= $1

View File

@ -31,24 +31,19 @@ async function relationalQuery(website_id, start_at, end_at, filters = {}) {
select sum(t.c) as "pageviews",
count(distinct t.session_id) as "uniques",
sum(case when t.c = 1 then 1 else 0 end) as "bounces",
sum(case when m2 < m1 + interval '1 hour' then ${getTimestampInterval(
'm2',
'm1',
)} else 0 end) as "totaltime"
sum(t.time) as "totaltime"
from (
select
pageview.session_id,
${getDateQuery('pageview.created_at', 'hour')},
count(*) c,
min(created_at) m1,
max(created_at) m2
from pageview
${joinSession}
where pageview.website_id=$1
and pageview.created_at between $2 and $3
${pageviewQuery}
${sessionQuery}
group by 1, 2
select pageview.session_id,
${getDateQuery('pageview.created_at', 'hour')},
count(*) c,
${getTimestampInterval('pageview.created_at')} as "time"
from pageview
${joinSession}
where pageview.website_id=$1
and pageview.created_at between $2 and $3
${pageviewQuery}
${sessionQuery}
group by 1, 2
) t
`,
params,