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.
121 lines
3.4 KiB
JavaScript
121 lines
3.4 KiB
JavaScript
#!/usr/bin/env node
|
|
/* eslint-disable no-console */
|
|
|
|
/**
|
|
* Umami Sample Data Generator
|
|
*
|
|
* Generates realistic analytics data for local development and testing.
|
|
* Creates two demo websites:
|
|
* - Demo Blog: Low traffic (~100 sessions/month)
|
|
* - Demo SaaS: Average traffic (~500 sessions/day)
|
|
*
|
|
* Usage:
|
|
* npm run seed-data # Generate 30 days of data
|
|
* npm run seed-data -- --days 90 # Generate 90 days of data
|
|
* npm run seed-data -- --clear # Clear existing demo data first
|
|
* npm run seed-data -- --verbose # Show detailed progress
|
|
*/
|
|
|
|
import { seed, type SeedConfig } from './seed/index.js';
|
|
|
|
function parseArgs(): SeedConfig {
|
|
const args = process.argv.slice(2);
|
|
|
|
const config: SeedConfig = {
|
|
days: 30,
|
|
clear: false,
|
|
verbose: false,
|
|
};
|
|
|
|
for (let i = 0; i < args.length; i++) {
|
|
const arg = args[i];
|
|
|
|
if (arg === '--days' && args[i + 1]) {
|
|
config.days = parseInt(args[i + 1], 10);
|
|
if (isNaN(config.days) || config.days < 1) {
|
|
console.error('Error: --days must be a positive integer');
|
|
process.exit(1);
|
|
}
|
|
i++;
|
|
} else if (arg === '--clear') {
|
|
config.clear = true;
|
|
} else if (arg === '--verbose' || arg === '-v') {
|
|
config.verbose = true;
|
|
} else if (arg === '--help' || arg === '-h') {
|
|
printHelp();
|
|
process.exit(0);
|
|
} else if (arg.startsWith('--days=')) {
|
|
config.days = parseInt(arg.split('=')[1], 10);
|
|
if (isNaN(config.days) || config.days < 1) {
|
|
console.error('Error: --days must be a positive integer');
|
|
process.exit(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
return config;
|
|
}
|
|
|
|
function printHelp(): void {
|
|
console.log(`
|
|
Umami Sample Data Generator
|
|
|
|
Generates realistic analytics data for local development and testing.
|
|
|
|
Usage:
|
|
npm run seed-data [options]
|
|
|
|
Options:
|
|
--days <number> Number of days of data to generate (default: 30)
|
|
--clear Clear existing demo data before generating
|
|
--verbose, -v Show detailed progress
|
|
--help, -h Show this help message
|
|
|
|
Examples:
|
|
npm run seed-data # Generate 30 days of data
|
|
npm run seed-data -- --days 90 # Generate 90 days of data
|
|
npm run seed-data -- --clear # Clear existing demo data first
|
|
npm run seed-data -- --days 7 -v # Generate 7 days with verbose output
|
|
|
|
Generated Sites:
|
|
- Demo Blog: Low traffic (~90 sessions/month)
|
|
- Demo SaaS: Average traffic (~500 sessions/day) with revenue tracking
|
|
|
|
Note:
|
|
This script is blocked from running in production environments
|
|
(NODE_ENV=production or cloud platforms like Vercel/Netlify/Railway).
|
|
`);
|
|
}
|
|
|
|
function checkEnvironment(): void {
|
|
const nodeEnv = process.env.NODE_ENV;
|
|
|
|
if (nodeEnv === 'production') {
|
|
console.error('\nError: seed-data cannot run in production environment.');
|
|
console.error('This script is only for local development and testing.\n');
|
|
process.exit(1);
|
|
}
|
|
|
|
if (process.env.VERCEL || process.env.NETLIFY || process.env.RAILWAY_ENVIRONMENT) {
|
|
console.error('\nError: seed-data cannot run in cloud environments.');
|
|
console.error('This script is only for local development and testing.\n');
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
async function main(): Promise<void> {
|
|
console.log('\nUmami Sample Data Generator\n');
|
|
|
|
checkEnvironment();
|
|
|
|
const config = parseArgs();
|
|
|
|
try {
|
|
await seed(config);
|
|
} catch (error) {
|
|
console.error('\nError generating seed data:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main();
|