Skip to content

Commit

Permalink
Add Cluster Operator upgrade activity
Browse files Browse the repository at this point in the history
  • Loading branch information
rawagner committed Dec 12, 2019
1 parent 6a6ed7e commit b86a632
Show file tree
Hide file tree
Showing 10 changed files with 96 additions and 40 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import * as React from 'react';
import {
ClusterOperator,
getStatusAndMessage,
referenceForModel,
} from '@console/internal/module/k8s';
import ActivityItem from '@console/shared/src/components/dashboard/activity-card/ActivityItem';
import { ResourceLink } from '@console/internal/components/utils/resource-link';
import { ClusterOperatorModel } from '@console/internal/models';

const ClusterOperatorUpgradeActivity: React.FC<ClusterOperatorUpgradeActivityProps> = ({
resource,
}) => {
const { message } = getStatusAndMessage(resource);
return (
<>
<ActivityItem>
Upgrading operator{' '}
<ResourceLink
kind={referenceForModel(ClusterOperatorModel)}
name={resource.metadata.name}
inline
hideIcon
/>
</ActivityItem>
{message}
</>
);
};

export default ClusterOperatorUpgradeActivity;

type ClusterOperatorUpgradeActivityProps = {
resource: ClusterOperator;
};
Original file line number Diff line number Diff line change
@@ -1,22 +1,12 @@
import * as React from 'react';
import {
ClusterVersionKind,
getClusterUpdateStatus,
ClusterUpdateStatus,
} from '@console/internal/module/k8s';
import { ClusterVersionKind } from '@console/internal/module/k8s';
import ActivityItem from '@console/shared/src/components/dashboard/activity-card/ActivityItem';

export const isClusterUpdateActivity = (cv: ClusterVersionKind) =>
getClusterUpdateStatus(cv) === ClusterUpdateStatus.Updating;

export const getClusterUpdateTimestamp = (cv: ClusterVersionKind) =>
cv && cv.status.history[0] ? new Date(cv.status.history[0].startedTime) : null;

const getVersion = (cv: ClusterVersionKind) =>
cv && cv.status.history[0] ? cv.status.history[0].version : null;

const ClusterUpdateActivity: React.FC<ClusterUpdateActivityProps> = React.memo(
({ resource }) => <ActivityItem title={`Updating cluster to ${getVersion(resource)}`} />,
({ resource }) => <ActivityItem>{`Updating cluster to ${getVersion(resource)}`}</ActivityItem>,
(prevProps, newProps) => getVersion(prevProps.resource) === getVersion(newProps.resource),
);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import {
ClusterVersionKind,
ClusterUpdateStatus,
getClusterUpdateStatus,
getClusterOperatorStatus,
OperatorStatus,
ClusterOperator,
} from '@console/internal/module/k8s';

export const isClusterUpdateActivity = (cv: ClusterVersionKind) =>
getClusterUpdateStatus(cv) === ClusterUpdateStatus.Updating;

export const getClusterUpdateTimestamp = (cv: ClusterVersionKind) =>
cv && cv.status.history[0] ? new Date(cv.status.history[0].startedTime) : null;

