import React from 'react'; import { Partition, Replica } from 'generated-sources'; import { ClusterName, TopicName } from 'redux/interfaces'; import Dropdown from 'components/common/Dropdown/Dropdown'; import DropdownItem from 'components/common/Dropdown/DropdownItem'; import ClusterContext from 'components/contexts/ClusterContext'; import BytesFormatted from 'components/common/BytesFormatted/BytesFormatted'; import { Table } from 'components/common/table/Table/Table.styled'; import TableHeaderCell from 'components/common/table/TableHeaderCell/TableHeaderCell'; import VerticalElipsisIcon from 'components/common/Icons/VerticalElipsisIcon'; import * as Metrics from 'components/common/Metrics'; import { Tag } from 'components/common/Tag/Tag.styled'; import { useAppSelector } from 'lib/hooks/redux'; import { getTopicByName } from 'redux/reducers/topics/selectors'; import { ReplicaCell } from 'components/Topics/Topic/Details/Details.styled'; import { RouteParamsClusterTopic } from 'lib/paths'; import useAppParams from 'lib/hooks/useAppParams'; export interface Props { clearTopicMessages(params: { clusterName: ClusterName; topicName: TopicName; partitions?: number[]; }): void; } const Overview: React.FC = ({ clearTopicMessages }) => { const { clusterName, topicName } = useAppParams(); const { partitions, underReplicatedPartitions, inSyncReplicas, replicas, partitionCount, internal, replicationFactor, segmentSize, segmentCount, cleanUpPolicy, } = useAppSelector((state) => { const res = getTopicByName(state, topicName); return res || {}; }); const { isReadOnly } = React.useContext(ClusterContext); const messageCount = React.useMemo( () => (partitions || []).reduce((memo, partition) => { return memo + partition.offsetMax - partition.offsetMin; }, 0), [partitions] ); return ( <> {partitionCount} {replicationFactor} {underReplicatedPartitions === 0 ? ( {underReplicatedPartitions} ) : ( {underReplicatedPartitions} )} {inSyncReplicas && replicas && inSyncReplicas < replicas ? ( {inSyncReplicas} ) : ( inSyncReplicas )} of {replicas} {internal ? 'Internal' : 'External'} {segmentCount} {cleanUpPolicy || 'Unknown'} {messageCount}
{partitions?.map((partition: Partition) => ( ))} {partitions?.length === 0 && ( )}
{partition.partition} {partition.replicas?.map((replica: Replica) => ( {replica.broker} ))} {partition.offsetMin} {partition.offsetMax} {partition.offsetMax - partition.offsetMin} {!internal && !isReadOnly && cleanUpPolicy === 'DELETE' ? ( } right> clearTopicMessages({ clusterName, topicName, partitions: [partition.partition], }) } danger > Clear Messages ) : null}
No Partitions found
); }; export default Overview;