mirror of
https://github.com/kremalicious/umami.git
synced 2025-02-14 21:10:34 +01:00
Fixed event search. Removed session time from profile.
This commit is contained in:
parent
1e52eeb0f0
commit
78728b8706
@ -10,8 +10,9 @@ export function SessionData({ websiteId, sessionId }: { websiteId: string; sessi
|
||||
const { data, ...query } = useSessionData(websiteId, sessionId);
|
||||
|
||||
return (
|
||||
<LoadingPanel className={styles.data} {...query} data={data}>
|
||||
<>
|
||||
<div className={styles.header}>{formatMessage(labels.properties)}</div>
|
||||
<LoadingPanel className={styles.data} {...query} data={data}>
|
||||
{!data?.length && <Empty className={styles.empty} />}
|
||||
{data?.map(({ dataKey, dataType, stringValue }) => {
|
||||
return (
|
||||
@ -27,5 +28,6 @@ export function SessionData({ websiteId, sessionId }: { websiteId: string; sessi
|
||||
);
|
||||
})}
|
||||
</LoadingPanel>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -1,31 +1,15 @@
|
||||
import { useMessages } from 'components/hooks';
|
||||
import MetricCard from 'components/metrics/MetricCard';
|
||||
import MetricsBar from 'components/metrics/MetricsBar';
|
||||
import { formatShortTime } from 'lib/format';
|
||||
|
||||
export function SessionStats({ data }) {
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const duration = (new Date(data?.lastAt).getTime() - new Date(data?.firstAt).getTime()) / 1000;
|
||||
let dateFormat;
|
||||
|
||||
if (duration > 86400) {
|
||||
dateFormat = ['d', 'm'];
|
||||
} else if (duration > 3600) {
|
||||
dateFormat = ['h', 'm'];
|
||||
} else {
|
||||
dateFormat = ['m', 's'];
|
||||
}
|
||||
|
||||
return (
|
||||
<MetricsBar isFetched={true}>
|
||||
<MetricCard label={formatMessage(labels.visits)} value={data?.visits} />
|
||||
<MetricCard label={formatMessage(labels.views)} value={data?.views} />
|
||||
<MetricCard label={formatMessage(labels.events)} value={data?.events} />
|
||||
<MetricCard
|
||||
label={formatMessage(labels.sessionDuration)}
|
||||
value={duration}
|
||||
formatValue={n => `${+n < 0 ? '-' : ''}${formatShortTime(Math.abs(~~n), dateFormat, ' ')}`}
|
||||
/>
|
||||
</MetricsBar>
|
||||
);
|
||||
}
|
||||
|
@ -141,7 +141,6 @@ export const labels = defineMessages({
|
||||
bounceRate: { id: 'label.bounce-rate', defaultMessage: 'Bounce rate' },
|
||||
viewsPerVisit: { id: 'label.views-per-visit', defaultMessage: 'Views per visit' },
|
||||
visitDuration: { id: 'label.visit-duration', defaultMessage: 'Visit duration' },
|
||||
sessionDuration: { id: 'label.session-duration', defaultMessage: 'Session duration' },
|
||||
desktop: { id: 'label.desktop', defaultMessage: 'Desktop' },
|
||||
laptop: { id: 'label.laptop', defaultMessage: 'Laptop' },
|
||||
tablet: { id: 'label.tablet', defaultMessage: 'Tablet' },
|
||||
|
@ -14,10 +14,12 @@ export function getWebsiteEvents(
|
||||
|
||||
async function relationalQuery(websiteId: string, filters: QueryFilters, pageParams?: PageParams) {
|
||||
const { pagedQuery } = prisma;
|
||||
const { query } = pageParams;
|
||||
|
||||
const where = {
|
||||
...filters,
|
||||
id: websiteId,
|
||||
...prisma.getSearchParameters(query, [{ eventName: 'contains' }, { urlPath: 'contains' }]),
|
||||
};
|
||||
|
||||
return pagedQuery('website_event', { where }, pageParams);
|
||||
@ -47,7 +49,12 @@ async function clickhouseQuery(websiteId: string, filters: QueryFilters, pagePar
|
||||
where website_id = {websiteId:UUID}
|
||||
${dateQuery}
|
||||
${filterQuery}
|
||||
${query ? `and (positionCaseInsensitive(event_name, {query:String}) > 0)` : ''}
|
||||
${
|
||||
query
|
||||
? `and (positionCaseInsensitive(event_name, {query:String}) > 0
|
||||
or positionCaseInsensitive(url_path, {query:String}) > 0)`
|
||||
: ''
|
||||
}
|
||||
order by created_at desc
|
||||
`,
|
||||
{ ...params, query },
|
||||
|
@ -14,12 +14,10 @@ export async function getWebsiteSessions(
|
||||
|
||||
async function relationalQuery(websiteId: string, filters: QueryFilters, pageParams: PageParams) {
|
||||
const { pagedQuery } = prisma;
|
||||
const { query } = pageParams;
|
||||
|
||||
const where = {
|
||||
...filters,
|
||||
id: websiteId,
|
||||
...prisma.getSearchParameters(query, [{ eventName: 'contains' }, { urlPath: 'contains' }]),
|
||||
};
|
||||
|
||||
return pagedQuery('session', { where }, pageParams);
|
||||
@ -28,7 +26,6 @@ async function relationalQuery(websiteId: string, filters: QueryFilters, pagePar
|
||||
async function clickhouseQuery(websiteId: string, filters: QueryFilters, pageParams?: PageParams) {
|
||||
const { pagedQuery, parseFilters } = clickhouse;
|
||||
const { params, dateQuery, filterQuery } = await parseFilters(websiteId, filters);
|
||||
const { query } = pageParams;
|
||||
|
||||
return pagedQuery(
|
||||
`
|
||||
@ -52,14 +49,22 @@ async function clickhouseQuery(websiteId: string, filters: QueryFilters, pagePar
|
||||
where website_id = {websiteId:UUID}
|
||||
${dateQuery}
|
||||
${filterQuery}
|
||||
${query ? `and (positionCaseInsensitive(event_name, {query:String}) > 0)` : ''}
|
||||
group by session_id, website_id, hostname, browser, os, device, screen, language, country, subdivision1, city
|
||||
order by lastAt desc
|
||||
`,
|
||||
params,
|
||||
pageParams,
|
||||
).then((result: any) => ({
|
||||
).then((result: any) => {
|
||||
return {
|
||||
...result,
|
||||
visits: Number(result.visits),
|
||||
}));
|
||||
data: result.data.map((row: any) => {
|
||||
return {
|
||||
...row,
|
||||
createdAt: row.firstAt,
|
||||
visits: Number(row.visits),
|
||||
views: Number(row.views),
|
||||
};
|
||||
}),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user