···
* Discriminated union for all analytics cache data types
128
-
type AnalyticsCacheData =
129
-
| { type: 'analytics'; data: FullAnalyticsData }
130
-
| { type: 'essential'; data: EssentialStatsData }
131
-
| { type: 'charts'; data: ChartData }
132
-
| { type: 'useragents'; data: UserAgentData };
128
+
type AnalyticsCacheData =
129
+
| { type: "analytics"; data: FullAnalyticsData }
130
+
| { type: "essential"; data: EssentialStatsData }
131
+
| { type: "charts"; data: ChartData }
132
+
| { type: "useragents"; data: UserAgentData };
* Type-safe analytics cache entry
···
* Type guard functions for cache data
145
-
function isAnalyticsData(data: AnalyticsCacheData): data is { type: 'analytics'; data: FullAnalyticsData } {
146
-
return data.type === 'analytics';
145
+
function isAnalyticsData(
146
+
data: AnalyticsCacheData,
147
+
): data is { type: "analytics"; data: FullAnalyticsData } {
148
+
return data.type === "analytics";
149
-
function isEssentialStatsData(data: AnalyticsCacheData): data is { type: 'essential'; data: EssentialStatsData } {
150
-
return data.type === 'essential';
151
+
function isEssentialStatsData(
152
+
data: AnalyticsCacheData,
153
+
): data is { type: "essential"; data: EssentialStatsData } {
154
+
return data.type === "essential";
153
-
function isChartData(data: AnalyticsCacheData): data is { type: 'charts'; data: ChartData } {
154
-
return data.type === 'charts';
157
+
function isChartData(
158
+
data: AnalyticsCacheData,
159
+
): data is { type: "charts"; data: ChartData } {
160
+
return data.type === "charts";
157
-
function isUserAgentData(data: AnalyticsCacheData): data is { type: 'useragents'; data: UserAgentData } {
158
-
return data.type === 'useragents';
163
+
function isUserAgentData(
164
+
data: AnalyticsCacheData,
165
+
): data is { type: "useragents"; data: UserAgentData } {
166
+
return data.type === "useragents";
···
getAnalyticsData(key: string): FullAnalyticsData | null {
const cached = this.cache.get(key);
182
-
if (cached && now - cached.timestamp < this.cacheTTL && isAnalyticsData(cached.data)) {
192
+
now - cached.timestamp < this.cacheTTL &&
193
+
isAnalyticsData(cached.data)
···
getEssentialStatsData(key: string): EssentialStatsData | null {
const cached = this.cache.get(key);
195
-
if (cached && now - cached.timestamp < this.cacheTTL && isEssentialStatsData(cached.data)) {
209
+
now - cached.timestamp < this.cacheTTL &&
210
+
isEssentialStatsData(cached.data)
···
getChartData(key: string): ChartData | null {
const cached = this.cache.get(key);
208
-
if (cached && now - cached.timestamp < this.cacheTTL && isChartData(cached.data)) {
226
+
now - cached.timestamp < this.cacheTTL &&
227
+
isChartData(cached.data)
···
getUserAgentData(key: string): UserAgentData | null {
const cached = this.cache.get(key);
221
-
if (cached && now - cached.timestamp < this.cacheTTL && isUserAgentData(cached.data)) {
243
+
now - cached.timestamp < this.cacheTTL &&
244
+
isUserAgentData(cached.data)
···
* Set analytics data in cache with type safety
setAnalyticsData(key: string, data: FullAnalyticsData): void {
231
-
this.setCacheEntry(key, { type: 'analytics', data });
255
+
this.setCacheEntry(key, { type: "analytics", data });
* Set essential stats data in cache with type safety
setEssentialStatsData(key: string, data: EssentialStatsData): void {
238
-
this.setCacheEntry(key, { type: 'essential', data });
262
+
this.setCacheEntry(key, { type: "essential", data });
* Set chart data in cache with type safety
setChartData(key: string, data: ChartData): void {
245
-
this.setCacheEntry(key, { type: 'charts', data });
269
+
this.setCacheEntry(key, { type: "charts", data });
* Set user agent data in cache with type safety
setUserAgentData(key: string, data: UserAgentData): void {
252
-
this.setCacheEntry(key, { type: 'useragents', data });
276
+
this.setCacheEntry(key, { type: "useragents", data });
···
const memUsage = process.memoryUsage();
const bytesToMiB = (bytes: number) => bytes / 1024 / 1024;
const heapUsedMiB = bytesToMiB(memUsage.heapUsed);
const heapTotalMiB = bytesToMiB(memUsage.heapTotal);
663
-
const heapPercent = heapTotalMiB > 0 ? (heapUsedMiB / heapTotalMiB) * 100 : 0;
687
+
const heapPercent =
688
+
heapTotalMiB > 0 ? (heapUsedMiB / heapTotalMiB) * 100 : 0;
const rssMiB = bytesToMiB(memUsage.rss);
const externalMiB = bytesToMiB(memUsage.external || 0);
const arrayBuffersMiB = bytesToMiB(memUsage.arrayBuffers || 0);
heapUsed: Math.round(heapUsedMiB),
heapTotal: Math.round(heapTotalMiB),