export const isClusterOperatorUpgradeActivity = (resource: ClusterOperator) =>
getClusterOperatorStatus(resource) === OperatorStatus.Updating;
39 changes: 29 additions & 10 deletions frontend/packages/console-app/src/plugin.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,20 @@ import {
DashboardsOverviewHealthPrometheusSubsystem,
DashboardsOverviewInventoryItem,
} from '@console/plugin-sdk';
import {
ClusterVersionModel,
NodeModel,
PodModel,
StorageClassModel,
PersistentVolumeClaimModel,
} from '@console/internal/models';
import { referenceForModel } from '@console/internal/module/k8s';
import {
getNodeStatusGroups,
getPodStatusGroups,
getPVCStatusGroups,
} from '@console/shared/src/components/dashboard/inventory-card/utils';
import {
isClusterUpdateActivity,
getClusterUpdateTimestamp,
} from './components/dashboards-page/ClusterUpdateActivity';
ClusterVersionModel,
NodeModel,
PodModel,
StorageClassModel,
PersistentVolumeClaimModel,
ClusterOperatorModel,
} from '@console/internal/models';
import {
fetchK8sHealth,
getK8sHealthState,
Expand All @@ -37,6 +34,11 @@ import {
CONTROLLER_MANAGERS_UP,
SCHEDULERS_UP,
} from './queries';
import {
isClusterOperatorUpgradeActivity,
getClusterUpdateTimestamp,
isClusterUpdateActivity,
} from './components/dashboards-page/activity';

type ConsumedExtensions =
| Perspective
Expand Down Expand Up @@ -135,6 +137,23 @@ const plugin: Plugin<ConsumedExtensions> = [
useAbbr: true,
},
},
{
type: 'Dashboards/Overview/Activity/Resource',
properties: {
k8sResource: {
isList: true,
prop: 'clusterOperators',
kind: referenceForModel(ClusterOperatorModel),
namespaced: false,
},
isActivity: isClusterOperatorUpgradeActivity,
loader: () =>
import(
'./components/dashboards-page/ClusterOperatorUpgradeActivity' /* webpackChunkName: "console-app" */
).then((m) => m.default),
required: FLAGS.CLUSTER_VERSION,
},
},
];

export default plugin;
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,5 @@ export const DemoActivity: React.FC<K8sActivityProps> = ({ resource }) => (
);

export const DemoPrometheusActivity: React.FC<PrometheusActivityProps> = () => (
<ActivityItem title="Demo prometheus activity" />
<ActivityItem>Demo prometheus activity</ActivityItem>
);
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ namespace ExtensionProperties {
isActivity?: (resource: K8sResourceKind) => boolean;

/** Timestamp for given action, which will be used for ordering */
getTimestamp: (resource: K8sResourceKind) => Date;
getTimestamp?: (resource: K8sResourceKind) => Date;

/** Loader for corresponding action component */
loader: LazyLoader<K8sActivityProps>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,18 @@ export const ActivityProgress: React.FC<ActivityProgressProps> = ({
</>
);

const ActivityItem: React.FC<ActivityItemProps> = ({ title, children }) => (
const ActivityItem: React.FC = ({ children }) => (
<>
<div className="co-activity-item">
<InProgressIcon className="co-dashboard-icon" />
<div className="co-activity-item__title">{title}</div>
<div className="co-activity-item__title">{children}</div>
</div>
{children}
</>
);

export default ActivityItem;

type ActivityItemProps = {
type ActivityProgressProps = {
title: string;
};

type ActivityProgressProps = ActivityItemProps & {
progress: number;
};
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,12 @@ const EventsCard: React.FC<EventsCardProps> = ({
<div className="co-activity-card__ongoing-body">
{inProgress ? (
<Activity timestamp={null}>
<ActivityItem title={hostStatus.title}>
<ResourceLink
kind={BareMetalHostModel.kind}
name={getName(obj)}
namespace={getNamespace(obj)}
/>
</ActivityItem>
<ActivityItem>{hostStatus.title}</ActivityItem>
<ResourceLink
kind={BareMetalHostModel.kind}
name={getName(obj)}
namespace={getNamespace(obj)}
/>
</Activity>
) : (
<Activity>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ const OngoingActivity = connect(mapStateToProps)(
.filter((r) => (a.properties.isActivity ? a.properties.isActivity(r) : true))
.map((r) => ({
resource: r,
timestamp: a.properties.getTimestamp(r),
timestamp: a.properties.getTimestamp ? a.properties.getTimestamp(r) : null,
loader: a.properties.loader,
}));
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ const OngoingActivity = connect(mapStateToProps)(
.filter((r) => (a.properties.isActivity ? a.properties.isActivity(r) : true))
.map((r) => ({
resource: r,
timestamp: a.properties.getTimestamp(r),
timestamp: a.properties.getTimestamp ? a.properties.getTimestamp(r) : null,
loader: a.properties.loader,
}));
}),
Expand Down

0 comments on commit b86a632

Please sign in to comment.