1
0
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:
Juho Heikka 2023-04-03 15:06:53 +03:00 committed by GitHub
parent 3b8ef07a9e
commit a73586d844
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 59 additions and 6 deletions

View File

@ -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);
});
});

View File

@ -21,7 +21,7 @@ const metricsDetailsComponentEnabledInjectable = getInjectable({
return false;
}
return current.object.kind == kind && metricsEnabled.get();
return metricsEnabled.get() && current.object.kind == kind;
});
},
lifecycle: lifecycleEnum.keyedSingleton({

View File

@ -16,10 +16,10 @@ const enabledMetricsInjectable = getInjectable({
const cluster = activeEntityInternalCluster.get();
if (!cluster?.preferences.hiddenMetrics) {
return false;
return true;
}
return cluster.preferences.hiddenMetrics.includes(kind);
return !cluster.preferences.hiddenMetrics.includes(kind);
});
},
lifecycle: lifecycleEnum.keyedSingleton({

View File

@ -98,11 +98,12 @@ class NonInjectedClusterOverview extends React.Component<Dependencies> {
render() {
const { eventStore, nodeStore, clusterMetricsAreVisible } = this.props;
const isLoaded = nodeStore.isLoaded && eventStore.isLoaded;
const isMetricsHidden = !clusterMetricsAreVisible.get();
return (
<TabLayout scrollable>
<div className={styles.ClusterOverview} data-testid="cluster-overview-page">
{this.renderClusterOverview(isLoaded, clusterMetricsAreVisible.get())}
{this.renderClusterOverview(isLoaded, isMetricsHidden)}
</div>
</TabLayout>
);

View File

@ -97,7 +97,7 @@ class NonInjectedPodDetailsContainer extends React.Component<PodDetailsContainer
const readiness = pod.getReadinessProbe(container);
const startup = pod.getStartupProbe(container);
const isInitContainer = !!pod.getInitContainers().find(c => c.name == name);
const isMetricHidden = containerMetricsVisible.get();
const isMetricVisible = containerMetricsVisible.get();
return (
<div className="PodDetailsContainer">
@ -105,7 +105,7 @@ class NonInjectedPodDetailsContainer extends React.Component<PodDetailsContainer
<StatusBrick className={cssNames(state, { ready })}/>
{name}
</div>
{(!isMetricHidden && !isInitContainer && metrics) && (
{(isMetricVisible && !isInitContainer && metrics) && (
<ResourceMetrics
object={pod}
tabs={[