83 lines
2.5 KiB
TypeScript
83 lines
2.5 KiB
TypeScript
import { ch, formatClickhouseDate, type IClickhouseEvent } from '@openpanel/db';
|
|
import { v4 as uuid } from 'uuid';
|
|
|
|
async function main() {
|
|
const startDate = new Date('2025-01-01T00:00:00Z');
|
|
const endDate = new Date();
|
|
const eventsPerDay = 25_000;
|
|
const variance = 3000;
|
|
|
|
// Event names to randomly choose from
|
|
const eventNames = ['click', 'purchase', 'signup', 'login', 'screen_view'];
|
|
|
|
// Loop through each day
|
|
for (
|
|
let currentDate = startDate;
|
|
currentDate <= endDate;
|
|
currentDate.setDate(currentDate.getDate() + 1)
|
|
) {
|
|
const events: IClickhouseEvent[] = [];
|
|
// Calculate random number of events for this day
|
|
const dailyEvents =
|
|
eventsPerDay + Math.floor(Math.random() * variance * 2) - variance;
|
|
|
|
// Create events for the day
|
|
for (let i = 0; i < dailyEvents; i++) {
|
|
const eventTime = new Date(currentDate);
|
|
// Distribute events throughout the day
|
|
eventTime.setHours(Math.floor(Math.random() * 24));
|
|
eventTime.setMinutes(Math.floor(Math.random() * 60));
|
|
eventTime.setSeconds(Math.floor(Math.random() * 60));
|
|
|
|
events.push({
|
|
id: uuid(),
|
|
name: eventNames[Math.floor(Math.random() * eventNames.length)]!,
|
|
device_id: `device_${Math.floor(Math.random() * 1000)}`,
|
|
profile_id: `profile_${Math.floor(Math.random() * 1000)}`,
|
|
project_id: 'testing',
|
|
session_id: `session_${Math.floor(Math.random() * 10_000)}`,
|
|
properties: {
|
|
hash: 'test-hash',
|
|
'query.utm_source': 'test',
|
|
},
|
|
created_at: formatClickhouseDate(eventTime),
|
|
country: 'US',
|
|
city: 'New York',
|
|
region: 'NY',
|
|
longitude: -74.006,
|
|
latitude: 40.7128,
|
|
os: 'macOS',
|
|
os_version: '13.0',
|
|
browser: 'Chrome',
|
|
browser_version: '120.0',
|
|
device: 'desktop',
|
|
brand: 'Apple',
|
|
model: 'MacBook Pro',
|
|
duration: Math.floor(Math.random() * 300),
|
|
path: `/page-${Math.floor(Math.random() * 20)}`,
|
|
origin: 'https://example.com',
|
|
referrer: 'https://google.com',
|
|
referrer_name: 'Google',
|
|
referrer_type: 'search',
|
|
imported_at: null,
|
|
sdk_name: 'test-script',
|
|
sdk_version: '1.0.0',
|
|
groups: [],
|
|
});
|
|
}
|
|
|
|
await ch.insert({
|
|
table: 'events',
|
|
values: events,
|
|
format: 'JSONEachRow',
|
|
});
|
|
|
|
// Log progress
|
|
console.log(
|
|
`Created ${dailyEvents} events for ${currentDate.toISOString().split('T')[0]}`
|
|
);
|
|
}
|
|
}
|
|
|
|
main().catch(console.error);
|