mirror of
https://github.com/umami-software/umami.git
synced 2026-02-09 23:27:12 +01:00
Added "columns" to query options. Added events count to event data metrics.
This commit is contained in:
parent
9d86385f5c
commit
7da7f58cbe
7 changed files with 45 additions and 65 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
12
lib/types.ts
12
lib/types.ts
|
|
@ -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 };
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue