import "./hpa.scss"; import * as React from "react"; import { observer } from "mobx-react"; import { RouteComponentProps } from "react-router"; import { Trans } from "@lingui/macro"; import { KubeObjectMenu, KubeObjectMenuProps } from "../kube-object/kube-object-menu"; import { KubeObjectListLayout } from "../kube-object"; import { HpaRouteParams } from "./hpa.route"; import { HorizontalPodAutoscaler, hpaApi } from "../../api/endpoints/hpa.api"; import { hpaStore } from "./hpa.store"; import { Badge } from "../badge"; import { cssNames } from "../../utils"; import { apiManager } from "../../api/api-manager"; enum sortBy { name = "name", namespace = "namespace", minPods = "min-pods", maxPods = "max-pods", replicas = "replicas", age = "age", } interface Props extends RouteComponentProps { } @observer export class HorizontalPodAutoscalers extends React.Component { getTargets(hpa: HorizontalPodAutoscaler): JSX.Element { const { metrics } = hpa.spec; const metricsRemainCount = metrics.length - 1; const metricsRemain = metrics.length > 1 ? {metricsRemainCount} more... : null; const metricValues = hpa.getMetricValues(metrics[0]); return

{metricValues} {metricsRemain && "+"}{metricsRemain}

; } render(): JSX.Element { return ( item.getName(), [sortBy.namespace]: (item: HorizontalPodAutoscaler): string => item.getNs(), [sortBy.minPods]: (item: HorizontalPodAutoscaler): number => item.spec.minReplicas, [sortBy.maxPods]: (item: HorizontalPodAutoscaler): number => item.spec.maxReplicas, [sortBy.replicas]: (item: HorizontalPodAutoscaler): number => item.status.currentReplicas }} searchFilters={[ (item: HorizontalPodAutoscaler): string[] => item.getSearchFields() ]} renderHeaderTitle={Horizontal Pod Autoscalers} renderTableHeader={[ { title: Name, className: "name", sortBy: sortBy.name }, { title: Namespace, className: "namespace", sortBy: sortBy.namespace }, { title: Metrics, className: "metrics" }, { title: Min Pods, className: "min-pods", sortBy: sortBy.minPods }, { title: Max Pods, className: "max-pods", sortBy: sortBy.maxPods }, { title: Replicas, className: "replicas", sortBy: sortBy.replicas }, { title: Age, className: "age", sortBy: sortBy.age }, { title: Status, className: "status" }, ]} renderTableContents={(hpa: HorizontalPodAutoscaler): (string | number | React.ReactNode)[] => [ hpa.getName(), hpa.getNs(), this.getTargets(hpa), hpa.spec.minReplicas, hpa.spec.maxReplicas, hpa.status.currentReplicas, hpa.getAge(), hpa.getConditions().map(({ type, tooltip, isReady }) => { if (!isReady) { return null; } return ( ); }) ]} renderItemMenu={(item: HorizontalPodAutoscaler): JSX.Element => { return ; }} /> ); } } export function HpaMenu(props: KubeObjectMenuProps): JSX.Element { return ( ); } apiManager.registerViews(hpaApi, { Menu: HpaMenu, });