mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix metrics visibility logic (#7465)
Signed-off-by: Juho Heikka <juho.heikka@gmail.com>
This commit is contained in:
parent
3b8ef07a9e
commit
a73586d844
@ -0,0 +1,52 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Cluster } from "../../../../../common/cluster/cluster";
|
||||||
|
import { getDiForUnitTesting } from "../../../../getDiForUnitTesting";
|
||||||
|
import enabledMetricsInjectable from "../metrics-enabled.injectable";
|
||||||
|
import activeEntityInternalClusterInjectable from "../get-active-cluster-entity.injectable";
|
||||||
|
import { observable } from "mobx";
|
||||||
|
import { ClusterMetricsResourceType } from "../../../../../common/cluster-types";
|
||||||
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
|
|
||||||
|
describe("metrics-enabled", () => {
|
||||||
|
let cluster: Cluster;
|
||||||
|
let di: DiContainer;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
di = getDiForUnitTesting();
|
||||||
|
|
||||||
|
cluster = new Cluster({ contextName: "irrelevant", id: "irrelevant", kubeConfigPath: "irrelevant" });
|
||||||
|
const observableCluster = observable.box(cluster);
|
||||||
|
|
||||||
|
di.override(activeEntityInternalClusterInjectable, () => observableCluster);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("given cluster has no hidden metrics preferences, should be true for all resources", () => {
|
||||||
|
const resourceTypes = Object.values(ClusterMetricsResourceType);
|
||||||
|
|
||||||
|
delete cluster.preferences.hiddenMetrics;
|
||||||
|
resourceTypes.forEach((resourceType) => {
|
||||||
|
expect(di.inject(enabledMetricsInjectable, resourceType).get()).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("given cluster has metrics preferences, but nothing is hidden, should be true for all resources", () => {
|
||||||
|
const resourceTypes = Object.values(ClusterMetricsResourceType);
|
||||||
|
|
||||||
|
cluster.preferences.hiddenMetrics = [];
|
||||||
|
|
||||||
|
resourceTypes.forEach((resourceType) => {
|
||||||
|
expect(di.inject(enabledMetricsInjectable, resourceType).get()).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("given cluster has metrics preferences, and some resource is hidden, should be false", () => {
|
||||||
|
cluster.preferences.hiddenMetrics = [ClusterMetricsResourceType.Pod];
|
||||||
|
|
||||||
|
expect(di.inject(enabledMetricsInjectable, ClusterMetricsResourceType.Pod).get()).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ const metricsDetailsComponentEnabledInjectable = getInjectable({
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return current.object.kind == kind && metricsEnabled.get();
|
return metricsEnabled.get() && current.object.kind == kind;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
lifecycle: lifecycleEnum.keyedSingleton({
|
lifecycle: lifecycleEnum.keyedSingleton({
|
||||||
|
|||||||
@ -16,10 +16,10 @@ const enabledMetricsInjectable = getInjectable({
|
|||||||
const cluster = activeEntityInternalCluster.get();
|
const cluster = activeEntityInternalCluster.get();
|
||||||
|
|
||||||
if (!cluster?.preferences.hiddenMetrics) {
|
if (!cluster?.preferences.hiddenMetrics) {
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return cluster.preferences.hiddenMetrics.includes(kind);
|
return !cluster.preferences.hiddenMetrics.includes(kind);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
lifecycle: lifecycleEnum.keyedSingleton({
|
lifecycle: lifecycleEnum.keyedSingleton({
|
||||||
|
|||||||
@ -98,11 +98,12 @@ class NonInjectedClusterOverview extends React.Component<Dependencies> {
|
|||||||
render() {
|
render() {
|
||||||
const { eventStore, nodeStore, clusterMetricsAreVisible } = this.props;
|
const { eventStore, nodeStore, clusterMetricsAreVisible } = this.props;
|
||||||
const isLoaded = nodeStore.isLoaded && eventStore.isLoaded;
|
const isLoaded = nodeStore.isLoaded && eventStore.isLoaded;
|
||||||
|
const isMetricsHidden = !clusterMetricsAreVisible.get();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TabLayout scrollable>
|
<TabLayout scrollable>
|
||||||
<div className={styles.ClusterOverview} data-testid="cluster-overview-page">
|
<div className={styles.ClusterOverview} data-testid="cluster-overview-page">
|
||||||
{this.renderClusterOverview(isLoaded, clusterMetricsAreVisible.get())}
|
{this.renderClusterOverview(isLoaded, isMetricsHidden)}
|
||||||
</div>
|
</div>
|
||||||
</TabLayout>
|
</TabLayout>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -97,7 +97,7 @@ class NonInjectedPodDetailsContainer extends React.Component<PodDetailsContainer
|
|||||||
const readiness = pod.getReadinessProbe(container);
|
const readiness = pod.getReadinessProbe(container);
|
||||||
const startup = pod.getStartupProbe(container);
|
const startup = pod.getStartupProbe(container);
|
||||||
const isInitContainer = !!pod.getInitContainers().find(c => c.name == name);
|
const isInitContainer = !!pod.getInitContainers().find(c => c.name == name);
|
||||||
const isMetricHidden = containerMetricsVisible.get();
|
const isMetricVisible = containerMetricsVisible.get();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="PodDetailsContainer">
|
<div className="PodDetailsContainer">
|
||||||
@ -105,7 +105,7 @@ class NonInjectedPodDetailsContainer extends React.Component<PodDetailsContainer
|
|||||||
<StatusBrick className={cssNames(state, { ready })}/>
|
<StatusBrick className={cssNames(state, { ready })}/>
|
||||||
{name}
|
{name}
|
||||||
</div>
|
</div>
|
||||||
{(!isMetricHidden && !isInitContainer && metrics) && (
|
{(isMetricVisible && !isInitContainer && metrics) && (
|
||||||
<ResourceMetrics
|
<ResourceMetrics
|
||||||
object={pod}
|
object={pod}
|
||||||
tabs={[
|
tabs={[
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user