Просмотр исходного кода

feat(stats): show model users metric

Adam 1 месяц назад
Родитель
Сommit
233d065dd5

+ 14 - 0
.github/workflows/deploy.yml

@@ -46,3 +46,17 @@ jobs:
           SENTRY_RELEASE: web@${{ github.sha }}
           VITE_SENTRY_DSN: ${{ vars.WEB_SENTRY_DSN }}
           VITE_SENTRY_RELEASE: web@${{ github.sha }}
+
+      - run: bun sst shell --stage=${{ github.ref_name }} -- bun run --cwd packages/stats/core db:migrate
+        env:
+          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+          PLANETSCALE_SERVICE_TOKEN_NAME: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_NAME }}
+          PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
+          STRIPE_SECRET_KEY: ${{ github.ref_name == 'production' && secrets.STRIPE_SECRET_KEY_PROD || secrets.STRIPE_SECRET_KEY_DEV }}
+          HONEYCOMB_API_KEY: ${{ secrets.HONEYCOMB_API_KEY }}
+          SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
+          SENTRY_ORG: ${{ vars.SENTRY_ORG }}
+          SENTRY_PROJECT: ${{ vars.WEB_SENTRY_PROJECT }}
+          SENTRY_RELEASE: web@${{ github.sha }}
+          VITE_SENTRY_DSN: ${{ vars.WEB_SENTRY_DSN }}
+          VITE_SENTRY_RELEASE: web@${{ github.sha }}

+ 1 - 0
packages/stats/app/src/routes/[lab]/[model].tsx

@@ -340,6 +340,7 @@ function ModelOverview(props: { data: StatsModelData | null }) {
         {(data) => (
           <div data-component="model-metric-grid">
             <MetricCard label="Tokens" value={formatTokens(data().totals.tokens)} detail="last two months" />
+            <MetricCard label="Users" value={formatUsers(data().totals.users)} detail="unique users" />
             <MetricCard label="Sessions" value={formatInteger(data().totals.sessions)} detail="completed sessions" />
             <MetricCard
               label="Token Share"

+ 2 - 0
packages/stats/core/src/domain/home.ts

@@ -53,6 +53,7 @@ export type StatsModelData = {
   tokenChange: number
   totals: {
     sessions: number
+    users: number
     tokens: number
     cost: number
     tokensPerSession: number
@@ -285,6 +286,7 @@ function buildStatsModelData(
     tokenChange: percentChange(current.totalTokens, previous.totalTokens),
     totals: {
       sessions: current.sessions,
+      users: current.uniqueUsers,
       tokens: current.totalTokens,
       cost: round(microcentsToDollars(current.totalCostMicrocents), 2),
       tokensPerSession: current.sessions > 0 ? Math.round(current.totalTokens / current.sessions) : 0,