Openstatus
www.openstatus.dev
1import type { ChartConfig } from "@/components/ui/chart";
2
3export const chartData = Array.from({ length: 45 }, (_, i) => {
4 const date = new Date();
5 date.setDate(date.getDate() - i);
6
7 // Simulate realistic daily status distribution that sums to 1440 minutes
8 let error = 0;
9 let degraded = 0;
10 let success = 1440; // Start with all minutes as ok
11 let info = 0;
12
13 // Simulate some incidents on certain days
14 if (i === 3) {
15 // Day 3: Major incident for 2 hours (120 minutes)
16 error = 120;
17 success -= error;
18 } else if (i === 16) {
19 // Day 16: Degraded performance for 4 hours (240 minutes)
20 degraded = 240;
21 success -= degraded;
22 } else if (i === 8) {
23 // Day 8: Brief outage (30 minutes) + some degraded performance (60 minutes)
24 error = 30;
25 degraded = 60;
26 success -= error + degraded;
27 } else if (i === 13) {
28 info = 120;
29 success -= info;
30 } else if (i === 22) {
31 // Day 22: Extended degraded performance (6 hours = 360 minutes)
32 degraded = 360;
33 success -= degraded;
34 } else if (Math.random() > 0.85) {
35 // Random minor issues on some days (5-15 minutes of degraded performance)
36 degraded = Math.floor(Math.random() * 10) + 5;
37 success -= degraded;
38 }
39
40 return {
41 timestamp: date.getTime(),
42 info,
43 degraded,
44 error,
45 success,
46 };
47}).reverse();
48
49export const chartConfig = {
50 success: {
51 label: "success",
52 color: "var(--success)",
53 },
54 degraded: {
55 label: "degraded",
56 color: "var(--warning)",
57 },
58 error: {
59 label: "error",
60 color: "var(--destructive)",
61 },
62 info: {
63 label: "info",
64 color: "var(--info)",
65 },
66} satisfies ChartConfig;