Files
commafeed/commafeed-client/src/pages/admin/MetricsPage.tsx

75 lines
3.4 KiB
TypeScript
Raw Normal View History

2023-05-26 15:20:17 +02:00
import { Accordion, Box, Tabs } from "@mantine/core"
2022-08-14 18:15:40 +02:00
import { client } from "app/client"
import { Loader } from "components/Loader"
2023-05-26 15:20:17 +02:00
import { Gauge } from "components/metrics/Gauge"
2022-08-14 18:15:40 +02:00
import { Meter } from "components/metrics/Meter"
import { MetricAccordionItem } from "components/metrics/MetricAccordionItem"
import { Timer } from "components/metrics/Timer"
import { useAsync } from "react-async-hook"
import { TbChartAreaLine, TbClock } from "react-icons/tb"
2023-12-28 19:54:51 +01:00
const shownMeters: Record<string, string> = {
2023-05-01 11:20:44 +02:00
"com.commafeed.backend.feed.FeedRefreshEngine.refill": "Feed queue refill rate",
"com.commafeed.backend.feed.FeedRefreshWorker.feedFetched": "Feed fetching rate",
"com.commafeed.backend.feed.FeedRefreshUpdater.feedUpdated": "Feed update rate",
"com.commafeed.backend.feed.FeedRefreshUpdater.entryCacheHit": "Entry cache hit rate",
"com.commafeed.backend.feed.FeedRefreshUpdater.entryCacheMiss": "Entry cache miss rate",
2023-09-03 12:09:14 +02:00
"com.commafeed.backend.service.DatabaseCleaningService.entriesDeleted": "Entries deleted",
2022-08-14 18:15:40 +02:00
}
2023-12-28 19:54:51 +01:00
const shownGauges: Record<string, string> = {
2023-05-26 15:20:17 +02:00
"com.commafeed.backend.feed.FeedRefreshEngine.queue.size": "Queue size",
"com.commafeed.backend.feed.FeedRefreshEngine.worker.active": "Feed Worker active",
"com.commafeed.backend.feed.FeedRefreshEngine.updater.active": "Feed Updater active",
2023-06-21 14:20:14 +02:00
"com.commafeed.frontend.ws.WebSocketSessions.users": "WebSocket users",
"com.commafeed.frontend.ws.WebSocketSessions.sessions": "WebSocket sessions",
2023-05-26 15:20:17 +02:00
}
2022-08-14 18:15:40 +02:00
export function MetricsPage() {
2023-12-28 19:54:51 +01:00
const query = useAsync(async () => await client.admin.getMetrics(), [])
2022-08-14 18:15:40 +02:00
if (!query.result) return <Loader />
2023-05-26 15:20:17 +02:00
const { meters, gauges, timers } = query.result.data
2022-08-14 18:15:40 +02:00
return (
<Tabs defaultValue="stats">
<Tabs.List>
2023-12-29 23:09:30 +01:00
<Tabs.Tab value="stats" leftSection={<TbChartAreaLine size={14} />}>
2022-08-14 18:15:40 +02:00
Stats
</Tabs.Tab>
2023-12-29 23:09:30 +01:00
<Tabs.Tab value="timers" leftSection={<TbClock size={14} />}>
2022-08-14 18:15:40 +02:00
Timers
</Tabs.Tab>
</Tabs.List>
<Tabs.Panel value="stats" pt="xs">
<Accordion variant="contained" chevronPosition="left">
{Object.keys(shownMeters).map(m => (
<MetricAccordionItem key={m} metricKey={m} name={shownMeters[m]} headerValue={meters[m].count}>
<Meter meter={meters[m]} />
</MetricAccordionItem>
))}
</Accordion>
2023-05-26 15:20:17 +02:00
<Box pt="xs">
{Object.keys(shownGauges).map(g => (
<Box key={g}>
<span>{shownGauges[g]}&nbsp;</span>
<Gauge gauge={gauges[g]} />
</Box>
))}
</Box>
2022-08-14 18:15:40 +02:00
</Tabs.Panel>
<Tabs.Panel value="timers" pt="xs">
<Accordion variant="contained" chevronPosition="left">
{Object.keys(timers).map(key => (
<MetricAccordionItem key={key} metricKey={key} name={key} headerValue={timers[key].count}>
<Timer timer={timers[key]} />
</MetricAccordionItem>
))}
</Accordion>
</Tabs.Panel>
</Tabs>
)
}