mirror of
https://github.com/umami-software/umami.git
synced 2026-02-11 16:17:13 +01:00
Merge branch 'dev' into boards
Some checks failed
Node.js CI / build (postgresql, 18.18, 10) (push) Has been cancelled
Some checks failed
Node.js CI / build (postgresql, 18.18, 10) (push) Has been cancelled
# Conflicts: # pnpm-lock.yaml
This commit is contained in:
commit
5ce1b40330
93 changed files with 3153 additions and 1340 deletions
69
scripts/seed/distributions/temporal.ts
Normal file
69
scripts/seed/distributions/temporal.ts
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
import { randomInt, type WeightedOption, weightedRandom } from '../utils.js';
|
||||
|
||||
const hourlyWeights: WeightedOption<number>[] = [
|
||||
{ value: 0, weight: 0.02 },
|
||||
{ value: 1, weight: 0.01 },
|
||||
{ value: 2, weight: 0.01 },
|
||||
{ value: 3, weight: 0.01 },
|
||||
{ value: 4, weight: 0.01 },
|
||||
{ value: 5, weight: 0.02 },
|
||||
{ value: 6, weight: 0.03 },
|
||||
{ value: 7, weight: 0.05 },
|
||||
{ value: 8, weight: 0.07 },
|
||||
{ value: 9, weight: 0.08 },
|
||||
{ value: 10, weight: 0.09 },
|
||||
{ value: 11, weight: 0.08 },
|
||||
{ value: 12, weight: 0.07 },
|
||||
{ value: 13, weight: 0.08 },
|
||||
{ value: 14, weight: 0.09 },
|
||||
{ value: 15, weight: 0.08 },
|
||||
{ value: 16, weight: 0.07 },
|
||||
{ value: 17, weight: 0.06 },
|
||||
{ value: 18, weight: 0.05 },
|
||||
{ value: 19, weight: 0.04 },
|
||||
{ value: 20, weight: 0.03 },
|
||||
{ value: 21, weight: 0.03 },
|
||||
{ value: 22, weight: 0.02 },
|
||||
{ value: 23, weight: 0.02 },
|
||||
];
|
||||
|
||||
const dayOfWeekWeights: WeightedOption<number>[] = [
|
||||
{ value: 0, weight: 0.08 }, // Sunday
|
||||
{ value: 1, weight: 0.16 }, // Monday
|
||||
{ value: 2, weight: 0.17 }, // Tuesday
|
||||
{ value: 3, weight: 0.17 }, // Wednesday
|
||||
{ value: 4, weight: 0.16 }, // Thursday
|
||||
{ value: 5, weight: 0.15 }, // Friday
|
||||
{ value: 6, weight: 0.11 }, // Saturday
|
||||
];
|
||||
|
||||
export function getWeightedHour(): number {
|
||||
return weightedRandom(hourlyWeights);
|
||||
}
|
||||
|
||||
export function getDayOfWeekMultiplier(dayOfWeek: number): number {
|
||||
const weight = dayOfWeekWeights.find(d => d.value === dayOfWeek)?.weight ?? 0.14;
|
||||
return weight / 0.14; // Normalize around 1.0
|
||||
}
|
||||
|
||||
export function generateTimestampForDay(day: Date): Date {
|
||||
const hour = getWeightedHour();
|
||||
const minute = randomInt(0, 59);
|
||||
const second = randomInt(0, 59);
|
||||
const millisecond = randomInt(0, 999);
|
||||
|
||||
const timestamp = new Date(day);
|
||||
timestamp.setHours(hour, minute, second, millisecond);
|
||||
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
export function getSessionCountForDay(baseCount: number, day: Date): number {
|
||||
const dayOfWeek = day.getDay();
|
||||
const multiplier = getDayOfWeekMultiplier(dayOfWeek);
|
||||
|
||||
// Add some random variance (±20%)
|
||||
const variance = 0.8 + Math.random() * 0.4;
|
||||
|
||||
return Math.round(baseCount * multiplier * variance);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue