forked from CodebuffAI/codebuff
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcalculate-dau.ts
More file actions
37 lines (31 loc) · 1.22 KB
/
Copy pathcalculate-dau.ts
File metadata and controls
37 lines (31 loc) · 1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { pluralize } from '@codebuff/common/util/string'
import { db } from '@codebuff/internal/db'
import * as schema from '@codebuff/internal/db/schema'
import { sql } from 'drizzle-orm'
async function calculateDAU() {
console.log('Calculating DAU for the last 7 days...\n')
// Get daily active users for the last 7 complete days
const dailyStats = await db
.select({
date: sql<string>`DATE(${schema.message.finished_at})`,
uniqueUsers: sql<string>`COUNT(DISTINCT ${schema.message.user_id})`,
})
.from(schema.message)
.where(
sql`DATE(${schema.message.finished_at}) >= CURRENT_DATE - INTERVAL '7 days' AND DATE(${schema.message.finished_at}) < CURRENT_DATE`,
)
.groupBy(sql`DATE(${schema.message.finished_at})`)
.orderBy(sql`DATE(${schema.message.finished_at})`)
let totalUsers = 0
// Print daily stats
dailyStats.forEach((stat) => {
const users = parseInt(stat.uniqueUsers)
totalUsers += users
console.log(`${stat.date}: ${pluralize(users, 'user')}`)
})
// Calculate and print average
const avgUsers = Math.round(totalUsers / dailyStats.length)
console.log(`\nAverage DAU over last ${dailyStats.length} days: ${avgUsers}`)
}
// Run the script
calculateDAU()