Broker.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React, { Suspense } from 'react';
  2. import PageHeading from 'components/common/PageHeading/PageHeading';
  3. import * as Metrics from 'components/common/Metrics';
  4. import BytesFormatted from 'components/common/BytesFormatted/BytesFormatted';
  5. import useAppParams from 'lib/hooks/useAppParams';
  6. import {
  7. clusterBrokerMetricsPath,
  8. clusterBrokerMetricsRelativePath,
  9. ClusterBrokerParam,
  10. clusterBrokerPath,
  11. } from 'lib/paths';
  12. import { useClusterStats } from 'lib/hooks/api/clusters';
  13. import { useBrokers } from 'lib/hooks/api/brokers';
  14. import { NavLink, Route, Routes } from 'react-router-dom';
  15. import BrokerLogdir from 'components/Brokers/Broker/BrokerLogdir/BrokerLogdir';
  16. import BrokerMetrics from 'components/Brokers/Broker/BrokerMetrics/BrokerMetrics';
  17. import Navbar from 'components/common/Navigation/Navbar.styled';
  18. import PageLoader from 'components/common/PageLoader/PageLoader';
  19. export interface BrokerLogdirState {
  20. name: string;
  21. error: string;
  22. topics: number;
  23. partitions: number;
  24. }
  25. const Broker: React.FC = () => {
  26. const { clusterName, brokerId } = useAppParams<ClusterBrokerParam>();
  27. const { data: clusterStats } = useClusterStats(clusterName);
  28. const { data: brokers } = useBrokers(clusterName);
  29. if (!clusterStats) return null;
  30. const brokerItem = brokers?.find(({ id }) => id === Number(brokerId));
  31. const brokerDiskUsage = clusterStats.diskUsage?.find(
  32. (item) => item.brokerId === Number(brokerId)
  33. );
  34. return (
  35. <>
  36. <PageHeading text={`Broker ${brokerId}`} />
  37. <Metrics.Wrapper>
  38. <Metrics.Section>
  39. <Metrics.Indicator label="Segment Size">
  40. <BytesFormatted value={brokerDiskUsage?.segmentSize} />
  41. </Metrics.Indicator>
  42. <Metrics.Indicator label="Segment Count">
  43. {brokerDiskUsage?.segmentCount}
  44. </Metrics.Indicator>
  45. <Metrics.Indicator label="Port">{brokerItem?.port}</Metrics.Indicator>
  46. <Metrics.Indicator label="Host">{brokerItem?.host}</Metrics.Indicator>
  47. </Metrics.Section>
  48. </Metrics.Wrapper>
  49. <Navbar role="navigation">
  50. <NavLink
  51. to={clusterBrokerPath(clusterName, brokerId)}
  52. className={({ isActive }) => (isActive ? 'is-active' : '')}
  53. end
  54. >
  55. Log directories
  56. </NavLink>
  57. <NavLink
  58. to={clusterBrokerMetricsPath(clusterName, brokerId)}
  59. className={({ isActive }) => (isActive ? 'is-active' : '')}
  60. >
  61. Metrics
  62. </NavLink>
  63. </Navbar>
  64. <Suspense fallback={<PageLoader />}>
  65. <Routes>
  66. <Route index element={<BrokerLogdir />} />
  67. <Route
  68. path={clusterBrokerMetricsRelativePath}
  69. element={<BrokerMetrics />}
  70. />
  71. </Routes>
  72. </Suspense>
  73. </>
  74. );
  75. };
  76. export default Broker;