From e0604589faec0b6864b5bb70ea735b9d4bcb51d8 Mon Sep 17 00:00:00 2001 From: Eric Herbrandson Date: Wed, 19 Aug 2020 22:41:12 -0500 Subject: [PATCH] Removing some TODO types --- client/src/components/podsPanel.tsx | 90 ++++++++++++++++++----------- client/src/utils/metricsHelpers.tsx | 10 +++- client/src/utils/types.ts | 5 ++ client/src/utils/unitHelpers.ts | 3 +- 4 files changed, 69 insertions(+), 39 deletions(-) diff --git a/client/src/components/podsPanel.tsx b/client/src/components/podsPanel.tsx index acec1b7..ef7b74f 100644 --- a/client/src/components/podsPanel.tsx +++ b/client/src/components/podsPanel.tsx @@ -1,48 +1,53 @@ import _ from 'lodash'; import React from 'react'; import Base from './base'; -import Sorter from './sorter'; +import Sorter, { SortInfo } from './sorter'; import LoadingEllipsis from './loadingEllipsis'; import {MetadataHeaders, MetadataColumns, TableBody} from './listViewHelpers'; import {unparseRam, unparseCpu} from '../utils/unitHelpers'; import {getPodResourcePercent, getPodUsage, getPodResourceValue, ResourceType} from '../utils/metricsHelpers'; -import {Pod, TODO} from '../utils/types'; +import {Pod, TODO, Metrics} from '../utils/types'; -interface PodsPanelProps { - metrics: TODO; - pods?: TODO[]; +type MetricsGroups = _.Dictionary; + +type Props = { items?: Pod[]; - sort?: TODO; - filter?: TODO; + metrics?: MetricsGroups; + sort?: SortInfo; + filter?: string; skipNamespace?: boolean; } -interface PodsPanelStates { +type State = { } -export default class PodsPanel extends Base { - private sortByCpuUsage: TODO; +type SortHandler = (pod: Pod) => number | undefined; - private sortByCpuRequest: TODO; +export default class PodsPanel extends Base { + private sortByCpuUsage: SortHandler; - private sortByCpuLimit: TODO; + private sortByCpuRequest: SortHandler; - private sortByRamUsage: TODO; + private sortByCpuLimit: SortHandler; - private sortByRamRequest: TODO; + private sortByRamUsage: SortHandler; - private sortByRamLimit: TODO; + private sortByRamRequest: SortHandler; - constructor(props: TODO) { + private sortByRamLimit: SortHandler; + + constructor(props: Props) { super(props); - this.sortByCpuUsage = (x: TODO) => getPodUsage(x, this.props.metrics, 'cpu'); - this.sortByCpuRequest = (x: TODO) => sortBy(x, this.props.metrics, 'cpu', 'requests'); - this.sortByCpuLimit = (x: TODO) => sortBy(x, this.props.metrics, 'cpu', 'limits'); + const {metrics} = this.props; - this.sortByRamUsage = (x: TODO) => getPodUsage(x, this.props.metrics, 'memory'); - this.sortByRamRequest = (x: TODO) => sortBy(x, this.props.metrics, 'memory', 'requests'); - this.sortByRamLimit = (x: TODO) => sortBy(x, this.props.metrics, 'memory', 'limits'); + this.sortByCpuUsage = (x: Pod) => getPodUsage(x, metrics, 'cpu'); + this.sortByCpuRequest = (x: Pod) => sortBy(x, metrics, 'cpu', 'requests'); + this.sortByCpuLimit = (x: Pod) => sortBy(x, metrics, 'cpu', 'limits'); + + this.sortByRamUsage = (x: Pod) => getPodUsage(x, metrics, 'memory'); + this.sortByRamRequest = (x: Pod) => sortBy(x, metrics, 'memory', 'requests'); + this.sortByRamLimit = (x: Pod) => sortBy(x, metrics, 'memory', 'limits'); } render() { @@ -95,7 +100,7 @@ export default class PodsPanel extends Base { - ( + ( - {actual && getRawDisplay(item, metrics, actual, resource)} - {actual && getPercentDisplay(item, metrics, actual, resource, 'requests')} - {actual && getPercentDisplay(item, metrics, actual, resource, 'limits')} + {actual != null && getRawDisplay(pod, metrics, actual, resource)} + {actual != null && getPercentDisplay(pod, metrics, actual, resource, 'requests')} + {actual != null && getPercentDisplay(pod, metrics, actual, resource, 'limits')} ); } -function getRawDisplay(item: TODO, metrics: TODO, actual: number | null, resource: ResourceType) { - if (!item || !metrics) return ; +function getRawDisplay( + pod: Pod | undefined, + metrics: MetricsGroups | undefined, + actual: number | null, + resource: ResourceType, +) { + if (!pod || !metrics) return ; - const unparser: TODO = resource === 'cpu' ? unparseCpu : unparseRam; + const unparser = resource === 'cpu' ? unparseCpu : unparseRam; + // @ts-ignore const actualResult = unparser(actual); return ( @@ -180,7 +200,7 @@ function getPercentDisplay( const request = getPodResourceValue(item, resource, type); if (!request) return -; - const unparser: TODO = resource === 'cpu' ? unparseCpu : unparseRam; + const unparser = resource === 'cpu' ? unparseCpu : unparseRam; const result = unparser(request); const percent = request ? _.round(actual / request * 100, 1) : 0; const className = percent > 85 ? 'optional_xsmall contentPanel_warn' : 'optional_xsmall'; diff --git a/client/src/utils/metricsHelpers.tsx b/client/src/utils/metricsHelpers.tsx index d520a76..2b342e0 100644 --- a/client/src/utils/metricsHelpers.tsx +++ b/client/src/utils/metricsHelpers.tsx @@ -65,8 +65,8 @@ export function getNodeUsage(node: Node, metrics: _.Dictionary, resourc // Pod helpers export function getPodResourcePercent( - pod: Pod, - metrics: _.Dictionary, + pod: Pod | undefined, + metrics: _.Dictionary | undefined, resource: ResourceType, type: string, ) { @@ -75,7 +75,11 @@ export function getPodResourcePercent( return actual ? actual / request : null; } -export function getPodUsage(pod: Pod, metrics: _.Dictionary, resource: ResourceType) { +export function getPodUsage( + pod: Pod | undefined, + metrics: _.Dictionary | undefined, + resource: ResourceType, +) { if (!pod || !metrics) return undefined; const metric = metrics[pod.metadata.name] || {}; diff --git a/client/src/utils/types.ts b/client/src/utils/types.ts index c6aeada..53cc311 100644 --- a/client/src/utils/types.ts +++ b/client/src/utils/types.ts @@ -109,6 +109,10 @@ export interface K8sEvent extends ApiItem { involvedObject: InvolvedObject; } +interface ContainerStatus { + restartCount: number; +} + interface PodSpec { nodeName: string; containers: Container[]; @@ -122,6 +126,7 @@ interface PodStatus { qosClass: string; message: string; conditions?: Condition[]; + containerStatuses: ContainerStatus[]; } export interface Pod extends ApiItem{ diff --git a/client/src/utils/unitHelpers.ts b/client/src/utils/unitHelpers.ts index 4d4559a..9d24709 100644 --- a/client/src/utils/unitHelpers.ts +++ b/client/src/utils/unitHelpers.ts @@ -65,7 +65,8 @@ export function parseCpu(value?: string) { return number * 1000 * 1000 * 1000; } -export function unparseCpu(value: string) { +export function unparseCpu(value: string | number) { + // @ts-ignore const result = parseFloat(value); return {