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;
|