import classnames from 'classnames' import { useMemo } from 'react' import { basePath, formatTraffic } from '@lib/helper' import { BaseComponentProps } from '@models' import { useI18n } from '@stores' import { Connection } from '../store' interface ConnectionsInfoProps extends BaseComponentProps { connection: Partial } export function ConnectionInfo (props: ConnectionsInfoProps) { const { translation } = useI18n() const t = useMemo(() => translation('Connections').t, [translation]) return (
{t('info.id')} {props.connection.id}
{t('info.network')} {props.connection.metadata?.network}
{t('info.inbound')} {props.connection.metadata?.type}
{t('info.host')} { props.connection.metadata?.host ? `${props.connection.metadata.host}:${props.connection.metadata?.destinationPort}` : t('info.hostEmpty') }
{t('info.dstIP')} { props.connection.metadata?.destinationIP ? `${props.connection.metadata.destinationIP}:${props.connection.metadata?.destinationPort}` : t('info.hostEmpty') }
{t('info.srcIP')} { `${props.connection.metadata?.sourceIP}:${props.connection.metadata?.sourcePort}` }
{t('info.process')} { props.connection.metadata?.processPath ? `${basePath(props.connection.metadata.processPath)}` : t('info.hostEmpty') }
{t('info.processPath')} { props.connection.metadata?.processPath ? `${props.connection.metadata.processPath}` : t('info.hostEmpty') }
{t('info.rule')} { props.connection.rule && `${props.connection.rule}${props.connection.rulePayload && ` :: ${props.connection.rulePayload}`}` }
{t('info.chains')} { props.connection.chains?.slice().reverse().join(' / ') }
{t('info.upload')} {formatTraffic(props.connection.upload ?? 0)}
{t('info.download')} {formatTraffic(props.connection.download ?? 0)}
{t('info.status')} { !props.connection.completed ? {t('info.opening')} : {t('info.closed')} }
) }