Skip to content

Commit 5b49b5c

Browse files
committed
update dashboard
1 parent e866565 commit 5b49b5c

File tree

5 files changed

+150
-1
lines changed

5 files changed

+150
-1
lines changed

apps/web/src/components/tools/auth0/dashboard.tsx

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,32 @@ interface ConversionData {
2323
conversion_rate: number
2424
}
2525

26+
interface SummaryMetrics {
27+
total_users: number
28+
total_applications: number
29+
total_apis: number
30+
total_connections: number
31+
}
32+
33+
interface UsersResult {
34+
data: {
35+
total_users: number
36+
total_signups: number
37+
total_active_users: number
38+
total_failed_users: number
39+
first_seen: string
40+
last_seen: string
41+
}[]
42+
}
43+
2644
export default function Auth0Dashboard() {
2745
const [token] = useQueryState('token')
46+
const [summaryMetrics, setSummaryMetrics] = useState<SummaryMetrics>({
47+
total_users: 0,
48+
total_applications: 0,
49+
total_apis: 0,
50+
total_connections: 0
51+
})
2852
const [monthlySignUps, setMonthlySignUps] = useState<number>(0)
2953
const [monthlyMau, setMonthlyMau] = useState<number>(0)
3054
const [conversionRate, setConversionRate] = useState<number>(0)
@@ -36,14 +60,34 @@ export default function Auth0Dashboard() {
3660
if (!token) return
3761

3862
try {
39-
const [monthlySignUpsResult, monthlyMauResult, dauResult, authMechResult, conversionResult] = await Promise.all([
63+
const [
64+
usersResult,
65+
applicationsResult,
66+
apisResult,
67+
connectionsResult,
68+
monthlySignUpsResult,
69+
monthlyMauResult,
70+
dauResult,
71+
authMechResult,
72+
conversionResult
73+
] = await Promise.all([
74+
pipe<UsersResult>(token, 'auth0_users_total'),
75+
pipe(token, 'auth0_applications'),
76+
pipe(token, 'auth0_apis'),
77+
pipe(token, 'auth0_connections'),
4078
pipe(token, 'auth0_signups'),
4179
pipe(token, 'auth0_mau'),
4280
pipe<{ data: DauDataPoint[] }>(token, 'auth0_dau_ts'),
4381
pipe<{ data: AuthMechData[] }>(token, 'auth0_mech_usage'),
4482
pipe<{ data: ConversionData[] }>(token, 'auth0_conversion_rate')
4583
])
4684

85+
setSummaryMetrics({
86+
total_users: usersResult?.data?.[0]?.total_users || 0,
87+
total_applications: applicationsResult?.data?.length || 0,
88+
total_apis: apisResult?.data?.length || 0,
89+
total_connections: connectionsResult?.data?.length || 0
90+
})
4791
setMonthlySignUps(monthlySignUpsResult.data[0]?.total || 0)
4892
setMonthlyMau(monthlyMauResult.data[0]?.active || 0)
4993
setConversionRate(conversionResult.data[0]?.conversion_rate || 0)
@@ -59,6 +103,26 @@ export default function Auth0Dashboard() {
59103

60104
return (
61105
<div className="space-y-8">
106+
{/* Summary Card */}
107+
<div className="grid grid-cols-4 gap-4 p-6 rounded-lg border bg-card text-card-foreground shadow-sm">
108+
<div>
109+
<p className="text-sm font-medium text-muted-foreground">Total Users</p>
110+
<p className="text-2xl font-bold">{summaryMetrics.total_users.toLocaleString()}</p>
111+
</div>
112+
<div>
113+
<p className="text-sm font-medium text-muted-foreground">Applications</p>
114+
<p className="text-2xl font-bold">{summaryMetrics.total_applications.toLocaleString()}</p>
115+
</div>
116+
<div>
117+
<p className="text-sm font-medium text-muted-foreground">APIs</p>
118+
<p className="text-2xl font-bold">{summaryMetrics.total_apis.toLocaleString()}</p>
119+
</div>
120+
<div>
121+
<p className="text-sm font-medium text-muted-foreground">Connections</p>
122+
<p className="text-2xl font-bold">{summaryMetrics.total_connections.toLocaleString()}</p>
123+
</div>
124+
</div>
125+
62126
{/* Metrics Row */}
63127
<div className="grid gap-4 md:grid-cols-3">
64128
<MetricCard

tinybird/pipes/auth0_apis.pipe

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
TOKEN "read" READ
2+
3+
NODE get_apis
4+
SQL >
5+
6+
SELECT
7+
event.data.audience::String as api_identifier,
8+
count() as total_events,
9+
min(event_time) as first_seen,
10+
max(event_time) as last_seen
11+
FROM auth0
12+
WHERE
13+
event.data.audience::String != ''
14+
AND event_type IN ('seccft', 'sertft') -- Token issuance events
15+
GROUP BY
16+
event.data.audience::String
17+
ORDER BY
18+
total_events DESC
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
TOKEN "read" READ
2+
3+
NODE get_applications
4+
SQL >
5+
6+
SELECT
7+
event.data.client_id::String as client_id,
8+
event.data.client_name::String as client_name,
9+
count() as total_events,
10+
min(event_time) as first_seen,
11+
max(event_time) as last_seen
12+
FROM auth0
13+
WHERE
14+
event.data.client_id::String != ''
15+
AND event.data.client_name::String != ''
16+
GROUP BY
17+
event.data.client_id::String,
18+
event.data.client_name::String
19+
ORDER BY
20+
total_events DESC
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
TOKEN "read" READ
2+
3+
NODE get_connections
4+
SQL >
5+
6+
SELECT
7+
event.data.connection::String as connection_name,
8+
event.data.connection_id::String as connection_id,
9+
event.data.strategy::String as strategy,
10+
event.data.strategy_type::String as strategy_type,
11+
count() as total_events,
12+
countIf(event_type = 'ss') as successful_signups,
13+
countIf(event_type = 's') as successful_logins,
14+
countIf(event_type = 'f') as failed_attempts,
15+
min(event_time) as first_seen,
16+
max(event_time) as last_seen
17+
FROM auth0
18+
WHERE
19+
event.data.connection::String != ''
20+
AND event.data.strategy::String != ''
21+
GROUP BY
22+
event.data.connection::String,
23+
event.data.connection_id::String,
24+
event.data.strategy::String,
25+
event.data.strategy_type::String
26+
HAVING
27+
successful_signups > 0 OR
28+
successful_logins > 0 OR
29+
failed_attempts > 0
30+
ORDER BY
31+
total_events DESC
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
TOKEN "read" READ
2+
3+
NODE get_total_users
4+
SQL >
5+
6+
SELECT
7+
count(DISTINCT event.data.user_id::String) as total_users,
8+
countIf(DISTINCT event.data.user_id::String, event_type = 'ss') as total_signups,
9+
countIf(DISTINCT event.data.user_id::String, event_type = 's') as total_active_users,
10+
countIf(DISTINCT event.data.user_id::String, event_type = 'f') as total_failed_users,
11+
min(event_time) as first_seen,
12+
max(event_time) as last_seen
13+
FROM auth0
14+
WHERE
15+
event.data.user_id::String != ''
16+
AND event.data.user_id::String != 'undefined'

0 commit comments

Comments
 (0)