import "./cluster-overview.scss"; import React from "react"; import { reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import { nodesStore } from "../+nodes/nodes.store"; import { podsStore } from "../+workloads-pods/pods.store"; import { getHostedCluster } from "../../../common/cluster-store"; import { interval } from "../../utils"; import { TabLayout } from "../layout/tab-layout"; import { Spinner } from "../spinner"; import { ClusterIssues } from "./cluster-issues"; import { ClusterMetrics } from "./cluster-metrics"; import { clusterOverviewStore } from "./cluster-overview.store"; import { ClusterPieCharts } from "./cluster-pie-charts"; import { userStore } from "../../../common/user-store"; import { ResourceType } from "../+preferences/select-metrics-dialog"; @observer export class ClusterOverview extends React.Component { private metricPoller = interval(60, () => this.loadMetrics()); loadMetrics() { getHostedCluster().available && clusterOverviewStore.loadMetrics(); } componentDidMount() { this.metricPoller.start(true); disposeOnUnmount(this, [ reaction( () => clusterOverviewStore.metricNodeRole, // Toggle Master/Worker node switcher () => this.metricPoller.restart(true) ), ]); } componentWillUnmount() { this.metricPoller.stop(); } renderMetrics(isMetricsHidden: boolean) { if (isMetricsHidden) { return null; } return ( <> > ); } renderClusterOverview(isLoaded: boolean, isMetricsHidden: boolean) { if (!isLoaded) { return ; } return ( <> {this.renderMetrics(isMetricsHidden)} > ); } render() { const isLoaded = nodesStore.isLoaded && podsStore.isLoaded; const isMetricsHidden = userStore.isMetricHidden(ResourceType.Cluster); return ( {this.renderClusterOverview(isLoaded, isMetricsHidden)} ); } }