Openstatus www.openstatus.dev

๐Ÿ—‘๏ธ remove cron procedure (#724)

* ๐Ÿ—‘๏ธ remove cron procedure

* ๐Ÿ—‘๏ธ remove cron procedure

authored by

Thibault Le Ouay and committed by
GitHub
ea28cc76 c366768b

+32 -98
apps/docs/api-reference/status_report/post-status_report:idupdate.mdx apps/docs/api-reference/status_report/post-status_report:id/update.mdx
+1 -1
apps/docs/mint.json
··· 164 164 "api-reference/status_report/get-status_report", 165 165 "api-reference/status_report/delete-status_report:id", 166 166 "api-reference/status_report/post-status_report", 167 - "api-reference/status_report/post-status_report:idupdate" 167 + "api-reference/status_report/post-status_report:id/update" 168 168 ] 169 169 }, 170 170 {
+30 -15
apps/web/src/app/api/checker/cron/_cron.ts
··· 1 1 import type { NextRequest } from "next/server"; 2 2 import { CloudTasksClient } from "@google-cloud/tasks"; 3 3 import type { google } from "@google-cloud/tasks/build/protos/protos"; 4 - import type { z } from "zod"; 4 + import { z } from "zod"; 5 5 6 - import { createTRPCContext } from "@openstatus/api"; 7 - import { edgeRouter } from "@openstatus/api/src/edge"; 6 + import { and, db, eq } from "@openstatus/db"; 8 7 import type { MonitorStatus } from "@openstatus/db/src/schema"; 9 - import { selectMonitorSchema } from "@openstatus/db/src/schema"; 8 + import { 9 + monitor, 10 + monitorStatusTable, 11 + selectMonitorSchema, 12 + selectMonitorStatusSchema, 13 + } from "@openstatus/db/src/schema"; 10 14 11 15 import { env } from "@/env"; 12 16 import type { payloadSchema } from "../schema"; ··· 44 48 console.log(`Start cron for ${periodicity}`); 45 49 const timestamp = Date.now(); 46 50 47 - const ctx = createTRPCContext({ req, serverSideCall: true }); 48 - // FIXME: we should the proper type 49 - ctx.auth = { userId: "cron" } as any; 50 - const caller = edgeRouter.createCaller(ctx); 51 + // const ctx = createTRPCContext({ req, serverSideCall: true }); 52 + // // FIXME: we should the proper type 53 + // ctx.auth = { userId: "cron" } as any; 54 + // const caller = edgeRouter.createCaller(ctx); 51 55 52 - const monitors = await caller.monitor.getMonitorsForPeriodicity({ 53 - periodicity: periodicity, 54 - }); 55 - 56 + // const monitors = await caller.monitor.getMonitorsForPeriodicity({ 57 + // periodicity: periodicity, 58 + // }); 59 + const result = await db 60 + .select() 61 + .from(monitor) 62 + .where(and(eq(monitor.periodicity, periodicity), eq(monitor.active, true))) 63 + .all(); 64 + const monitors = z.array(selectMonitorSchema).parse(result); 56 65 const allResult = []; 57 66 58 67 for (const row of monitors) { 59 68 const selectedRegions = row.regions.length > 1 ? row.regions : ["auto"]; 60 69 61 - const monitorStatus = await caller.monitor.getMonitorStatusByMonitorId({ 62 - monitorId: row.id, 63 - }); 70 + const result = await db 71 + .select() 72 + .from(monitorStatusTable) 73 + .where(eq(monitorStatusTable.monitorId, row.id)) 74 + .all(); 75 + const monitorStatus = z.array(selectMonitorStatusSchema).parse(result); 76 + // const monitorStatus = await caller.monitor.getMonitorStatusByMonitorId({ 77 + // monitorId: row.id, 78 + // }); 64 79 65 80 for (const region of selectedRegions) { 66 81 const status =
+1 -58
packages/api/src/router/monitor.ts
··· 19 19 import { allPlans } from "@openstatus/plans"; 20 20 21 21 import { trackNewMonitor } from "../analytics"; 22 - import { 23 - createTRPCRouter, 24 - cronProcedure, 25 - protectedProcedure, 26 - publicProcedure, 27 - } from "../trpc"; 22 + import { createTRPCRouter, protectedProcedure, publicProcedure } from "../trpc"; 28 23 29 24 export const monitorRouter = createTRPCRouter({ 30 25 create: protectedProcedure ··· 285 280 .all(); 286 281 287 282 return z.array(selectMonitorSchema).parse(monitors); 288 - }), 289 - 290 - getMonitorsForPeriodicity: cronProcedure 291 - .input(z.object({ periodicity: monitorPeriodicitySchema })) 292 - .query(async (opts) => { 293 - const result = await opts.ctx.db 294 - .select() 295 - .from(monitor) 296 - .where( 297 - and( 298 - eq(monitor.periodicity, opts.input.periodicity), 299 - eq(monitor.active, true), 300 - ), 301 - ) 302 - .all(); 303 - return z.array(selectMonitorSchema).parse(result); 304 - }), 305 - 306 - getMonitorStatusByMonitorId: cronProcedure 307 - .input(z.object({ monitorId: z.number() })) 308 - .query(async (opts) => { 309 - const result = await opts.ctx.db 310 - .select() 311 - .from(monitorStatusTable) 312 - .where(eq(monitorStatusTable.monitorId, opts.input.monitorId)) 313 - .all(); 314 - return z.array(selectMonitorStatusSchema).parse(result); 315 - }), 316 - 317 - // FOR TESTING 318 - upsertMonitorStatus: cronProcedure 319 - .input(insertMonitorStatusSchema) 320 - .mutation(async (opts) => { 321 - const { status, region, monitorId } = opts.input; 322 - await opts.ctx.db 323 - .insert(monitorStatusTable) 324 - .values({ status, region, monitorId: Number(monitorId) }) 325 - .onConflictDoUpdate({ 326 - target: [monitorStatusTable.monitorId, monitorStatusTable.region], 327 - set: { status, updatedAt: new Date() }, 328 - }); 329 - }), 330 - 331 - getAllPagesForMonitor: cronProcedure 332 - .input(z.object({ monitorId: z.number() })) 333 - .query(async (opts) => { 334 - const allPages = await opts.ctx.db 335 - .select() 336 - .from(monitorsToPages) 337 - .where(eq(monitorsToPages.monitorId, opts.input.monitorId)) 338 - .all(); 339 - return allPages; 340 283 }), 341 284 342 285 // rename to getActiveMonitorsCount
-24
packages/api/src/trpc.ts
··· 206 206 * @see https://trpc.io/docs/procedures 207 207 */ 208 208 export const protectedProcedure = t.procedure.use(enforceUserIsAuthed); 209 - 210 - /** 211 - * Reusable middleware that enforces only cron before running the 212 - * procedure 213 - */ 214 - const enforeUserIsCron = t.middleware(async ({ ctx, next }) => { 215 - if (!ctx.auth?.userId || ctx.auth.userId !== "cron") { 216 - throw new TRPCError({ code: "UNAUTHORIZED" }); 217 - } 218 - 219 - return next({ 220 - ctx: { 221 - auth: { 222 - ...ctx.auth, 223 - userId: ctx.auth.userId, 224 - }, 225 - }, 226 - }); 227 - }); 228 - 229 - /** 230 - * Protected (cron) procedure 231 - */ 232 - export const cronProcedure = t.procedure.use(enforeUserIsCron);