瀏覽代碼

fix(stats): fall back after full sync failure (#41411)

opencode-agent[bot] 1 周之前
父節點
當前提交
0bff28de09
共有 2 個文件被更改,包括 14 次插入4 次删除
  1. 1 1
      packages/stats/core/src/athena.ts
  2. 13 3
      packages/stats/server/src/stat-sync.ts

+ 1 - 1
packages/stats/core/src/athena.ts

@@ -9,7 +9,7 @@ import { Effect, Layer } from "effect"
 import * as Context from "effect/Context"
 import { Resource } from "sst/resource"
 
-const ATHENA_MAX_POLL_ATTEMPTS = 300
+const ATHENA_MAX_POLL_ATTEMPTS = 900
 const ATHENA_PAGE_SIZE = 1000
 
 export type AthenaData = Record<string, string>

+ 13 - 3
packages/stats/server/src/stat-sync.ts

@@ -19,9 +19,19 @@ const daemon = Effect.gen(function* () {
   let lastFullDay = ""
   const pass = Effect.gen(function* () {
     const today = new Date().toISOString().slice(0, 10)
-    const full = lastFullDay !== today
-    yield* syncStats({ full })
-    if (full) lastFullDay = today
+    if (lastFullDay !== today) {
+      const completed = yield* syncStats({ full: true }).pipe(
+        Effect.as(true),
+        Effect.catchCause((cause) =>
+          Effect.logWarning(`full stats sync failed; falling back to incremental sync ${Cause.pretty(cause)}`).pipe(
+            Effect.as(false),
+          ),
+        ),
+      )
+      lastFullDay = today
+      if (completed) return
+    }
+    yield* syncStats({ full: false })
   }).pipe(
     Effect.catchCause((cause) =>
       Effect.logWarning(`stats sync failed ${JSON.stringify({ cause: Cause.pretty(cause) })}`),