Added "columns" to query options. Added events count to event data metrics.

This commit is contained in:
Mike Cao 2023-08-07 13:28:32 -07:00
parent 9d86385f5c
commit 7da7f58cbe
7 changed files with 45 additions and 65 deletions

View file

@ -2,7 +2,7 @@ import { ClickHouse } from 'clickhouse';
import dateFormat from 'dateformat';
import debug from 'debug';
import { CLICKHOUSE } from 'lib/db';
import { QueryFilters } from './types';
import { QueryFilters, QueryOptions } from './types';
import { FILTER_COLUMNS } from './constants';
import { loadWebsite } from './load';
import { maxDate } from './date';
@ -63,10 +63,10 @@ function getDateFormat(date) {
return `'${dateFormat(date, 'UTC:yyyy-mm-dd HH:MM:ss')}'`;
}
function getFilterQuery(filters = {}) {
function getFilterQuery(filters: QueryFilters = {}, options: QueryOptions = {}) {
const query = Object.keys(filters).reduce((arr, key) => {
const filter = filters[key];
const column = FILTER_COLUMNS[key];
const column = FILTER_COLUMNS[key] ?? options?.columns?.[key];
if (filter !== undefined && column) {
arr.push(`and ${column} = {${key}:String}`);
@ -85,11 +85,12 @@ function getFilterQuery(filters = {}) {
async function parseFilters(
websiteId: string,
filters: QueryFilters & { [key: string]: any } = {},
options?: QueryOptions,
) {
const website = await loadWebsite(websiteId);
return {
filterQuery: getFilterQuery(filters),
filterQuery: getFilterQuery(filters, options),
params: {
...filters,
websiteId,

View file

@ -67,10 +67,10 @@ function getTimestampIntervalQuery(field: string): string {
}
}
function getFilterQuery(filters = {}): string {
function getFilterQuery(filters: QueryFilters = {}, options: QueryOptions = {}): string {
const query = Object.keys(filters).reduce((arr, key) => {
const filter = filters[key];
const column = FILTER_COLUMNS[key];
const column = FILTER_COLUMNS[key] ?? options?.columns?.[key];
if (filter !== undefined && column) {
arr.push(`and ${column}={{${key}}}`);
@ -100,7 +100,7 @@ async function parseFilters(
options?.joinSession || Object.keys(filters).find(key => SESSION_COLUMNS.includes(key))
? `inner join session on website_event.session_id = session.session_id`
: '',
filterQuery: getFilterQuery(filters),
filterQuery: getFilterQuery(filters, options),
params: {
...filters,
websiteId,

View file

@ -80,15 +80,15 @@ export interface WebsiteEventMetric {
}
export interface WebsiteEventDataStats {
field: string;
type: number;
fieldName: string;
dataType: number;
total: number;
}
export interface WebsiteEventDataFields {
field: string;
type: number;
value?: string;
fieldName: string;
dataType: number;
fieldValue?: string;
total: number;
}
@ -152,5 +152,5 @@ export interface QueryFilters {
export interface QueryOptions {
joinSession?: boolean;
ignoreFilters?: string[];
columns?: { [key: string]: string };
}