mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Fix cluster dashboard opening and state refreshing (#1006) Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>
73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
import "./cluster.scss"
|
|
|
|
import React from "react";
|
|
import { computed, reaction } from "mobx";
|
|
import { disposeOnUnmount, observer } from "mobx-react";
|
|
import { TabLayout } from "../layout/tab-layout";
|
|
import { ClusterIssues } from "./cluster-issues";
|
|
import { Spinner } from "../spinner";
|
|
import { cssNames, interval, isElectron } from "../../utils";
|
|
import { ClusterPieCharts } from "./cluster-pie-charts";
|
|
import { ClusterMetrics } from "./cluster-metrics";
|
|
import { nodesStore } from "../+nodes/nodes.store";
|
|
import { podsStore } from "../+workloads-pods/pods.store";
|
|
import { clusterStore } from "./cluster.store";
|
|
import { eventStore } from "../+events/event.store";
|
|
import { isAllowedResource } from "../../../common/rbac";
|
|
import { getHostedCluster } from "../../../common/cluster-store";
|
|
|
|
@observer
|
|
export class Cluster extends React.Component {
|
|
private dependentStores = [nodesStore, podsStore];
|
|
|
|
private watchers = [
|
|
interval(60, () => { getHostedCluster().available && clusterStore.getMetrics()}),
|
|
interval(20, () => { getHostedCluster().available && eventStore.loadAll()})
|
|
];
|
|
|
|
@computed get isLoaded() {
|
|
return nodesStore.isLoaded && podsStore.isLoaded
|
|
}
|
|
|
|
// todo: refactor
|
|
async componentDidMount() {
|
|
const { dependentStores } = this;
|
|
if (!isAllowedResource("nodes")) {
|
|
dependentStores.splice(dependentStores.indexOf(nodesStore), 1)
|
|
}
|
|
this.watchers.forEach(watcher => watcher.start(true));
|
|
|
|
await Promise.all([
|
|
...dependentStores.map(store => store.loadAll()),
|
|
clusterStore.getAllMetrics()
|
|
]);
|
|
|
|
disposeOnUnmount(this, [
|
|
...dependentStores.map(store => store.subscribe()),
|
|
() => this.watchers.forEach(watcher => watcher.stop()),
|
|
reaction(
|
|
() => clusterStore.metricNodeRole,
|
|
() => this.watchers.forEach(watcher => watcher.restart())
|
|
)
|
|
])
|
|
}
|
|
|
|
render() {
|
|
const { isLoaded } = this;
|
|
return (
|
|
<TabLayout>
|
|
<div className="Cluster">
|
|
{!isLoaded && <Spinner center/>}
|
|
{isLoaded && (
|
|
<>
|
|
<ClusterMetrics/>
|
|
<ClusterPieCharts/>
|
|
<ClusterIssues className={cssNames({ wide: isElectron })}/>
|
|
</>
|
|
)}
|
|
</div>
|
|
</TabLayout>
|
|
)
|
|
}
|
|
}
|