LCOV - code coverage report
Current view: top level - src - ContainerDetails.jsx Coverage Total Hit
Test: cockpit-podman Lines: 98.7 % 79 78
Test Date: 2025-05-21 17:35:03

            Line data    Source code
       1           43 : import React from 'react';
       2              : 
       3              : import { Button } from "@patternfly/react-core/dist/esm/components/Button";
       4              : import { DescriptionList, DescriptionListDescription, DescriptionListGroup, DescriptionListTerm } from "@patternfly/react-core/dist/esm/components/DescriptionList";
       5              : import { Flex, FlexItem } from "@patternfly/react-core/dist/esm/layouts/Flex";
       6              : 
       7              : import cockpit from 'cockpit';
       8              : 
       9              : import * as utils from './util.js';
      10              : 
      11           43 : const _ = cockpit.gettext;
      12              : 
      13           41 : const render_container_state = (container) => {
      14           36 :     if (container.State.Status === "running") {
      15           36 :         return <><span>{ _("Up since:") } </span><utils.RelativeTime time={container.State.StartedAt} /></>;
      16           36 :     }
      17           28 :     return cockpit.format(_("Exited"));
      18           41 : };
      19              : 
      20           41 : const ContainerDetails = ({ container }) => {
      21           41 :     const networkOptions = (
      22           41 :         [
      23           41 :             container.NetworkSettings?.IPAddress,
      24           41 :             container.NetworkSettings?.Gateway,
      25           41 :             container.NetworkSettings?.MacAddress,
      26           41 :         ].some(itm => !!itm)
      27              :     );
      28              : 
      29           41 :     return (
      30           41 :         <Flex>
      31           41 :             <FlexItem>
      32           41 :                 <DescriptionList className='container-details-basic'>
      33           41 :                     <DescriptionListGroup>
      34           41 :                         <DescriptionListTerm>{_("ID")}</DescriptionListTerm>
      35           41 :                         <DescriptionListDescription className="ignore-pixels">{utils.truncate_id(container.Id)}</DescriptionListDescription>
      36           41 :                     </DescriptionListGroup>
      37           41 :                     <DescriptionListGroup>
      38           41 :                         <DescriptionListTerm>{_("Image")}</DescriptionListTerm>
      39           41 :                         <DescriptionListDescription>{container.ImageName}</DescriptionListDescription>
      40           41 :                     </DescriptionListGroup>
      41           41 :                     {container.Config?.Cmd &&
      42           41 :                     <DescriptionListGroup>
      43           41 :                         <DescriptionListTerm>{_("Command")}</DescriptionListTerm>
      44           41 :                         <DescriptionListDescription>{utils.quote_cmdline(container.Config.Cmd)}</DescriptionListDescription>
      45           41 :                     </DescriptionListGroup>
      46              :                     }
      47            3 :                     {Boolean(container.Config?.Labels?.PODMAN_SYSTEMD_UNIT) && (container.uid === 0 || container.uid === null) &&
      48            5 :                     <DescriptionListGroup>
      49            5 :                         <DescriptionListTerm>{_("systemd service")}</DescriptionListTerm>
      50            5 :                         <DescriptionListDescription>
      51            5 :                             <Button variant="link" isInline onClick={
      52            0 :                                 () => cockpit.jump(`/system/services#/${container.Config?.Labels?.PODMAN_SYSTEMD_UNIT}` + (container.uid === null ? "?owner=user" : ""))}>
      53            5 :                                 {cockpit.format(_("View $0"), container.Config?.Labels?.PODMAN_SYSTEMD_UNIT)}
      54            5 :                             </Button>
      55            5 :                         </DescriptionListDescription>
      56            5 :                     </DescriptionListGroup>
      57              :                     }
      58           41 :                 </DescriptionList>
      59           41 :             </FlexItem>
      60           41 :             <FlexItem>
      61           23 :                 {networkOptions && <DescriptionList columnModifier={{ default: '2Col' }} className='container-details-networking'>
      62           23 :                     {container.NetworkSettings?.IPAddress && <DescriptionListGroup>
      63           23 :                         <DescriptionListTerm>{_("IP address")}</DescriptionListTerm>
      64           23 :                         <DescriptionListDescription className="ignore-pixels">{container.NetworkSettings.IPAddress}</DescriptionListDescription>
      65           23 :                     </DescriptionListGroup>}
      66           23 :                     {container.NetworkSettings?.Gateway && <DescriptionListGroup>
      67           23 :                         <DescriptionListTerm>{_("Gateway")}</DescriptionListTerm>
      68           23 :                         <DescriptionListDescription className="ignore-pixels">{container.NetworkSettings.Gateway}</DescriptionListDescription>
      69           23 :                     </DescriptionListGroup>}
      70           23 :                     {container.NetworkSettings?.MacAddress && <DescriptionListGroup>
      71           23 :                         <DescriptionListTerm>{_("MAC address")}</DescriptionListTerm>
      72           23 :                         <DescriptionListDescription className="container-mac-address">{container.NetworkSettings.MacAddress}</DescriptionListDescription>
      73           23 :                     </DescriptionListGroup>}
      74           23 :                 </DescriptionList>}
      75           41 :             </FlexItem>
      76           41 :             <FlexItem>
      77           41 :                 <DescriptionList className='container-details-state'>
      78           41 :                     <DescriptionListGroup>
      79           41 :                         <DescriptionListTerm>{_("Created")}</DescriptionListTerm>
      80           41 :                         <DescriptionListDescription><utils.RelativeTime time={container.Created} /></DescriptionListDescription>
      81           41 :                     </DescriptionListGroup>
      82           41 :                     <DescriptionListGroup>
      83           41 :                         <DescriptionListTerm>{_("State")}</DescriptionListTerm>
      84           41 :                         <DescriptionListDescription>{render_container_state(container)}</DescriptionListDescription>
      85           41 :                     </DescriptionListGroup>
      86            1 :                     {container.State?.Checkpointed && <DescriptionListGroup>
      87            1 :                         <DescriptionListTerm>{_("Latest checkpoint")}</DescriptionListTerm>
      88            1 :                         <DescriptionListDescription><utils.RelativeTime time={container.State.CheckpointedAt} /></DescriptionListDescription>
      89            1 :                     </DescriptionListGroup>}
      90           41 :                 </DescriptionList>
      91           41 :             </FlexItem>
      92           41 :         </Flex>
      93              :     );
      94           41 : };
      95              : 
      96           43 : export default ContainerDetails;
        

Generated by: LCOV version 2.0-1