import { Accordion, Box, Tabs } from "@mantine/core" import { client } from "app/client" import { Loader } from "components/Loader" import { Gauge } from "components/metrics/Gauge" 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" const shownMeters: Record = { "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", "com.commafeed.backend.service.DatabaseCleaningService.entriesDeleted": "Entries deleted", } const shownGauges: Record = { "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", "com.commafeed.frontend.ws.WebSocketSessions.users": "WebSocket users", "com.commafeed.frontend.ws.WebSocketSessions.sessions": "WebSocket sessions", } export function MetricsPage() { const query = useAsync(async () => await client.admin.getMetrics(), []) if (!query.result) return const { meters, gauges, timers } = query.result.data return ( }> Stats }> Timers {Object.keys(shownMeters).map(m => ( ))} {Object.keys(shownGauges).map(g => ( {shownGauges[g]}  ))} {Object.keys(timers).map(key => ( ))} ) }