Openstatus
www.openstatus.dev
1import { z } from "zod";
2import { db, eq, schema } from "../src";
3import { selectMonitorSchema } from "../src/schema";
4import type { monitorRegionSchema } from "../src/schema/constants";
5
6const rawMonitors = await db.select().from(schema.monitor);
7
8const monitors = z.array(selectMonitorSchema).parse(rawMonitors);
9for (const monitor of monitors) {
10 const regions = monitor.regions.slice();
11 // Asia Pacific
12 updateRegion("hkg", "sin", regions);
13
14 // North America
15 updateRegion("atl", "dfw", regions);
16 updateRegion("mia", "dfw", regions);
17 updateRegion("gdl", "dfw", regions);
18 updateRegion("qro", "dfw", regions);
19 updateRegion("bos", "ewr", regions);
20 updateRegion("phx", "lax", regions);
21 updateRegion("sea", "sjc", regions);
22 updateRegion("yul", "yyz", regions);
23 updateRegion("den", "dfw", regions);
24
25 // Europe
26 updateRegion("waw", "ams", regions);
27 updateRegion("mad", "cdg", regions);
28 updateRegion("otp", "fra", regions);
29
30 // South America
31 updateRegion("bog", "gru", regions);
32 updateRegion("gig", "gru", regions);
33 updateRegion("scl", "gru", regions);
34 updateRegion("eze", "gru", regions);
35 const newRegions = regions.join(",");
36 // console.log("new regions:",newRegions)
37 await db
38 .update(schema.monitor)
39 .set({ regions: newRegions })
40 .where(eq(schema.monitor.id, monitor.id))
41 .execute();
42}
43
44export function updateRegion(
45 oldRegion: z.infer<typeof monitorRegionSchema>,
46 newRegion: z.infer<typeof monitorRegionSchema>,
47 regions: z.infer<typeof monitorRegionSchema>[],
48) {
49 const regionIndex = regions.indexOf(oldRegion);
50 if (regionIndex !== -1) {
51 const newRegionIndex = regions.indexOf(newRegion);
52 if (newRegionIndex === -1) {
53 regions[regionIndex] = newRegion;
54 }
55 if (newRegionIndex !== -1) {
56 regions.splice(regionIndex, 1);
57 }
58 }
59}