mirror of
https://github.com/umami-software/umami.git
synced 2025-12-06 01:18:00 +01:00
Adds a CLI tool to generate realistic analytics data for local development and testing. Creates two demo websites with varying traffic patterns and realistic user behavior distributions.
65 lines
1.4 KiB
TypeScript
65 lines
1.4 KiB
TypeScript
import { uuid, randomFloat } from '../utils.js';
|
|
import type { EventData } from './events.js';
|
|
|
|
export interface RevenueConfig {
|
|
eventName: string;
|
|
minAmount: number;
|
|
maxAmount: number;
|
|
currency: string;
|
|
weight: number;
|
|
}
|
|
|
|
export interface RevenueData {
|
|
id: string;
|
|
websiteId: string;
|
|
sessionId: string;
|
|
eventId: string;
|
|
eventName: string;
|
|
currency: string;
|
|
revenue: number;
|
|
createdAt: Date;
|
|
}
|
|
|
|
export function generateRevenue(event: EventData, config: RevenueConfig): RevenueData | null {
|
|
if (event.eventName !== config.eventName) {
|
|
return null;
|
|
}
|
|
|
|
if (Math.random() > config.weight) {
|
|
return null;
|
|
}
|
|
|
|
const revenue = randomFloat(config.minAmount, config.maxAmount);
|
|
|
|
return {
|
|
id: uuid(),
|
|
websiteId: event.websiteId,
|
|
sessionId: event.sessionId,
|
|
eventId: event.id,
|
|
eventName: event.eventName!,
|
|
currency: config.currency,
|
|
revenue: Math.round(revenue * 100) / 100, // Round to 2 decimal places
|
|
createdAt: event.createdAt,
|
|
};
|
|
}
|
|
|
|
export function generateRevenueForEvents(
|
|
events: EventData[],
|
|
configs: RevenueConfig[],
|
|
): RevenueData[] {
|
|
const revenueEntries: RevenueData[] = [];
|
|
|
|
for (const event of events) {
|
|
if (!event.eventName) continue;
|
|
|
|
for (const config of configs) {
|
|
const revenue = generateRevenue(event, config);
|
|
if (revenue) {
|
|
revenueEntries.push(revenue);
|
|
break; // Only one revenue per event
|
|
}
|
|
}
|
|
}
|
|
|
|
return revenueEntries;
|
|
}
|