import "./resource-quota-details.scss"; import React from "react"; import kebabCase from "lodash/kebabCase"; import { observer } from "mobx-react"; import { Trans } from "@lingui/macro"; import { DrawerItem, DrawerTitle } from "../drawer"; import { cpuUnitsToNumber, cssNames, unitsToBytes, metricUnitsToNumber } from "../../utils"; import { KubeObjectDetailsProps } from "../kube-object"; import { ResourceQuota } from "../../api/endpoints/resource-quota.api"; import { LineProgress } from "../line-progress"; import { Table, TableCell, TableHead, TableRow } from "../table"; import { KubeObjectMeta } from "../kube-object/kube-object-meta"; import { kubeObjectDetailRegistry } from "../../api/kube-object-detail-registry"; import { ReplicaSetDetails } from "../+workloads-replicasets"; interface Props extends KubeObjectDetailsProps { } function transformUnit(name: string, value: string): number { if (name.includes("memory") || name.includes("storage")) { return unitsToBytes(value); } if (name.includes("cpu")) { return cpuUnitsToNumber(value); } return metricUnitsToNumber(value); } function renderQuotas(quota: ResourceQuota): JSX.Element[] { const { hard = {}, used = {} } = quota.status; return Object.entries(hard) .filter(([name]) => used[name]) .map(([name, value]) => { const current = transformUnit(name, used[name]); const max = transformUnit(name, value); const usage = max === 0 ? 100 : Math.ceil(current / max * 100); // special case 0 max as always 100% usage return (
{name} {used[name]} / {value} Set: {value}. Usage: {`${usage}%`}

} />
); }); } @observer export class ResourceQuotaDetails extends React.Component { render() { const { object: quota } = this.props; if (!quota) return null; return (
Quotas} className="quota-list"> {renderQuotas(quota)} {quota.getScopeSelector().length > 0 && ( <> Scope Selector}/> Operator Scope name Values { quota.getScopeSelector().map((selector, index) => { const { operator, scopeName, values } = selector; return ( {operator} {scopeName} {values.join(", ")} ); }) }
)}
); } } kubeObjectDetailRegistry.add({ kind: "ResourceQuota", apiVersions: ["v1"], components: { Details: (props) => } });