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 } from "../../utils"; import { KubeObjectDetailsProps } from "../kube-object"; import { ResourceQuota, resourceQuotaApi } from "../../api/endpoints/resource-quota.api"; import { LineProgress } from "../line-progress"; import { Table, TableCell, TableHead, TableRow } from "../table"; import { apiManager } from "../../api/api-manager"; import { KubeObjectMeta } from "../kube-object/kube-object-meta"; interface Props extends KubeObjectDetailsProps { } @observer export class ResourceQuotaDetails extends React.Component { renderQuotas = (quota: ResourceQuota) => { const { hard, used } = quota.status if (!hard || !used) return null const transformUnit = (name: string, value: string) => { if (name.includes("memory") || name.includes("storage")) { return unitsToBytes(value) } if (name.includes("cpu")) { return cpuUnitsToNumber(value) } return parseInt(value) } return Object.entries(hard).map(([name, value]) => { if (!used[name]) return null const current = transformUnit(name, used[name]) const max = transformUnit(name, value) return (
{name} {used[name]} / {value} Set: {value}. Used: {Math.ceil(current / max * 100) + "%"}

} />
) }) } render() { const { object: quota } = this.props; if (!quota) return null; return (
Quotas} className="quota-list"> {this.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(", ")} ); }) }
)}
); } } apiManager.registerViews(resourceQuotaApi, { Details: ResourceQuotaDetails })