Skip to content

Commit a282503

Browse files
committed
feat(indexd): add connect key stats
1 parent 066de1a commit a282503

File tree

7 files changed

+111
-4
lines changed

7 files changed

+111
-4
lines changed

.changeset/brave-foxes-play.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'indexd': minor
3+
---
4+
5+
Added connect key stats to metrics page.

.changeset/tall-cats-hunt.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@siafoundation/indexd-types': minor
3+
'@siafoundation/indexd-js': minor
4+
'@siafoundation/indexd-react': minor
5+
---
6+
7+
Added connect key stats API.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import {
2+
RemoteDataStates,
3+
StateError,
4+
StateNoneYet,
5+
Skeleton,
6+
useRemoteData,
7+
} from '@siafoundation/design-system'
8+
import { useAdminStatsConnectKeys } from '@siafoundation/indexd-react'
9+
import { InfoRow } from '../Data/PanelInfoRow'
10+
11+
export function MetricsConnectKeys() {
12+
const connectKeys = useAdminStatsConnectKeys()
13+
const stats = useRemoteData(
14+
{
15+
connectKeys,
16+
},
17+
(data) => ({
18+
...data.connectKeys,
19+
}),
20+
)
21+
return (
22+
<RemoteDataStates
23+
data={stats}
24+
error={
25+
<StateError message="Error loading metrics. Please try again later." />
26+
}
27+
loading={
28+
<div className="flex flex-col gap-5 w-full">
29+
<InfoRow
30+
label="Total Connect Keys"
31+
value={<Skeleton className="h-12 w-[150px]" />}
32+
/>
33+
</div>
34+
}
35+
notFound={<StateNoneYet message="No metrics found." />}
36+
loaded={(stats) => (
37+
<div className="flex flex-col gap-5 w-full">
38+
<InfoRow
39+
label="Total Connect Keys"
40+
value={stats.total.toLocaleString()}
41+
/>
42+
{stats.quotas?.map((q) => (
43+
<InfoRow
44+
key={q.quota}
45+
label={q.quota}
46+
value={q.total.toLocaleString()}
47+
/>
48+
))}
49+
</div>
50+
)}
51+
/>
52+
)
53+
}

apps/indexd/components/Metrics/index.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@ import { Heading, Panel } from '@siafoundation/design-system'
22
import { MetricsSectors } from './MetricsSectors'
33
import { MetricsAccounts } from './MetricsAccounts'
44
import { MetricsContracts } from './MetricsContracts'
5+
import { MetricsConnectKeys } from './MetricsConnectKeys'
56

67
export function Metrics() {
78
return (
89
<div className="flex flex-wrap gap-5 p-5">
910
<Panel className="flex flex-col gap-5 p-5">
10-
<Heading size="24">Sectors</Heading>
11+
<Heading size="24">Accounts</Heading>
1112
<div className="w-[400px]">
12-
<MetricsSectors />
13+
<MetricsAccounts />
1314
</div>
1415
</Panel>
1516
<Panel className="flex flex-col gap-5 p-5">
16-
<Heading size="24">Accounts</Heading>
17+
<Heading size="24">Connect Keys</Heading>
1718
<div className="w-[400px]">
18-
<MetricsAccounts />
19+
<MetricsConnectKeys />
1920
</div>
2021
</Panel>
2122
<Panel className="flex flex-col gap-5 p-5">
@@ -24,6 +25,12 @@ export function Metrics() {
2425
<MetricsContracts />
2526
</div>
2627
</Panel>
28+
<Panel className="flex flex-col gap-5 p-5">
29+
<Heading size="24">Sectors</Heading>
30+
<div className="w-[400px]">
31+
<MetricsSectors />
32+
</div>
33+
</Panel>
2734
</div>
2835
)
2936
}

libs/indexd-js/src/admin.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,10 @@ import {
156156
AdminStatsHostsPayload,
157157
AdminStatsHostsResponse,
158158
adminStatsHostsRoute,
159+
AdminStatsConnectKeysParams,
160+
AdminStatsConnectKeysPayload,
161+
AdminStatsConnectKeysResponse,
162+
adminStatsConnectKeysRoute,
159163
AdminConsensusStateParams,
160164
AdminConsensusStatePayload,
161165
AdminConsensusStateResponse,
@@ -395,6 +399,11 @@ export function Admin({
395399
AdminStatsHostsPayload,
396400
AdminStatsHostsResponse
397401
>(axios, 'get', adminStatsHostsRoute),
402+
statsConnectKeys: buildRequestHandler<
403+
AdminStatsConnectKeysParams,
404+
AdminStatsConnectKeysPayload,
405+
AdminStatsConnectKeysResponse
406+
>(axios, 'get', adminStatsConnectKeysRoute),
398407
consensusState: buildRequestHandler<
399408
AdminConsensusStateParams,
400409
AdminConsensusStatePayload,

libs/indexd-react/src/admin.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ import {
140140
adminStatsHostsRoute,
141141
AdminStatsHostsParams,
142142
AdminStatsHostsResponse,
143+
adminStatsConnectKeysRoute,
144+
AdminStatsConnectKeysParams,
145+
AdminStatsConnectKeysResponse,
143146
adminConsensusStateRoute,
144147
AdminConsensusStateParams,
145148
AdminConsensusStateResponse,
@@ -648,6 +651,18 @@ export function useAdminStatsHosts(
648651
})
649652
}
650653

654+
export function useAdminStatsConnectKeys(
655+
args?: HookArgsSwr<
656+
AdminStatsConnectKeysParams,
657+
AdminStatsConnectKeysResponse
658+
>,
659+
) {
660+
return useGetSwr({
661+
...args,
662+
route: adminStatsConnectKeysRoute,
663+
})
664+
}
665+
651666
// consensus
652667

653668
export function useAdminConsensusState(

libs/indexd-types/src/admin/index.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,17 @@ export type AdminStatsHostsResponse = {
399399
failedScans: number
400400
}
401401

402+
export const adminStatsConnectKeysRoute = '/stats/connectkeys'
403+
export type AdminStatsConnectKeysParams = void
404+
export type AdminStatsConnectKeysPayload = void
405+
export type AdminStatsConnectKeysResponse = {
406+
total: number
407+
quotas: {
408+
quota: string
409+
total: number
410+
}[]
411+
}
412+
402413
// quotas
403414

404415
export const adminQuotasRoute = '/quotas'

0 commit comments

Comments
 (0)