MCPcopy
hub / github.com/msgbyte/tianji / getWebsitePublicStats

Function getWebsitePublicStats

src/server/model/website/public.ts:30–113  ·  view source on GitHub ↗
({
  websiteId,
  startAt,
  endAt,
  prevStartAt,
  prevEndAt,
  timezone,
  unit,
}: {
  websiteId: string;
  startAt: number;
  endAt: number;
  prevStartAt: number;
  prevEndAt: number;
  timezone: string;
  unit: keyof typeof POSTGRESQL_DATE_FORMATS;
})

Source from the content-addressed store, hash-verified

28}
29
30export async function getWebsitePublicStats({
31 websiteId,
32 startAt,
33 endAt,
34 prevStartAt,
35 prevEndAt,
36 timezone,
37 unit,
38}: {
39 websiteId: string;
40 startAt: number;
41 endAt: number;
42 prevStartAt: number;
43 prevEndAt: number;
44 timezone: string;
45 unit: keyof typeof POSTGRESQL_DATE_FORMATS;
46}) {
47 const currentFilters: WebsiteQueryFilters = {
48 startDate: new Date(startAt),
49 endDate: new Date(endAt),
50 timezone,
51 unit,
52 };
53 const prevFilters: WebsiteQueryFilters = {
54 startDate: new Date(prevStartAt),
55 endDate: new Date(prevEndAt),
56 timezone,
57 unit,
58 };
59
60 const [current, previous, pageviews] = await Promise.all([
61 getWorkspaceWebsiteStats(websiteId, currentFilters),
62 getWorkspaceWebsiteStats(websiteId, prevFilters),
63 getWorkspaceWebsitePageview(websiteId, currentFilters),
64 ]);
65
66 const value = current?.[0];
67 const prev = previous?.[0];
68
69 const pageviewsValue = Number(value?.pageviews ?? 0);
70 const pageviewsPrev = Number(prev?.pageviews ?? 0);
71 const visitorsValue = Number(value?.uniques ?? 0);
72 const visitorsPrev = Number(prev?.uniques ?? 0);
73 const bouncesValue = Number(value?.bounces ?? 0);
74 const bouncesPrev = Number(prev?.bounces ?? 0);
75 const totalTimeValue = Number(value?.totaltime ?? 0);
76 const totalTimePrev = Number(prev?.totaltime ?? 0);
77
78 const effectiveVisits = Math.max(pageviewsValue - bouncesValue, 0);
79 const effectivePrevVisits = Math.max(pageviewsPrev - bouncesPrev, 0);
80
81 const bounceRateValue =
82 pageviewsValue > 0 ? (bouncesValue / pageviewsValue) * 100 : 0;
83 const bounceRatePrev =
84 pageviewsPrev > 0 ? (bouncesPrev / pageviewsPrev) * 100 : 0;
85
86 const averageDurationValue =
87 effectiveVisits > 0 ? totalTimeValue / effectiveVisits : 0;

Callers 1

website.tsFile · 0.85

Calls 2

getWorkspaceWebsiteStatsFunction · 0.85

Tested by

no test coverage detected