|
3 | 3 | import Line from '~/components/charts/Line.svelte'; |
4 | 4 | import PieChart from '~/components/charts/PieChart.svelte'; |
5 | 5 | import type { Visit } from '~/db/schema'; |
6 | | - import { groupBy, groupByHour } from '~/lib/utils'; |
| 6 | + import { groupBy, groupSteps } from '~/lib/utils'; |
7 | 7 | import type { Kind } from '~/share/schema'; |
8 | 8 |
|
9 | 9 | const URL_LABELS = new Map([ |
|
15 | 15 | ['security.utcode.net', 'セキュリティ'] |
16 | 16 | ]); |
17 | 17 |
|
| 18 | + const SAMPLING_COUNT = 20; |
| 19 | +
|
18 | 20 | type Props = { |
19 | 21 | data: Visit[]; |
20 | 22 | duration: number; |
21 | 23 | lastFetch: Date; |
22 | 24 | kind: Kind | 'all'; |
23 | 25 | }; |
| 26 | + const MILLISECS_PER_DAY = 24 * 60 * 60 * 1000; |
24 | 27 | const { data, duration, lastFetch }: Props = $props(); |
| 28 | + const start = $derived(new Date(lastFetch.getTime() - duration * MILLISECS_PER_DAY)); |
25 | 29 | const sanitizedData = $derived( |
26 | 30 | data.map((item) => { |
27 | 31 | const sanitized = item.url.split('://')[1]?.split('/')[0]; |
|
46 | 50 | }) |
47 | 51 | ); |
48 | 52 |
|
49 | | - const titles = $derived(groupByHour(lastFetch, grouped[0].val).map((v) => v[1])); |
| 53 | + const titles = $derived( |
| 54 | + groupSteps(lastFetch, grouped[0].val, start, SAMPLING_COUNT).map((v) => v[1]) |
| 55 | + ); |
50 | 56 | const linedata = $derived( |
51 | 57 | grouped.map((e) => ({ |
52 | 58 | name: URL_LABELS.get(e.key) ?? e.key, |
53 | | - data: groupByHour(lastFetch, e.val).map((row) => row[0]) |
| 59 | + data: groupSteps(lastFetch, e.val, start, SAMPLING_COUNT).map((row) => row[0]) |
54 | 60 | })) |
55 | 61 | ); |
56 | 62 | </script> |
|
0 commit comments