From 1a462c54da456e369cb185b33c19083f71e04fef Mon Sep 17 00:00:00 2001 From: seaHi Date: Fri, 25 Sep 2026 11:47:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=20Cloudflare=20?= =?UTF-8?q?=E5=88=86=E6=9E=90=E6=95=B0=E6=8D=AE=E6=9F=A5=E8=AF=A2=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=B9=B6=E5=A4=84=E7=90=86=E9=94=99=E8=AF=AF=E8=BF=94?= =?UTF-8?q?=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/admin/AnalyticsPanel.svelte | 4 ++ src/lib/server/cloudflare.ts | 43 +++++++++++++------ 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/lib/components/admin/AnalyticsPanel.svelte b/src/lib/components/admin/AnalyticsPanel.svelte index eadbf1d..1bb12ce 100644 --- a/src/lib/components/admin/AnalyticsPanel.svelte +++ b/src/lib/components/admin/AnalyticsPanel.svelte @@ -55,6 +55,10 @@ if (r2Data.length > 0) { r2PayloadSize = r2Data[0]?.sum?.payloadSize || 0; } + + if (data.errorMsg) { + error = data.errorMsg; + } } loading = false; }) diff --git a/src/lib/server/cloudflare.ts b/src/lib/server/cloudflare.ts index 157f5e3..55f8efc 100644 --- a/src/lib/server/cloudflare.ts +++ b/src/lib/server/cloudflare.ts @@ -115,7 +115,7 @@ export async function fetchAnalytics(platform: App.Platform | undefined) { } } - const query = ` + const trafficQuery = ` query { viewer { zones(filter: { zoneTag: "${zoneId}" }) { @@ -134,39 +134,54 @@ export async function fetchAnalytics(platform: App.Platform | undefined) { requests pageViews } - uniq { - uniques - } } } - ${accountQuery} } } `; try { - const response = await fetch('https://api.cloudflare.com/client/v4/graphql', { + const trafficRes = await fetch('https://api.cloudflare.com/client/v4/graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }, - body: JSON.stringify({ query }) + body: JSON.stringify({ query: trafficQuery }) }); - const result = (await response.json()) as any; + const trafficResult = (await trafficRes.json()) as any; + const trafficData = trafficResult?.data?.viewer?.zones?.[0]?.httpRequests1dGroups || []; - const trafficData = result?.data?.viewer?.zones?.[0]?.httpRequests1dGroups || []; - const accountData = result?.data?.viewer?.accounts?.[0]; + let d1Data: any[] = []; + let r2Data: any[] = []; + + if (accountQuery) { + const accQueryStr = `query { viewer { ${accountQuery} } }`; + const accRes = await fetch('https://api.cloudflare.com/client/v4/graphql', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}` + }, + body: JSON.stringify({ query: accQueryStr }) + }); + const accResult = (await accRes.json()) as any; + const accountData = accResult?.data?.viewer?.accounts?.[0]; + if (accountData) { + d1Data = accountData.d1AnalyticsAdaptiveGroups || []; + r2Data = accountData.r2StorageAdaptiveGroups || []; + } + } return { traffic: trafficData, - d1: accountData?.d1AnalyticsAdaptiveGroups || [], - r2: accountData?.r2StorageAdaptiveGroups || [], + d1: d1Data, + r2: r2Data, missingEnvVars: !accountId || !d1Id || !r2Bucket }; - } catch (err) { + } catch (err: any) { console.error('Failed to fetch analytics', err); - return null; + return { errorMsg: '获取统计数据失败,请检查 Token 权限或网络环境' }; } }