2026-06-16 11:09:11 +08:00
2026-05-27 15:19:31 +08:00
2026-06-16 11:09:11 +08:00
2026-06-16 11:09:11 +08:00
2026-06-16 11:09:11 +08:00

New API Analytics

Internal analytics dashboard for New API usage logs. The app reads PostgreSQL log data and visualizes calls, token consumption, model usage, channel usage, per-user aggregation, and raw request logs.

Requirements

  • Bun for local development and tests.
  • Node.js 20 for the production Docker image.
  • PostgreSQL database with New API tables described in docs/database.md.
  • PG_CONNECTION_STRING set to a PostgreSQL connection string.

Local Development

bun install
bun run dev

Open http://localhost:3000.

Verification

bun test
bun run lint
bun run build

bun test covers parser helpers, metric conversion, query behavior, cache behavior, theme helpers, and selected API route guardrails.

Smoke test: AO/Codex can update this README, pass lint, and open a GitLab MR.

Configuration

Create an environment file or export:

PG_CONNECTION_STRING=postgres://user:password@host:5432/database

The app uses this variable in lib/db.ts to create a pg connection pool.

Deployment

The included Dockerfile builds a standalone Next.js output and starts server.js on port 8019.

docker compose up -d --build

The default docker-compose.yml expects .env.production and an external Docker network named sinobridge.

For Coolify deployments, use docker-compose.coolify.yml. It expects runtime environment variables from Coolify and an external Docker network named coolify.

GitLab Manual Publish

Run the publish_on_runner manual GitLab job on the default branch and set DOCKER_LOGIN_COMMAND to the full Huawei Cloud SWR login command. The job uses the base90 runner.

Optional variables:

  • IMAGE_REPO: defaults to swr.cn-north-1.myhuaweicloud.com/sino-bridge/sinocode-analytics
  • IMAGE_TAG: defaults to the Git commit short SHA
  • PUSH_LATEST: defaults to true

Operational Notes

  • API query parameters are validated at the route layer. Invalid integers or reversed date ranges return HTTP 400.
  • Ranking limits are capped at 100 rows per request.
  • Log page size is capped at 200 rows per request.
  • Query results are cached in-process for 120 seconds with a 500-entry cap.
  • Metric definitions and quota conversion are documented in docs/metrics.md.
Description
New API analytics dashboard
Readme 363 KiB
Languages
TypeScript 87.2%
CSS 12.1%
Dockerfile 0.4%
JavaScript 0.3%