import "@mantine/core/styles.css"; import "@mantine/code-highlight/styles.css"; import classes from "./App.module.css"; import PrometheusLogo from "./images/prometheus-logo.svg"; import { AppShell, Burger, Button, Group, MantineProvider, Menu, Skeleton, Text, createTheme, rem, } from "@mantine/core"; import { useDisclosure } from "@mantine/hooks"; import { IconBellFilled, IconChartAreaFilled, IconChevronDown, IconChevronRight, IconCloudDataConnection, IconDatabase, IconFileAnalytics, IconFlag, IconHeartRateMonitor, IconHelp, IconInfoCircle, IconServerCog, } from "@tabler/icons-react"; import { BrowserRouter, NavLink, Navigate, Route, Routes, } from "react-router-dom"; import Graph from "./pages/graph"; import Alerts from "./pages/alerts"; import { IconTable } from "@tabler/icons-react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; // import { ReactQueryDevtools } from "react-query/devtools"; import Rules from "./pages/rules"; import Targets from "./pages/targets"; import ServiceDiscovery from "./pages/service-discovery"; import Status from "./pages/status"; import TSDBStatus from "./pages/tsdb-status"; import Flags from "./pages/flags"; import Config from "./pages/config"; import { Suspense, useContext } from "react"; import ErrorBoundary from "./error-boundary"; import { ThemeSelector } from "./theme-selector"; import { SettingsContext } from "./settings"; import Agent from "./pages/agent"; const queryClient = new QueryClient(); const monitoringStatusPages = [ { title: "Targets", path: "/targets", icon: , element: , }, { title: "Rules", path: "/rules", icon: , element: , }, { title: "Service discovery", path: "/service-discovery", icon: ( ), element: , }, ]; const serverStatusPages = [ { title: "Runtime & build information", path: "/status", icon: , element: , }, { title: "TSDB status", path: "/tsdb-status", icon: , element: , }, { title: "Command-line flags", path: "/flags", icon: , element: , }, { title: "Configuration", path: "/config", icon: , element: , }, ]; const allStatusPages = [...monitoringStatusPages, ...serverStatusPages]; const theme = createTheme({ colors: { "codebox-bg": [ "#f5f5f5", "#e7e7e7", "#cdcdcd", "#b2b2b2", "#9a9a9a", "#8b8b8b", "#848484", "#717171", "#656565", "#575757", ], }, }); function App() { const [opened, { toggle }] = useDisclosure(); const { agentMode } = useContext(SettingsContext); const navLinks = ( <> {allStatusPages.map((p) => ( } /> ))} } /> Monitoring status {monitoringStatusPages.map((p) => ( {p.title} ))} Server status {serverStatusPages.map((p) => ( {p.title} ))} ); return ( Prometheus{agentMode && " Agent"} {navLinks} {} {navLinks} ( ))} > } /> } /> } /> } /> {allStatusPages.map((p) => ( ))} {/* */} ); } export default App;