Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions frontend/packages/console-shared/src/selectors/pod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ import { PodKind } from '@console/internal/module/k8s';

export const getNodeName = (pod: PodKind): PodKind['spec']['nodeName'] =>
pod && pod.spec ? pod.spec.nodeName : undefined;
export const podIpAddress = (pod: PodKind): PodKind['status']['podIP'] =>
pod && pod.status ? pod.status.podIP : undefined;
8 changes: 8 additions & 0 deletions frontend/public/components/pod-dashboard-context.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import * as React from 'react';
import { PodKind } from '../module/k8s';

export const PodDashboardContext = React.createContext<PodDashboardContext>({});

type PodDashboardContext = {
pod?: PodKind;
};
57 changes: 57 additions & 0 deletions frontend/public/components/pod-dashboard-details.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import * as React from 'react';
import { getName, getNamespace, getUID, getCreationTimestamp } from '@console/shared';
import { getNodeName, podIpAddress } from '@console/shared/src/selectors/pod';
import { PodModel } from '../models';
import { resourcePath, ResourceLink, Timestamp, NodeLink } from './utils';
import { POD_DETAIL_OVERVIEW_HREF } from './utils/href';
import {
DashboardCard,
DashboardCardTitle,
DashboardCardLink,
DashboardCardHeader,
DashboardCardBody,
} from './dashboard/dashboard-card';
import { DetailsBody, DetailItem } from './dashboard/details-card';
import { DashboardItemProps } from './dashboards-page/with-dashboard-resources';
import { PodDashboardContext } from './pod-dashboard-context';

export const PodDashboardDetailsCard: React.FC<PodDashboardDetailsCardProps> = () => {
const podDashboardContext = React.useContext(PodDashboardContext);
const { pod } = podDashboardContext;

const name = getName(pod);
const namespace = getNamespace(pod);

const viewAllLink = `${resourcePath(PodModel.kind, name, namespace)}/${POD_DETAIL_OVERVIEW_HREF}`;

const ip = podIpAddress(pod);
return (
<DashboardCard>
<DashboardCardHeader>
<DashboardCardTitle>Details</DashboardCardTitle>
<DashboardCardLink to={viewAllLink}>View all</DashboardCardLink>
</DashboardCardHeader>
<DashboardCardBody isLoading={false}>
<DetailsBody>
<DetailItem title="Name" error={false} isLoading={!pod}>
{name}
</DetailItem>
<DetailItem title="Namespace" error={false} isLoading={!pod}>
<ResourceLink kind="Namespace" name={namespace} title={getUID(pod)} />
</DetailItem>
<DetailItem title="Created" error={false} isLoading={!pod}>
<Timestamp timestamp={getCreationTimestamp(pod)} />
</DetailItem>
<DetailItem title="Node" isLoading={!pod}>
<NodeLink name={getNodeName(pod)} />
</DetailItem>
<DetailItem title="IP Address" error={!ip} isLoading={!pod}>
{ip}
</DetailItem>
</DetailsBody>
</DashboardCardBody>
</DashboardCard>
);
};

type PodDashboardDetailsCardProps = DashboardItemProps;
27 changes: 27 additions & 0 deletions frontend/public/components/pod-dashboard.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import * as React from 'react';
import { PodKind } from '../module/k8s';
import { Dashboard, DashboardGrid } from './dashboard';
import { PodDashboardDetailsCard } from './pod-dashboard-details';
import { PodDashboardContext } from './pod-dashboard-context';

const mainCards = [];
const leftCards = [{ Card: PodDashboardDetailsCard }];
const rightCards = [];

export const PodDashboard: React.FC<PodDashboardProps> = (props) => {
const { obj: pod } = props;
const context = { pod };
return (
<div className="co-m-pane__body">
<PodDashboardContext.Provider value={context}>
<Dashboard>
<DashboardGrid mainCards={mainCards} leftCards={leftCards} rightCards={rightCards} />
</Dashboard>
</PodDashboardContext.Provider>
</div>
);
};

type PodDashboardProps = {
obj?: PodKind;
};
6 changes: 6 additions & 0 deletions frontend/public/components/pod.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import { requirePrometheus, Area } from './graphs';
import { formatDuration } from './utils/datetime';
import { CamelCaseWrap } from './utils/camel-case-wrap';
import { VolumesTable } from './volumes-table';
import { PodDashboard } from './pod-dashboard';

export const menuActions = [...Kebab.factory.common];
const validReadinessStates = new Set(['ContainersNotReady', 'Ready', 'PodCompleted']);
Expand Down Expand Up @@ -403,6 +404,11 @@ export const PodsDetailsPage: React.FC<PodDetailsPageProps> = (props) => (
{...props}
menuActions={menuActions}
pages={[
{
href: 'dashboard', // TODO: make it default once additional Cards are implemented
name: 'Dashboard',
component: PodDashboard,
},
navFactory.details(Details),
navFactory.editYaml(),
navFactory.envEditor(PodEnvironmentComponent),
Expand Down
1 change: 1 addition & 0 deletions frontend/public/components/utils/href.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const POD_DETAIL_OVERVIEW_HREF = ''; // TODO: see pod.tsx, will be changed once Pod Dashboard becomes the default tab