mirror of
https://github.com/anomalyco/opencode.git
synced 2026-05-13 15:44:56 +00:00
zen: stat worker
This commit is contained in:
@@ -293,3 +293,12 @@ new sst.cloudflare.x.SolidStart("Console", {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
////////////////
|
||||||
|
// HELPERS
|
||||||
|
////////////////
|
||||||
|
|
||||||
|
export const stat = new sst.cloudflare.Worker("Stat", {
|
||||||
|
handler: "packages/console/function/src/stat.ts",
|
||||||
|
link: [database],
|
||||||
|
})
|
||||||
|
|||||||
1
packages/console/core/sst-env.d.ts
vendored
1
packages/console/core/sst-env.d.ts
vendored
@@ -298,6 +298,7 @@ declare module "sst" {
|
|||||||
"EnterpriseStorage": cloudflare.R2Bucket
|
"EnterpriseStorage": cloudflare.R2Bucket
|
||||||
"GatewayKv": cloudflare.KVNamespace
|
"GatewayKv": cloudflare.KVNamespace
|
||||||
"LogProcessor": cloudflare.Service
|
"LogProcessor": cloudflare.Service
|
||||||
|
"Stat": cloudflare.Service
|
||||||
"ZenData": cloudflare.R2Bucket
|
"ZenData": cloudflare.R2Bucket
|
||||||
"ZenDataNew": cloudflare.R2Bucket
|
"ZenDataNew": cloudflare.R2Bucket
|
||||||
}
|
}
|
||||||
|
|||||||
39
packages/console/function/src/stat.ts
Normal file
39
packages/console/function/src/stat.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import { WorkerEntrypoint } from "cloudflare:workers"
|
||||||
|
import { and, Database, inArray } from "@opencode-ai/console-core/drizzle/index.js"
|
||||||
|
import { ModelTpsRateLimitTable } from "@opencode-ai/console-core/schema/ip.sql.js"
|
||||||
|
|
||||||
|
type Result = Record<string, { qualify: number; unqualify: number }>
|
||||||
|
|
||||||
|
export default class Stat extends WorkerEntrypoint {
|
||||||
|
async fetch() {
|
||||||
|
return new Response("Not Found", { status: 404 })
|
||||||
|
}
|
||||||
|
|
||||||
|
async getStats(ids: string[]): Promise<Result> {
|
||||||
|
if (ids.length === 0) return {}
|
||||||
|
|
||||||
|
const toInterval = (date: Date) =>
|
||||||
|
parseInt(
|
||||||
|
date
|
||||||
|
.toISOString()
|
||||||
|
.replace(/[^0-9]/g, "")
|
||||||
|
.substring(0, 12),
|
||||||
|
)
|
||||||
|
const now = Date.now()
|
||||||
|
const intervals = Array.from({ length: 5 }, (_, i) => toInterval(new Date(now - i * 60 * 1000)))
|
||||||
|
|
||||||
|
const rows = await Database.use((tx) =>
|
||||||
|
tx
|
||||||
|
.select()
|
||||||
|
.from(ModelTpsRateLimitTable)
|
||||||
|
.where(and(inArray(ModelTpsRateLimitTable.id, ids), inArray(ModelTpsRateLimitTable.interval, intervals))),
|
||||||
|
)
|
||||||
|
|
||||||
|
const result: Result = Object.fromEntries(ids.map((id) => [id, { qualify: 0, unqualify: 0 }]))
|
||||||
|
for (const row of rows) {
|
||||||
|
result[row.id].qualify += row.qualify
|
||||||
|
result[row.id].unqualify += row.unqualify
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
1
packages/console/function/sst-env.d.ts
vendored
1
packages/console/function/sst-env.d.ts
vendored
@@ -298,6 +298,7 @@ declare module "sst" {
|
|||||||
"EnterpriseStorage": cloudflare.R2Bucket
|
"EnterpriseStorage": cloudflare.R2Bucket
|
||||||
"GatewayKv": cloudflare.KVNamespace
|
"GatewayKv": cloudflare.KVNamespace
|
||||||
"LogProcessor": cloudflare.Service
|
"LogProcessor": cloudflare.Service
|
||||||
|
"Stat": cloudflare.Service
|
||||||
"ZenData": cloudflare.R2Bucket
|
"ZenData": cloudflare.R2Bucket
|
||||||
"ZenDataNew": cloudflare.R2Bucket
|
"ZenDataNew": cloudflare.R2Bucket
|
||||||
}
|
}
|
||||||
|
|||||||
1
packages/console/resource/sst-env.d.ts
vendored
1
packages/console/resource/sst-env.d.ts
vendored
@@ -298,6 +298,7 @@ declare module "sst" {
|
|||||||
"EnterpriseStorage": cloudflare.R2Bucket
|
"EnterpriseStorage": cloudflare.R2Bucket
|
||||||
"GatewayKv": cloudflare.KVNamespace
|
"GatewayKv": cloudflare.KVNamespace
|
||||||
"LogProcessor": cloudflare.Service
|
"LogProcessor": cloudflare.Service
|
||||||
|
"Stat": cloudflare.Service
|
||||||
"ZenData": cloudflare.R2Bucket
|
"ZenData": cloudflare.R2Bucket
|
||||||
"ZenDataNew": cloudflare.R2Bucket
|
"ZenDataNew": cloudflare.R2Bucket
|
||||||
}
|
}
|
||||||
|
|||||||
1
packages/enterprise/sst-env.d.ts
vendored
1
packages/enterprise/sst-env.d.ts
vendored
@@ -298,6 +298,7 @@ declare module "sst" {
|
|||||||
"EnterpriseStorage": cloudflare.R2Bucket
|
"EnterpriseStorage": cloudflare.R2Bucket
|
||||||
"GatewayKv": cloudflare.KVNamespace
|
"GatewayKv": cloudflare.KVNamespace
|
||||||
"LogProcessor": cloudflare.Service
|
"LogProcessor": cloudflare.Service
|
||||||
|
"Stat": cloudflare.Service
|
||||||
"ZenData": cloudflare.R2Bucket
|
"ZenData": cloudflare.R2Bucket
|
||||||
"ZenDataNew": cloudflare.R2Bucket
|
"ZenDataNew": cloudflare.R2Bucket
|
||||||
}
|
}
|
||||||
|
|||||||
1
packages/function/sst-env.d.ts
vendored
1
packages/function/sst-env.d.ts
vendored
@@ -298,6 +298,7 @@ declare module "sst" {
|
|||||||
"EnterpriseStorage": cloudflare.R2Bucket
|
"EnterpriseStorage": cloudflare.R2Bucket
|
||||||
"GatewayKv": cloudflare.KVNamespace
|
"GatewayKv": cloudflare.KVNamespace
|
||||||
"LogProcessor": cloudflare.Service
|
"LogProcessor": cloudflare.Service
|
||||||
|
"Stat": cloudflare.Service
|
||||||
"ZenData": cloudflare.R2Bucket
|
"ZenData": cloudflare.R2Bucket
|
||||||
"ZenDataNew": cloudflare.R2Bucket
|
"ZenDataNew": cloudflare.R2Bucket
|
||||||
}
|
}
|
||||||
|
|||||||
3
sst-env.d.ts
vendored
3
sst-env.d.ts
vendored
@@ -153,6 +153,9 @@ declare module "sst" {
|
|||||||
"type": "sst.sst.Linkable"
|
"type": "sst.sst.Linkable"
|
||||||
"value": string
|
"value": string
|
||||||
}
|
}
|
||||||
|
"Stat": {
|
||||||
|
"type": "sst.cloudflare.Worker"
|
||||||
|
}
|
||||||
"Teams": {
|
"Teams": {
|
||||||
"type": "sst.cloudflare.SolidStart"
|
"type": "sst.cloudflare.SolidStart"
|
||||||
"url": string
|
"url": string
|
||||||
|
|||||||
@@ -19,10 +19,14 @@ export default $config({
|
|||||||
},
|
},
|
||||||
async run() {
|
async run() {
|
||||||
await import("./infra/app.js")
|
await import("./infra/app.js")
|
||||||
await import("./infra/console.js")
|
const { stat } = await import("./infra/console.js")
|
||||||
await import("./infra/enterprise.js")
|
await import("./infra/enterprise.js")
|
||||||
if ($app.stage === "production" || $app.stage === "vimtor") {
|
if ($app.stage === "production" || $app.stage === "vimtor") {
|
||||||
await import("./infra/monitoring.js")
|
await import("./infra/monitoring.js")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
STAT_WORKER_NAME: stat.nodes.worker.scriptName,
|
||||||
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user