Skip to content

Commit

Permalink
Show resource quota alert
Browse files Browse the repository at this point in the history
  • Loading branch information
divyanshiGupta committed Sep 22, 2022
1 parent 95f3d28 commit 20d1a2e
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 2 deletions.
9 changes: 9 additions & 0 deletions frontend/packages/topology/console-extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,15 @@
}
}
},
{
"type": "console.topology/details/resource-alert",
"properties": {
"id": "resource-quota-alert",
"contentProvider": {
"$codeRef": "workload.useResourceQuotaAlert"
}
}
},
{
"type": "console.context-provider",
"properties": {
Expand Down
1 change: 1 addition & 0 deletions frontend/packages/topology/locales/en/topology.json
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@
"Container {{containersName}} does not have health checks to ensure your application is running correctly.": "Container {{containersName}} does not have health checks to ensure your application is running correctly.",
"Health checks": "Health checks",
"Add health checks": "Add health checks",
"Resource Quotas": "Resource Quotas",
"Visual connector": "Visual connector",
"Expand groups": "Expand groups",
"Pod count": "Pod count",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import * as React from 'react';
import { AlertActionLink } from '@patternfly/react-core';
import { GraphElement } from '@patternfly/react-topology';
import * as _ from 'lodash';
import { useTranslation } from 'react-i18next';
import { Link } from 'react-router-dom';
import { DetailsResourceAlertContent } from '@console/dynamic-plugin-sdk';
import { useAccessReview } from '@console/internal/components/utils';
import { CommonActionFactory } from '@console/app/src/actions/creators/common-factory';
import { DeploymentActionFactory } from '@console/app/src/actions/creators/deployment-factory';
import { DetailsResourceAlertContent, useAccessReview } from '@console/dynamic-plugin-sdk';
import {
DaemonSetModel,
DeploymentConfigModel,
Expand Down Expand Up @@ -77,3 +80,55 @@ export const useHealthChecksAlert = (element: GraphElement): DetailsResourceAler
}
: null;
};

export const useResourceQuotaAlert = (element: GraphElement): DetailsResourceAlertContent => {
const { t } = useTranslation();
const resource = getResource(element);
const name = resource?.metadata?.name;
const namespace = resource?.metadata?.namespace;

const canUseAlertAction = useAccessReview({
group: DeploymentModel?.apiGroup,
resource: DeploymentModel?.plural,
namespace,
name,
verb: 'patch',
});

if (!resource || referenceForModel(DeploymentModel) !== referenceFor(resource)) return null;

const statusConditions = resource.status?.conditions ?? [];
const replicaFailure = !_.isEmpty(statusConditions)
? _.find(statusConditions, (condition) => condition.type === 'ReplicaFailure')
: undefined;
const replicaFailureMsg: string = replicaFailure?.message ?? '';
const resourceQuotaRequested = replicaFailureMsg.split(':')?.[3] ?? '';
const resourceQuotaType = resourceQuotaRequested.includes('limits')
? 'Limits'
: resourceQuotaRequested.includes('pods')
? 'Pods'
: '';
const showAlert = resourceQuotaType && canUseAlertAction;
const alertAction =
resourceQuotaType === 'Limits'
? DeploymentActionFactory.EditResourceLimits(DeploymentModel, resource)
: CommonActionFactory.ModifyCount(DeploymentModel, resource);

const alertActionCta = alertAction.cta as () => void;

const alertActionLink = (
<AlertActionLink onClick={() => alertActionCta()}>
{alertAction.label as string}
</AlertActionLink>
);

return showAlert
? {
title: t('topology~Resource Quotas'),
dismissible: true,
content: <>{replicaFailureMsg}</>,
actionLinks: alertActionLink,
variant: 'warning',
}
: null;
};

0 comments on commit 20d1a2e

Please sign in to comment.