Skip to content

Commit 74147f4

Browse files
committed
Merge branch 'auth0-01' into auth0dash
2 parents 11aacee + 5b49b5c commit 74147f4

File tree

5 files changed

+152
-1
lines changed

5 files changed

+152
-1
lines changed

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

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,32 @@ interface ConversionData {
1515
conversion_rate: number
1616
}
1717

18+
interface SummaryMetrics {
19+
total_users: number
20+
total_applications: number
21+
total_apis: number
22+
total_connections: number
23+
}
24+
25+
interface UsersResult {
26+
data: {
27+
total_users: number
28+
total_signups: number
29+
total_active_users: number
30+
total_failed_users: number
31+
first_seen: string
32+
last_seen: string
33+
}[]
34+
}
35+
1836
export default function Auth0Dashboard() {
1937
const [token] = useQueryState('token')
38+
const [summaryMetrics, setSummaryMetrics] = useState<SummaryMetrics>({
39+
total_users: 0,
40+
total_applications: 0,
41+
total_apis: 0,
42+
total_connections: 0
43+
})
2044
const [monthlySignUps, setMonthlySignUps] = useState<number>(0)
2145
const [monthlyMau, setMonthlyMau] = useState<number>(0)
2246
const [conversionRate, setConversionRate] = useState<number>(0)
@@ -31,7 +55,23 @@ export default function Auth0Dashboard() {
3155
if (!token) return
3256

3357
try {
34-
const [monthlySignUpsResult, monthlyMauResult, dauResult, authMechResult, conversionResult, dailySignupsResult, dailyLoginFailsResult] = await Promise.all([
58+
const [
59+
usersResult,
60+
applicationsResult,
61+
apisResult,
62+
connectionsResult,
63+
monthlySignUpsResult,
64+
monthlyMauResult,
65+
dauResult,
66+
authMechResult,
67+
conversionResult,
68+
dailySignupsResult,
69+
dailyLoginFailsResult
70+
] = await Promise.all([
71+
pipe<UsersResult>(token, 'auth0_users_total'),
72+
pipe(token, 'auth0_applications'),
73+
pipe(token, 'auth0_apis'),
74+
pipe(token, 'auth0_connections'),
3575
pipe(token, 'auth0_signups'),
3676
pipe(token, 'auth0_mau'),
3777
pipe<{ data: DauDataPoint[] }>(token, 'auth0_dau_ts'),
@@ -41,6 +81,12 @@ export default function Auth0Dashboard() {
4181
pipe<{ data: DailyLoginFailsDataPoint[] }>(token, 'auth0_daily_login_fails')
4282
])
4383

84+
setSummaryMetrics({
85+
total_users: usersResult?.data?.[0]?.total_users || 0,
86+
total_applications: applicationsResult?.data?.length || 0,
87+
total_apis: apisResult?.data?.length || 0,
88+
total_connections: connectionsResult?.data?.length || 0
89+
})
4490
setMonthlySignUps(monthlySignUpsResult.data[0]?.total || 0)
4591
setMonthlyMau(monthlyMauResult.data[0]?.active || 0)
4692
setConversionRate(conversionResult.data[0]?.conversion_rate || 0)
@@ -58,6 +104,26 @@ export default function Auth0Dashboard() {
58104

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