mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
fix daemonset.store.test.ts
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
203580ad92
commit
c629d603fe
27
.eslintrc.js
27
.eslintrc.js
@ -130,7 +130,12 @@ module.exports = {
|
|||||||
"@typescript-eslint/no-empty-function": "off",
|
"@typescript-eslint/no-empty-function": "off",
|
||||||
"@typescript-eslint/no-unused-vars": "off",
|
"@typescript-eslint/no-unused-vars": "off",
|
||||||
"no-restricted-imports": ["error", {
|
"no-restricted-imports": ["error", {
|
||||||
"paths": ["."],
|
"paths": [
|
||||||
|
{
|
||||||
|
"name": ".",
|
||||||
|
"message": "No importing from local index.ts(x?) file. A common way to make circular dependencies.",
|
||||||
|
},
|
||||||
|
],
|
||||||
}],
|
}],
|
||||||
"@typescript-eslint/member-delimiter-style": ["error", {
|
"@typescript-eslint/member-delimiter-style": ["error", {
|
||||||
"multiline": {
|
"multiline": {
|
||||||
@ -242,5 +247,25 @@ module.exports = {
|
|||||||
"@typescript-eslint/consistent-type-imports": "error",
|
"@typescript-eslint/consistent-type-imports": "error",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
files: [
|
||||||
|
"src/{common,main,renderer}/**/*.ts",
|
||||||
|
"src/{common,main,renderer}/**/*.tsx",
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
"no-restricted-imports": ["error", {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"group": [
|
||||||
|
"**/extensions/renderer-api/**/*",
|
||||||
|
"**/extensions/main-api/**/*",
|
||||||
|
"**/extensions/common-api/**/*",
|
||||||
|
],
|
||||||
|
message: "No importing from the extension api definitions in application code",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}],
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|||||||
@ -286,7 +286,7 @@
|
|||||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.5",
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.5",
|
||||||
"@sentry/types": "^6.19.3",
|
"@sentry/types": "^6.19.3",
|
||||||
"@testing-library/jest-dom": "^5.16.4",
|
"@testing-library/jest-dom": "^5.16.4",
|
||||||
"@testing-library/react": "^13.0.0",
|
"@testing-library/react": "^13.0.1",
|
||||||
"@testing-library/user-event": "^13.5.0",
|
"@testing-library/user-event": "^13.5.0",
|
||||||
"@types/byline": "^4.2.33",
|
"@types/byline": "^4.2.33",
|
||||||
"@types/chart.js": "^2.9.36",
|
"@types/chart.js": "^2.9.36",
|
||||||
|
|||||||
19
src/common/k8s-api/endpoints/daemon-set.api.injectable.ts
Normal file
19
src/common/k8s-api/endpoints/daemon-set.api.injectable.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import assert from "assert";
|
||||||
|
import { createStoresAndApisInjectionToken } from "../create-stores-apis.token";
|
||||||
|
import { DaemonSetApi } from "./daemon-set.api";
|
||||||
|
|
||||||
|
const daemonSetApiInjectable = getInjectable({
|
||||||
|
id: "daemon-set-api",
|
||||||
|
instantiate: (di) => {
|
||||||
|
assert(di.inject(createStoresAndApisInjectionToken), "daemonSetApi is only available in certain environements");
|
||||||
|
|
||||||
|
return new DaemonSetApi();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default daemonSetApiInjectable;
|
||||||
@ -6,8 +6,7 @@
|
|||||||
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
||||||
import { KubeApi } from "../kube-api";
|
import { KubeApi } from "../kube-api";
|
||||||
import { metricsApi } from "./metrics.api";
|
import { metricsApi } from "./metrics.api";
|
||||||
import type { PodMetricData } from "./pods.api";
|
import type { PodMetricData } from "./pod.api";
|
||||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
|
||||||
import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object";
|
import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object";
|
||||||
import { KubeObject } from "../kube-object";
|
import { KubeObject } from "../kube-object";
|
||||||
import type { PodTemplateSpec } from "./types/pod-template-spec";
|
import type { PodTemplateSpec } from "./types/pod-template-spec";
|
||||||
@ -104,7 +103,3 @@ export function getMetricsForDaemonSets(daemonsets: DaemonSet[], namespace: stri
|
|||||||
namespace,
|
namespace,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export const daemonSetApi = isClusterPageContext()
|
|
||||||
? new DaemonSetApi()
|
|
||||||
: undefined as never;
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import moment from "moment";
|
|||||||
import type { DerivedKubeApiOptions } from "../kube-api";
|
import type { DerivedKubeApiOptions } from "../kube-api";
|
||||||
import { KubeApi } from "../kube-api";
|
import { KubeApi } from "../kube-api";
|
||||||
import { metricsApi } from "./metrics.api";
|
import { metricsApi } from "./metrics.api";
|
||||||
import type { PodMetricData, PodSpec } from "./pods.api";
|
import type { PodMetricData, PodSpec } from "./pod.api";
|
||||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||||
import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object";
|
import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object";
|
||||||
import { KubeObject } from "../kube-object";
|
import { KubeObject } from "../kube-object";
|
||||||
|
|||||||
@ -25,16 +25,16 @@ export * from "./network-policy.api";
|
|||||||
export * from "./nodes.api";
|
export * from "./nodes.api";
|
||||||
export * from "./persistent-volume.api";
|
export * from "./persistent-volume.api";
|
||||||
export * from "./persistent-volume-claims.api";
|
export * from "./persistent-volume-claims.api";
|
||||||
export * from "./pods.api";
|
export * from "./pod.api";
|
||||||
export * from "./poddisruptionbudget.api";
|
export * from "./pod-disruption-budget.api";
|
||||||
export * from "./pod-metrics.api";
|
export * from "./pod-metrics.api";
|
||||||
export * from "./podsecuritypolicy.api";
|
export * from "./pod-security-policy.api";
|
||||||
export * from "./replica-set.api";
|
export * from "./replica-set.api";
|
||||||
export * from "./resource-quota.api";
|
export * from "./resource-quota.api";
|
||||||
export * from "./role.api";
|
export * from "./role.api";
|
||||||
export * from "./role-binding.api";
|
export * from "./role-binding.api";
|
||||||
export * from "./secret.api";
|
export * from "./secret.api";
|
||||||
export * from "./selfsubjectrulesreviews.api";
|
export * from "./self-subject-rules-reviews.api";
|
||||||
export * from "./service.api";
|
export * from "./service.api";
|
||||||
export * from "./service-account.api";
|
export * from "./service-account.api";
|
||||||
export * from "./stateful-set.api";
|
export * from "./stateful-set.api";
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
||||||
import { KubeApi } from "../kube-api";
|
import { KubeApi } from "../kube-api";
|
||||||
import { metricsApi } from "./metrics.api";
|
import { metricsApi } from "./metrics.api";
|
||||||
import type { PodContainer, PodMetricData, PodSpec } from "./pods.api";
|
import type { PodContainer, PodMetricData, PodSpec } from "./pod.api";
|
||||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||||
import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object";
|
import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object";
|
||||||
import { KubeObject } from "../kube-object";
|
import { KubeObject } from "../kube-object";
|
||||||
|
|||||||
@ -6,6 +6,8 @@
|
|||||||
import { asLegacyGlobalForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
import { asLegacyGlobalForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||||
import clusterRoleBindingApiInjectable from "./cluster-role-binding.api.injectable";
|
import clusterRoleBindingApiInjectable from "./cluster-role-binding.api.injectable";
|
||||||
import clusterRoleApiInjectable from "./cluster-role.api.injectable";
|
import clusterRoleApiInjectable from "./cluster-role.api.injectable";
|
||||||
|
import daemonSetApiInjectable from "./daemon-set.api.injectable";
|
||||||
|
import podApiInjectable from "./pod.api.injectable";
|
||||||
import roleApiInjectable from "./role.api.injectable";
|
import roleApiInjectable from "./role.api.injectable";
|
||||||
import serviceAccountApiInjectable from "./service-account.api.injectable";
|
import serviceAccountApiInjectable from "./service-account.api.injectable";
|
||||||
|
|
||||||
@ -28,3 +30,13 @@ export const serviceAccountApi = asLegacyGlobalForExtensionApi(serviceAccountApi
|
|||||||
* @deprecated use `di.inject(roleApiInjectable)` instead
|
* @deprecated use `di.inject(roleApiInjectable)` instead
|
||||||
*/
|
*/
|
||||||
export const roleApi = asLegacyGlobalForExtensionApi(roleApiInjectable);
|
export const roleApi = asLegacyGlobalForExtensionApi(roleApiInjectable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use `di.inject(podApiInjectable)` instead
|
||||||
|
*/
|
||||||
|
export const podApi = asLegacyGlobalForExtensionApi(podApiInjectable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use `di.inject(daemonSetApiInjectable)` instead
|
||||||
|
*/
|
||||||
|
export const daemonSetApi = asLegacyGlobalForExtensionApi(daemonSetApiInjectable);
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import { KubeApi } from "../kube-api";
|
|||||||
import type { KubeObjectScope, KubeObjectStatus } from "../kube-object";
|
import type { KubeObjectScope, KubeObjectStatus } from "../kube-object";
|
||||||
import { KubeObject } from "../kube-object";
|
import { KubeObject } from "../kube-object";
|
||||||
import { metricsApi } from "./metrics.api";
|
import { metricsApi } from "./metrics.api";
|
||||||
import type { PodMetricData } from "./pods.api";
|
import type { PodMetricData } from "./pod.api";
|
||||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||||
|
|
||||||
export enum NamespaceStatusKind {
|
export enum NamespaceStatusKind {
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import type { KubeObjectScope, LabelSelector, TypedLocalObjectReference } from "
|
|||||||
import { KubeObject } from "../kube-object";
|
import { KubeObject } from "../kube-object";
|
||||||
import type { MetricData } from "./metrics.api";
|
import type { MetricData } from "./metrics.api";
|
||||||
import { metricsApi } from "./metrics.api";
|
import { metricsApi } from "./metrics.api";
|
||||||
import type { Pod } from "./pods.api";
|
import type { Pod } from "./pod.api";
|
||||||
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
||||||
import { KubeApi } from "../kube-api";
|
import { KubeApi } from "../kube-api";
|
||||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||||
|
|||||||
19
src/common/k8s-api/endpoints/pod.api.injectable.ts
Normal file
19
src/common/k8s-api/endpoints/pod.api.injectable.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import assert from "assert";
|
||||||
|
import { createStoresAndApisInjectionToken } from "../create-stores-apis.token";
|
||||||
|
import { PodApi } from "./pod.api";
|
||||||
|
|
||||||
|
const podApiInjectable = getInjectable({
|
||||||
|
id: "pod-api",
|
||||||
|
instantiate: (di) => {
|
||||||
|
assert(di.inject(createStoresAndApisInjectionToken), "podApi is only available in certain environments");
|
||||||
|
|
||||||
|
return new PodApi();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default podApiInjectable;
|
||||||
@ -7,7 +7,6 @@ import type { MetricData } from "./metrics.api";
|
|||||||
import { metricsApi } from "./metrics.api";
|
import { metricsApi } from "./metrics.api";
|
||||||
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
||||||
import { KubeApi } from "../kube-api";
|
import { KubeApi } from "../kube-api";
|
||||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
|
||||||
import type { RequireExactlyOne } from "type-fest";
|
import type { RequireExactlyOne } from "type-fest";
|
||||||
import type { KubeObjectMetadata, LocalObjectReference, Affinity, Toleration, LabelSelector, KubeObjectScope } from "../kube-object";
|
import type { KubeObjectMetadata, LocalObjectReference, Affinity, Toleration, LabelSelector, KubeObjectScope } from "../kube-object";
|
||||||
import type { SecretReference } from "./secret.api";
|
import type { SecretReference } from "./secret.api";
|
||||||
@ -984,7 +983,3 @@ export class Pod extends KubeObject<PodStatus, PodSpec, KubeObjectScope.Namespac
|
|||||||
return podIPs.map(value => value.ip);
|
return podIPs.map(value => value.ip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const podApi = isClusterPageContext()
|
|
||||||
? new PodApi()
|
|
||||||
: undefined as never;
|
|
||||||
@ -6,7 +6,7 @@
|
|||||||
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
||||||
import { KubeApi } from "../kube-api";
|
import { KubeApi } from "../kube-api";
|
||||||
import { metricsApi } from "./metrics.api";
|
import { metricsApi } from "./metrics.api";
|
||||||
import type { PodMetricData } from "./pods.api";
|
import type { PodMetricData } from "./pod.api";
|
||||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||||
import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object";
|
import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object";
|
||||||
import { KubeObject } from "../kube-object";
|
import { KubeObject } from "../kube-object";
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api";
|
||||||
import { KubeApi } from "../kube-api";
|
import { KubeApi } from "../kube-api";
|
||||||
import { metricsApi } from "./metrics.api";
|
import { metricsApi } from "./metrics.api";
|
||||||
import type { PodMetricData } from "./pods.api";
|
import type { PodMetricData } from "./pod.api";
|
||||||
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
|
||||||
import type { KubeObjectScope, LabelSelector } from "../kube-object";
|
import type { KubeObjectScope, LabelSelector } from "../kube-object";
|
||||||
import { KubeObject } from "../kube-object";
|
import { KubeObject } from "../kube-object";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import type { KubeObjectScope, KubeTemplateObjectMetadata } from "../../kube-object";
|
import type { KubeObjectScope, KubeTemplateObjectMetadata } from "../../kube-object";
|
||||||
import type { PodSpec } from "../pods.api";
|
import type { PodSpec } from "../pod.api";
|
||||||
|
|
||||||
export interface PodTemplateSpec {
|
export interface PodTemplateSpec {
|
||||||
metadata?: KubeTemplateObjectMetadata<KubeObjectScope.Namespace>;
|
metadata?: KubeTemplateObjectMetadata<KubeObjectScope.Namespace>;
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
import clusterRoleBindingApiInjectable from "../../common/k8s-api/endpoints/cluster-role-binding.api.injectable";
|
import clusterRoleBindingApiInjectable from "../../common/k8s-api/endpoints/cluster-role-binding.api.injectable";
|
||||||
import clusterRoleApiInjectable from "../../common/k8s-api/endpoints/cluster-role.api.injectable";
|
import clusterRoleApiInjectable from "../../common/k8s-api/endpoints/cluster-role.api.injectable";
|
||||||
|
import daemonSetApiInjectable from "../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
||||||
|
import podApiInjectable from "../../common/k8s-api/endpoints/pod.api.injectable";
|
||||||
import roleApiInjectable from "../../common/k8s-api/endpoints/role.api.injectable";
|
import roleApiInjectable from "../../common/k8s-api/endpoints/role.api.injectable";
|
||||||
import serviceAccountApiInjectable from "../../common/k8s-api/endpoints/service-account.api.injectable";
|
import serviceAccountApiInjectable from "../../common/k8s-api/endpoints/service-account.api.injectable";
|
||||||
import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||||
@ -21,16 +23,18 @@ export const serviceAccountsApi = asLegacyGlobalForExtensionApi(serviceAccountAp
|
|||||||
export const clusterRoleApi = asLegacyGlobalForExtensionApi(clusterRoleApiInjectable);
|
export const clusterRoleApi = asLegacyGlobalForExtensionApi(clusterRoleApiInjectable);
|
||||||
export const clusterRoleBindingApi = asLegacyGlobalForExtensionApi(clusterRoleBindingApiInjectable);
|
export const clusterRoleBindingApi = asLegacyGlobalForExtensionApi(clusterRoleBindingApiInjectable);
|
||||||
export const roleApi = asLegacyGlobalForExtensionApi(roleApiInjectable);
|
export const roleApi = asLegacyGlobalForExtensionApi(roleApiInjectable);
|
||||||
|
export const podsApi = asLegacyGlobalForExtensionApi(podApiInjectable);
|
||||||
|
export const daemonSetApi = asLegacyGlobalForExtensionApi(daemonSetApiInjectable);
|
||||||
|
|
||||||
export { ResourceStack } from "../../common/k8s/resource-stack";
|
export { ResourceStack } from "../../common/k8s/resource-stack";
|
||||||
export { apiManager } from "../../common/k8s-api/api-manager";
|
export { apiManager } from "../../common/k8s-api/api-manager";
|
||||||
export { KubeApi, forCluster, forRemoteCluster } from "../../common/k8s-api/kube-api";
|
export { KubeApi, forCluster, forRemoteCluster } from "../../common/k8s-api/kube-api";
|
||||||
export { KubeObject, KubeStatus } from "../../common/k8s-api/kube-object";
|
export { KubeObject, KubeStatus } from "../../common/k8s-api/kube-object";
|
||||||
export { KubeObjectStore } from "../../common/k8s-api/kube-object.store";
|
export { KubeObjectStore } from "../../common/k8s-api/kube-object.store";
|
||||||
export { Pod, podApi as podsApi, PodApi as PodsApi } from "../../common/k8s-api/endpoints/pods.api";
|
export { Pod, PodApi as PodsApi } from "../../common/k8s-api/endpoints/pod.api";
|
||||||
export { Node, nodeApi as nodesApi, NodeApi as NodesApi } from "../../common/k8s-api/endpoints/nodes.api";
|
export { Node, nodeApi as nodesApi, NodeApi as NodesApi } from "../../common/k8s-api/endpoints/nodes.api";
|
||||||
export { Deployment, deploymentApi, DeploymentApi } from "../../common/k8s-api/endpoints/deployment.api";
|
export { Deployment, deploymentApi, DeploymentApi } from "../../common/k8s-api/endpoints/deployment.api";
|
||||||
export { DaemonSet, daemonSetApi } from "../../common/k8s-api/endpoints/daemon-set.api";
|
export { DaemonSet } from "../../common/k8s-api/endpoints/daemon-set.api";
|
||||||
export { StatefulSet, statefulSetApi } from "../../common/k8s-api/endpoints/stateful-set.api";
|
export { StatefulSet, statefulSetApi } from "../../common/k8s-api/endpoints/stateful-set.api";
|
||||||
export { Job, jobApi } from "../../common/k8s-api/endpoints/job.api";
|
export { Job, jobApi } from "../../common/k8s-api/endpoints/job.api";
|
||||||
export { CronJob, cronJobApi } from "../../common/k8s-api/endpoints/cron-job.api";
|
export { CronJob, cronJobApi } from "../../common/k8s-api/endpoints/cron-job.api";
|
||||||
@ -40,7 +44,7 @@ export { ReplicaSet, replicaSetApi } from "../../common/k8s-api/endpoints/replic
|
|||||||
export { ResourceQuota, resourceQuotaApi } from "../../common/k8s-api/endpoints/resource-quota.api";
|
export { ResourceQuota, resourceQuotaApi } from "../../common/k8s-api/endpoints/resource-quota.api";
|
||||||
export { LimitRange, limitRangeApi } from "../../common/k8s-api/endpoints/limit-range.api";
|
export { LimitRange, limitRangeApi } from "../../common/k8s-api/endpoints/limit-range.api";
|
||||||
export { HorizontalPodAutoscaler, horizontalPodAutoscalerApi as hpaApi } from "../../common/k8s-api/endpoints/hpa.api";
|
export { HorizontalPodAutoscaler, horizontalPodAutoscalerApi as hpaApi } from "../../common/k8s-api/endpoints/hpa.api";
|
||||||
export { PodDisruptionBudget, podDisruptionBudgetApi as pdbApi } from "../../common/k8s-api/endpoints/poddisruptionbudget.api";
|
export { PodDisruptionBudget, podDisruptionBudgetApi as pdbApi } from "../../common/k8s-api/endpoints/pod-disruption-budget.api";
|
||||||
export { Service, serviceApi } from "../../common/k8s-api/endpoints/service.api";
|
export { Service, serviceApi } from "../../common/k8s-api/endpoints/service.api";
|
||||||
export { Endpoints as Endpoint, endpointsApi as endpointApi } from "../../common/k8s-api/endpoints/endpoint.api";
|
export { Endpoints as Endpoint, endpointsApi as endpointApi } from "../../common/k8s-api/endpoints/endpoint.api";
|
||||||
export { Ingress, ingressApi, IngressApi } from "../../common/k8s-api/endpoints/ingress.api";
|
export { Ingress, ingressApi, IngressApi } from "../../common/k8s-api/endpoints/ingress.api";
|
||||||
@ -59,7 +63,7 @@ export { CustomResourceDefinition, crdApi } from "../../common/k8s-api/endpoints
|
|||||||
|
|
||||||
// types
|
// types
|
||||||
export type { ILocalKubeApiConfig, IRemoteKubeApiConfig, IKubeApiCluster } from "../../common/k8s-api/kube-api";
|
export type { ILocalKubeApiConfig, IRemoteKubeApiConfig, IKubeApiCluster } from "../../common/k8s-api/kube-api";
|
||||||
export type { PodContainer as IPodContainer, PodContainerStatus as IPodContainerStatus } from "../../common/k8s-api/endpoints/pods.api";
|
export type { PodContainer as IPodContainer, PodContainerStatus as IPodContainerStatus } from "../../common/k8s-api/endpoints/pod.api";
|
||||||
export type { SecretReference as ISecretRef } from "../../common/k8s-api/endpoints/secret.api";
|
export type { SecretReference as ISecretRef } from "../../common/k8s-api/endpoints/secret.api";
|
||||||
export type { KubeObjectMetadata, KubeJsonApiObjectMetadata, KubeStatusData } from "../../common/k8s-api/kube-object";
|
export type { KubeObjectMetadata, KubeJsonApiObjectMetadata, KubeStatusData } from "../../common/k8s-api/kube-object";
|
||||||
export type { KubeObjectStoreLoadAllParams, KubeObjectStoreLoadingParams, KubeObjectStoreSubscribeParams } from "../../common/k8s-api/kube-object.store";
|
export type { KubeObjectStoreLoadAllParams, KubeObjectStoreLoadingParams, KubeObjectStoreSubscribeParams } from "../../common/k8s-api/kube-object.store";
|
||||||
|
|||||||
@ -12,9 +12,9 @@ import commandOverlayInjectable from "../../renderer/components/command-palette/
|
|||||||
import createPodLogsTabInjectable from "../../renderer/components/dock/logs/create-pod-logs-tab.injectable";
|
import createPodLogsTabInjectable from "../../renderer/components/dock/logs/create-pod-logs-tab.injectable";
|
||||||
import createWorkloadLogsTabInjectable from "../../renderer/components/dock/logs/create-workload-logs-tab.injectable";
|
import createWorkloadLogsTabInjectable from "../../renderer/components/dock/logs/create-workload-logs-tab.injectable";
|
||||||
import sendCommandInjectable from "../../renderer/components/dock/terminal/send-command.injectable";
|
import sendCommandInjectable from "../../renderer/components/dock/terminal/send-command.injectable";
|
||||||
import { podsStore } from "../../renderer/components/+workloads-pods/pods.store";
|
|
||||||
import renameTabInjectable from "../../renderer/components/dock/dock/rename-tab.injectable";
|
import renameTabInjectable from "../../renderer/components/dock/dock/rename-tab.injectable";
|
||||||
import { asLegacyGlobalObjectForExtensionApiWithModifications } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api-with-modifications";
|
import { asLegacyGlobalObjectForExtensionApiWithModifications } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api-with-modifications";
|
||||||
|
import { podStore } from "../../renderer/components/+workloads-pods/legacy-store";
|
||||||
|
|
||||||
// layouts
|
// layouts
|
||||||
export * from "../../renderer/components/layout/main-layout";
|
export * from "../../renderer/components/layout/main-layout";
|
||||||
@ -97,7 +97,7 @@ export const logTabStore = asLegacyGlobalObjectForExtensionApiWithModifications(
|
|||||||
createWorkloadTab: asLegacyGlobalFunctionForExtensionApi(createWorkloadLogsTabInjectable),
|
createWorkloadTab: asLegacyGlobalFunctionForExtensionApi(createWorkloadLogsTabInjectable),
|
||||||
renameTab: (tabId: string): void => {
|
renameTab: (tabId: string): void => {
|
||||||
const tabData = logTabStore.getData(tabId);
|
const tabData = logTabStore.getData(tabId);
|
||||||
const pod = podsStore.getById(tabData?.selectedPodId);
|
const pod = podStore.getById(tabData?.selectedPodId);
|
||||||
|
|
||||||
if (pod) {
|
if (pod) {
|
||||||
renameTab(tabId, `Pod ${pod.getName()}`);
|
renameTab(tabId, `Pod ${pod.getName()}`);
|
||||||
|
|||||||
@ -12,6 +12,8 @@ import clusterRoleApiInjectable from "../../common/k8s-api/endpoints/cluster-rol
|
|||||||
import serviceAccountApiInjectable from "../../common/k8s-api/endpoints/service-account.api.injectable";
|
import serviceAccountApiInjectable from "../../common/k8s-api/endpoints/service-account.api.injectable";
|
||||||
import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||||
import roleApiInjectable from "../../common/k8s-api/endpoints/role.api.injectable";
|
import roleApiInjectable from "../../common/k8s-api/endpoints/role.api.injectable";
|
||||||
|
import podApiInjectable from "../../common/k8s-api/endpoints/pod.api.injectable";
|
||||||
|
import daemonSetApiInjectable from "../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
||||||
|
|
||||||
export function isAllowedResource(resource: KubeResource | KubeResource[]) {
|
export function isAllowedResource(resource: KubeResource | KubeResource[]) {
|
||||||
const resources = castArray(resource);
|
const resources = castArray(resource);
|
||||||
@ -30,46 +32,47 @@ export const serviceAccountsApi = asLegacyGlobalForExtensionApi(serviceAccountAp
|
|||||||
export const clusterRoleApi = asLegacyGlobalForExtensionApi(clusterRoleApiInjectable);
|
export const clusterRoleApi = asLegacyGlobalForExtensionApi(clusterRoleApiInjectable);
|
||||||
export const clusterRoleBindingApi = asLegacyGlobalForExtensionApi(clusterRoleBindingApiInjectable);
|
export const clusterRoleBindingApi = asLegacyGlobalForExtensionApi(clusterRoleBindingApiInjectable);
|
||||||
export const roleApi = asLegacyGlobalForExtensionApi(roleApiInjectable);
|
export const roleApi = asLegacyGlobalForExtensionApi(roleApiInjectable);
|
||||||
|
export const podsApi = asLegacyGlobalForExtensionApi(podApiInjectable);
|
||||||
|
export const daemonSetApi = asLegacyGlobalForExtensionApi(daemonSetApiInjectable);
|
||||||
|
|
||||||
export {
|
export {
|
||||||
BaseKubeJsonApiObjectMetadata,
|
BaseKubeJsonApiObjectMetadata,
|
||||||
};
|
};
|
||||||
export { ResourceStack } from "../../common/k8s/resource-stack";
|
export { ResourceStack } from "../../common/k8s/resource-stack";
|
||||||
export { apiManager } from "../../common/k8s-api/api-manager";
|
export { apiManager } from "../../common/k8s-api/api-manager";
|
||||||
export { KubeObjectStore } from "../../common/k8s-api/kube-object.store";
|
|
||||||
export { KubeApi, forCluster, forRemoteCluster } from "../../common/k8s-api/kube-api";
|
export { KubeApi, forCluster, forRemoteCluster } from "../../common/k8s-api/kube-api";
|
||||||
export { KubeObject, KubeStatus } from "../../common/k8s-api/kube-object";
|
export { KubeObject, KubeStatus } from "../../common/k8s-api/kube-object";
|
||||||
export { Pod, podApi as podsApi, PodApi as PodsApi } from "../../common/k8s-api/endpoints";
|
export { KubeObjectStore } from "../../common/k8s-api/kube-object.store";
|
||||||
export { Node, nodeApi as nodesApi, NodeApi as NodesApi } from "../../common/k8s-api/endpoints";
|
export { Pod, PodApi as PodsApi } from "../../common/k8s-api/endpoints/pod.api";
|
||||||
export { Deployment, deploymentApi, DeploymentApi } from "../../common/k8s-api/endpoints";
|
export { Node, nodeApi as nodesApi, NodeApi as NodesApi } from "../../common/k8s-api/endpoints/nodes.api";
|
||||||
export { DaemonSet, daemonSetApi } from "../../common/k8s-api/endpoints";
|
export { Deployment, deploymentApi, DeploymentApi } from "../../common/k8s-api/endpoints/deployment.api";
|
||||||
export { StatefulSet, statefulSetApi } from "../../common/k8s-api/endpoints";
|
export { DaemonSet } from "../../common/k8s-api/endpoints/daemon-set.api";
|
||||||
export { Job, jobApi } from "../../common/k8s-api/endpoints";
|
export { StatefulSet, statefulSetApi } from "../../common/k8s-api/endpoints/stateful-set.api";
|
||||||
export { CronJob, cronJobApi } from "../../common/k8s-api/endpoints";
|
export { Job, jobApi } from "../../common/k8s-api/endpoints/job.api";
|
||||||
export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints";
|
export { CronJob, cronJobApi } from "../../common/k8s-api/endpoints/cron-job.api";
|
||||||
export { Secret, secretApi as secretsApi } from "../../common/k8s-api/endpoints";
|
export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints/configmap.api";
|
||||||
export { ReplicaSet, replicaSetApi } from "../../common/k8s-api/endpoints";
|
export { Secret, secretApi as secretsApi } from "../../common/k8s-api/endpoints/secret.api";
|
||||||
export { ResourceQuota, resourceQuotaApi } from "../../common/k8s-api/endpoints";
|
export { ReplicaSet, replicaSetApi } from "../../common/k8s-api/endpoints/replica-set.api";
|
||||||
export { LimitRange, limitRangeApi } from "../../common/k8s-api/endpoints";
|
export { ResourceQuota, resourceQuotaApi } from "../../common/k8s-api/endpoints/resource-quota.api";
|
||||||
export { HorizontalPodAutoscaler, horizontalPodAutoscalerApi as hpaApi } from "../../common/k8s-api/endpoints";
|
export { LimitRange, limitRangeApi } from "../../common/k8s-api/endpoints/limit-range.api";
|
||||||
export { PodDisruptionBudget, podDisruptionBudgetApi as pdbApi } from "../../common/k8s-api/endpoints";
|
export { HorizontalPodAutoscaler, horizontalPodAutoscalerApi as hpaApi } from "../../common/k8s-api/endpoints/hpa.api";
|
||||||
export { Service, serviceApi } from "../../common/k8s-api/endpoints";
|
export { PodDisruptionBudget, podDisruptionBudgetApi as pdbApi } from "../../common/k8s-api/endpoints/pod-disruption-budget.api";
|
||||||
export { Endpoints as Endpoint, endpointsApi as endpointApi } from "../../common/k8s-api/endpoints";
|
export { Service, serviceApi } from "../../common/k8s-api/endpoints/service.api";
|
||||||
export { Ingress, ingressApi, IngressApi } from "../../common/k8s-api/endpoints";
|
export { Endpoints as Endpoint, endpointsApi as endpointApi } from "../../common/k8s-api/endpoints/endpoint.api";
|
||||||
export { NetworkPolicy, networkPolicyApi } from "../../common/k8s-api/endpoints";
|
export { Ingress, ingressApi, IngressApi } from "../../common/k8s-api/endpoints/ingress.api";
|
||||||
export { PersistentVolume, persistentVolumeApi } from "../../common/k8s-api/endpoints";
|
export { NetworkPolicy, networkPolicyApi } from "../../common/k8s-api/endpoints/network-policy.api";
|
||||||
export { PersistentVolumeClaim, persistentVolumeClaimApi as pvcApi, PersistentVolumeClaimApi as PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints";
|
export { PersistentVolume, persistentVolumeApi } from "../../common/k8s-api/endpoints/persistent-volume.api";
|
||||||
export { StorageClass, storageClassApi } from "../../common/k8s-api/endpoints";
|
export { PersistentVolumeClaim, persistentVolumeClaimApi as pvcApi, PersistentVolumeClaimApi as PersistentVolumeClaimsApi } from "../../common/k8s-api/endpoints/persistent-volume-claims.api";
|
||||||
export { Namespace, namespaceApi as namespacesApi } from "../../common/k8s-api/endpoints";
|
export { StorageClass, storageClassApi } from "../../common/k8s-api/endpoints/storage-class.api";
|
||||||
export { KubeEvent, eventApi } from "../../common/k8s-api/endpoints";
|
export { Namespace, namespaceApi as namespacesApi } from "../../common/k8s-api/endpoints/namespaces.api";
|
||||||
export { ServiceAccount } from "../../common/k8s-api/endpoints";
|
export { KubeEvent, eventApi } from "../../common/k8s-api/endpoints/events.api";
|
||||||
export { Role } from "../../common/k8s-api/endpoints";
|
export { ServiceAccount } from "../../common/k8s-api/endpoints/service-account.api";
|
||||||
export { RoleBinding, roleBindingApi } from "../../common/k8s-api/endpoints";
|
export { Role } from "../../common/k8s-api/endpoints/role.api";
|
||||||
export { ClusterRole } from "../../common/k8s-api/endpoints";
|
export { RoleBinding, roleBindingApi } from "../../common/k8s-api/endpoints/role-binding.api";
|
||||||
export { ClusterRoleBinding } from "../../common/k8s-api/endpoints";
|
export { ClusterRole } from "../../common/k8s-api/endpoints/cluster-role.api";
|
||||||
export { CustomResourceDefinition, crdApi } from "../../common/k8s-api/endpoints";
|
export { ClusterRoleBinding } from "../../common/k8s-api/endpoints/cluster-role-binding.api";
|
||||||
|
export { CustomResourceDefinition, crdApi } from "../../common/k8s-api/endpoints/crd.api";
|
||||||
export { KubeObjectStatusLevel } from "./kube-object-status";
|
export { KubeObjectStatusLevel } from "./kube-object-status";
|
||||||
export { KubeJsonApi } from "../../common/k8s-api/kube-json-api";
|
|
||||||
|
|
||||||
// types
|
// types
|
||||||
export type { ILocalKubeApiConfig, IRemoteKubeApiConfig, IKubeApiCluster } from "../../common/k8s-api/kube-api";
|
export type { ILocalKubeApiConfig, IRemoteKubeApiConfig, IKubeApiCluster } from "../../common/k8s-api/kube-api";
|
||||||
@ -81,10 +84,10 @@ export type { KubeObjectStoreLoadAllParams, KubeObjectStoreLoadingParams, KubeOb
|
|||||||
|
|
||||||
// stores
|
// stores
|
||||||
export type { EventStore } from "../../renderer/components/+events/event.store";
|
export type { EventStore } from "../../renderer/components/+events/event.store";
|
||||||
export type { PodsStore } from "../../renderer/components/+workloads-pods/pods.store";
|
export type { PodStore as PodsStore } from "../../renderer/components/+workloads-pods/store";
|
||||||
export type { NodesStore } from "../../renderer/components/+nodes/nodes.store";
|
export type { NodesStore } from "../../renderer/components/+nodes/nodes.store";
|
||||||
export type { DeploymentStore } from "../../renderer/components/+workloads-deployments/deployments.store";
|
export type { DeploymentStore } from "../../renderer/components/+workloads-deployments/deployments.store";
|
||||||
export type { DaemonSetStore } from "../../renderer/components/+workloads-daemonsets/daemonsets.store";
|
export type { DaemonSetStore } from "../../renderer/components/+workloads-daemonsets/store";
|
||||||
export type { StatefulSetStore } from "../../renderer/components/+workloads-statefulsets/statefulset.store";
|
export type { StatefulSetStore } from "../../renderer/components/+workloads-statefulsets/statefulset.store";
|
||||||
export type { JobStore } from "../../renderer/components/+workloads-jobs/job.store";
|
export type { JobStore } from "../../renderer/components/+workloads-jobs/job.store";
|
||||||
export type { CronJobStore } from "../../renderer/components/+workloads-cronjobs/cronjob.store";
|
export type { CronJobStore } from "../../renderer/components/+workloads-cronjobs/cronjob.store";
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import React from "react";
|
|||||||
import { reaction } from "mobx";
|
import { reaction } from "mobx";
|
||||||
import { disposeOnUnmount, observer } from "mobx-react";
|
import { disposeOnUnmount, observer } from "mobx-react";
|
||||||
import { nodesStore } from "../+nodes/nodes.store";
|
import { nodesStore } from "../+nodes/nodes.store";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import type { PodStore } from "../+workloads-pods/store";
|
||||||
import { interval } from "../../utils";
|
import { interval } from "../../utils";
|
||||||
import { TabLayout } from "../layout/tab-layout";
|
import { TabLayout } from "../layout/tab-layout";
|
||||||
import { Spinner } from "../spinner";
|
import { Spinner } from "../spinner";
|
||||||
@ -21,17 +21,19 @@ import { getActiveClusterEntity } from "../../api/catalog-entity-registry";
|
|||||||
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
|
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
|
||||||
import { eventStore } from "../+events/event.store";
|
import { eventStore } from "../+events/event.store";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import clusterOverviewStoreInjectable from "./cluster-overview-store/cluster-overview-store.injectable";
|
import clusterOverviewStoreInjectable from "./cluster-overview-store/cluster-overview-store.injectable";
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
import type { Cluster } from "../../../common/cluster/cluster";
|
import type { Cluster } from "../../../common/cluster/cluster";
|
||||||
import hostedClusterInjectable from "../../../common/cluster-store/hosted-cluster.injectable";
|
import hostedClusterInjectable from "../../../common/cluster-store/hosted-cluster.injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
clusterOverviewStore: ClusterOverviewStore;
|
clusterOverviewStore: ClusterOverviewStore;
|
||||||
hostedCluster: Cluster;
|
hostedCluster: Cluster;
|
||||||
|
podStore: PodStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -49,7 +51,7 @@ class NonInjectedClusterOverview extends React.Component<Dependencies> {
|
|||||||
|
|
||||||
disposeOnUnmount(this, [
|
disposeOnUnmount(this, [
|
||||||
this.props.subscribeStores([
|
this.props.subscribeStores([
|
||||||
podsStore,
|
this.props.podStore,
|
||||||
eventStore,
|
eventStore,
|
||||||
nodesStore,
|
nodesStore,
|
||||||
]),
|
]),
|
||||||
@ -112,9 +114,10 @@ export const ClusterOverview = withInjectables<Dependencies>(NonInjectedClusterO
|
|||||||
assert(hostedCluster, "Only allowed to renderer ClusterOverview within cluster frame");
|
assert(hostedCluster, "Only allowed to renderer ClusterOverview within cluster frame");
|
||||||
|
|
||||||
return {
|
return {
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
clusterOverviewStore: di.inject(clusterOverviewStoreInjectable),
|
clusterOverviewStore: di.inject(clusterOverviewStoreInjectable),
|
||||||
hostedCluster,
|
hostedCluster,
|
||||||
|
podStore: di.inject(podStoreInjectable),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@ -4,8 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
|
import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
|
||||||
import type { PodDisruptionBudget, PodDisruptionBudgetApi } from "../../../common/k8s-api/endpoints/poddisruptionbudget.api";
|
import type { PodDisruptionBudget, PodDisruptionBudgetApi } from "../../../common/k8s-api/endpoints/pod-disruption-budget.api";
|
||||||
import { podDisruptionBudgetApi } from "../../../common/k8s-api/endpoints/poddisruptionbudget.api";
|
import { podDisruptionBudgetApi } from "../../../common/k8s-api/endpoints/pod-disruption-budget.api";
|
||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
import { apiManager } from "../../../common/k8s-api/api-manager";
|
||||||
import { isClusterPageContext } from "../../utils";
|
import { isClusterPageContext } from "../../utils";
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import "./pod-disruption-budgets.scss";
|
|||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { podDisruptionBudgetsStore } from "./pod-disruption-budgets.store";
|
import { podDisruptionBudgetsStore } from "./pod-disruption-budgets.store";
|
||||||
import type { PodDisruptionBudget } from "../../../common/k8s-api/endpoints/poddisruptionbudget.api";
|
import type { PodDisruptionBudget } from "../../../common/k8s-api/endpoints/pod-disruption-budget.api";
|
||||||
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
|
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
|
||||||
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
||||||
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
||||||
|
|||||||
@ -10,8 +10,8 @@ import { autoBind, isClusterPageContext } from "../../utils";
|
|||||||
import type { KubeEvent, KubeEventApi } from "../../../common/k8s-api/endpoints/events.api";
|
import type { KubeEvent, KubeEventApi } from "../../../common/k8s-api/endpoints/events.api";
|
||||||
import { eventApi } from "../../../common/k8s-api/endpoints/events.api";
|
import { eventApi } from "../../../common/k8s-api/endpoints/events.api";
|
||||||
import type { KubeObject } from "../../../common/k8s-api/kube-object";
|
import type { KubeObject } from "../../../common/k8s-api/kube-object";
|
||||||
import { Pod } from "../../../common/k8s-api/endpoints/pods.api";
|
import { Pod } from "../../../common/k8s-api/endpoints/pod.api";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
import { apiManager } from "../../../common/k8s-api/api-manager";
|
||||||
|
|
||||||
export class EventStore extends KubeObjectStore<KubeEvent, KubeEventApi> {
|
export class EventStore extends KubeObjectStore<KubeEvent, KubeEventApi> {
|
||||||
@ -48,7 +48,7 @@ export class EventStore extends KubeObjectStore<KubeEvent, KubeEventApi> {
|
|||||||
const { kind, uid } = recent.involvedObject;
|
const { kind, uid } = recent.involvedObject;
|
||||||
|
|
||||||
if (kind == Pod.kind) { // Wipe out running pods
|
if (kind == Pod.kind) { // Wipe out running pods
|
||||||
const pod = podsStore.items.find(pod => pod.getId() == uid);
|
const pod = podStore.getById(uid);
|
||||||
|
|
||||||
if (!pod || (!pod.hasIssues() && (pod.spec?.priority ?? 0) < 500000)) return undefined;
|
if (!pod || (!pod.hasIssues() && (pod.spec?.priority ?? 0) < 500000)) return undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,9 +14,9 @@ import { LocaleDate } from "../locale-date";
|
|||||||
import { eventStore } from "./event.store";
|
import { eventStore } from "./event.store";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable
|
|
||||||
from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
|
||||||
export interface KubeEventDetailsProps {
|
export interface KubeEventDetailsProps {
|
||||||
object: KubeObject;
|
object: KubeObject;
|
||||||
@ -86,16 +86,12 @@ class NonInjectedKubeEventDetails extends React.Component<KubeEventDetailsProps
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const KubeEventDetails = withInjectables<Dependencies, KubeEventDetailsProps>(
|
export const KubeEventDetails = withInjectables<Dependencies, KubeEventDetailsProps>(NonInjectedKubeEventDetails, {
|
||||||
NonInjectedKubeEventDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
}),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
});
|
||||||
...props,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -24,9 +24,9 @@ import { getActiveClusterEntity } from "../../api/catalog-entity-registry";
|
|||||||
import { getDetailsUrl } from "../kube-detail-params";
|
import { getDetailsUrl } from "../kube-detail-params";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable
|
|
||||||
from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
|
||||||
export interface NamespaceDetailsProps extends KubeObjectDetailsProps<Namespace> {
|
export interface NamespaceDetailsProps extends KubeObjectDetailsProps<Namespace> {
|
||||||
}
|
}
|
||||||
@ -132,14 +132,10 @@ class NonInjectedNamespaceDetails extends React.Component<NamespaceDetailsProps
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const NamespaceDetails = withInjectables<Dependencies, NamespaceDetailsProps>(
|
export const NamespaceDetails = withInjectables<Dependencies, NamespaceDetailsProps>(NonInjectedNamespaceDetails, {
|
||||||
NonInjectedNamespaceDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
}),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
});
|
||||||
...props,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|||||||
@ -18,9 +18,9 @@ import { ServiceDetailsEndpoint } from "./service-details-endpoint";
|
|||||||
import type { PortForwardStore } from "../../port-forward";
|
import type { PortForwardStore } from "../../port-forward";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import portForwardStoreInjectable from "../../port-forward/port-forward-store/port-forward-store.injectable";
|
import portForwardStoreInjectable from "../../port-forward/port-forward-store/port-forward-store.injectable";
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
|
||||||
export interface ServiceDetailsProps extends KubeObjectDetailsProps<Service> {
|
export interface ServiceDetailsProps extends KubeObjectDetailsProps<Service> {
|
||||||
}
|
}
|
||||||
@ -145,14 +145,10 @@ class NonInjectedServiceDetails extends React.Component<ServiceDetailsProps & De
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ServiceDetails = withInjectables<Dependencies, ServiceDetailsProps>(
|
export const ServiceDetails = withInjectables<Dependencies, ServiceDetailsProps>(NonInjectedServiceDetails, {
|
||||||
NonInjectedServiceDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
portForwardStore: di.inject(portForwardStoreInjectable),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
}),
|
||||||
portForwardStore: di.inject(portForwardStoreInjectable),
|
});
|
||||||
...props,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|||||||
@ -12,7 +12,6 @@ import { disposeOnUnmount, observer } from "mobx-react";
|
|||||||
import { DrawerItem, DrawerItemLabels } from "../drawer";
|
import { DrawerItem, DrawerItemLabels } from "../drawer";
|
||||||
import { Badge } from "../badge";
|
import { Badge } from "../badge";
|
||||||
import { ResourceMetrics } from "../resource-metrics";
|
import { ResourceMetrics } from "../resource-metrics";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
|
||||||
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
||||||
import type { ClusterMetricData } from "../../../common/k8s-api/endpoints";
|
import type { ClusterMetricData } from "../../../common/k8s-api/endpoints";
|
||||||
import { formatNodeTaint, getMetricsByNodeNames, Node } from "../../../common/k8s-api/endpoints";
|
import { formatNodeTaint, getMetricsByNodeNames, Node } from "../../../common/k8s-api/endpoints";
|
||||||
@ -26,14 +25,17 @@ import { NodeDetailsResources } from "./details-resources";
|
|||||||
import { DrawerTitle } from "../drawer/drawer-title";
|
import { DrawerTitle } from "../drawer/drawer-title";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
import type { PodStore } from "../+workloads-pods/store";
|
||||||
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
|
|
||||||
export interface NodeDetailsProps extends KubeObjectDetailsProps<Node> {
|
export interface NodeDetailsProps extends KubeObjectDetailsProps<Node> {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
|
podStore: PodStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -52,7 +54,7 @@ class NonInjectedNodeDetails extends React.Component<NodeDetailsProps & Dependen
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
this.props.subscribeStores([
|
this.props.subscribeStores([
|
||||||
podsStore,
|
this.props.podStore,
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -64,7 +66,7 @@ class NonInjectedNodeDetails extends React.Component<NodeDetailsProps & Dependen
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { object: node } = this.props;
|
const { object: node, podStore } = this.props;
|
||||||
|
|
||||||
if (!node) {
|
if (!node) {
|
||||||
return null;
|
return null;
|
||||||
@ -79,13 +81,13 @@ class NonInjectedNodeDetails extends React.Component<NodeDetailsProps & Dependen
|
|||||||
const { nodeInfo, addresses } = node.status ?? {};
|
const { nodeInfo, addresses } = node.status ?? {};
|
||||||
const conditions = node.getActiveConditions();
|
const conditions = node.getActiveConditions();
|
||||||
const taints = node.getTaints();
|
const taints = node.getTaints();
|
||||||
const childPods = podsStore.getPodsByNode(node.getName());
|
const childPods = podStore.getPodsByNode(node.getName());
|
||||||
const { metrics } = this;
|
const { metrics } = this;
|
||||||
const isMetricHidden = getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.Node);
|
const isMetricHidden = getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.Node);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="NodeDetails">
|
<div className="NodeDetails">
|
||||||
{!isMetricHidden && podsStore.isLoaded && (
|
{!isMetricHidden && podStore.isLoaded && (
|
||||||
<ResourceMetrics
|
<ResourceMetrics
|
||||||
loader={this.loadMetrics}
|
loader={this.loadMetrics}
|
||||||
tabs={[
|
tabs={[
|
||||||
@ -186,14 +188,11 @@ class NonInjectedNodeDetails extends React.Component<NodeDetailsProps & Dependen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const NodeDetails = withInjectables<Dependencies, NodeDetailsProps>(
|
export const NodeDetails = withInjectables<Dependencies, NodeDetailsProps>(NonInjectedNodeDetails, {
|
||||||
NonInjectedNodeDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
podStore: di.inject(podStoreInjectable),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
}),
|
||||||
...props,
|
});
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|||||||
@ -18,8 +18,8 @@ import { VolumeDetailsList } from "../+storage-volumes/volume-details-list";
|
|||||||
import { volumesStore } from "../+storage-volumes/volumes.store";
|
import { volumesStore } from "../+storage-volumes/volumes.store";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
|
||||||
export interface StorageClassDetailsProps extends KubeObjectDetailsProps<StorageClass> {
|
export interface StorageClassDetailsProps extends KubeObjectDetailsProps<StorageClass> {
|
||||||
}
|
}
|
||||||
@ -93,14 +93,10 @@ class NonInjectedStorageClassDetails extends React.Component<StorageClassDetails
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const StorageClassDetails = withInjectables<Dependencies, StorageClassDetailsProps>(
|
export const StorageClassDetails = withInjectables<Dependencies, StorageClassDetailsProps>(NonInjectedStorageClassDetails, {
|
||||||
NonInjectedStorageClassDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
}),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
});
|
||||||
...props,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import { makeObservable, observable, reaction } from "mobx";
|
|||||||
import { disposeOnUnmount, observer } from "mobx-react";
|
import { disposeOnUnmount, observer } from "mobx-react";
|
||||||
import { DrawerItem, DrawerTitle } from "../drawer";
|
import { DrawerItem, DrawerTitle } from "../drawer";
|
||||||
import { Badge } from "../badge";
|
import { Badge } from "../badge";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
import { ResourceMetrics } from "../resource-metrics";
|
import { ResourceMetrics } from "../resource-metrics";
|
||||||
import { VolumeClaimDiskChart } from "./volume-claim-disk-chart";
|
import { VolumeClaimDiskChart } from "./volume-claim-disk-chart";
|
||||||
@ -62,7 +62,7 @@ export class PersistentVolumeClaimDetails extends React.Component<PersistentVolu
|
|||||||
}
|
}
|
||||||
|
|
||||||
const { storageClassName, accessModes } = volumeClaim.spec;
|
const { storageClassName, accessModes } = volumeClaim.spec;
|
||||||
const pods = volumeClaim.getPods(podsStore.items);
|
const pods = volumeClaim.getPods(podStore.items);
|
||||||
const isMetricHidden = getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.VolumeClaim);
|
const isMetricHidden = getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.VolumeClaim);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import React from "react";
|
|||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
import { persistentVolumeClaimStore } from "./volume-claim.store";
|
import { persistentVolumeClaimStore } from "./volume-claim.store";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
||||||
import { unitsToBytes } from "../../../common/utils/convertMemory";
|
import { unitsToBytes } from "../../../common/utils/convertMemory";
|
||||||
import { stopPropagation } from "../../utils";
|
import { stopPropagation } from "../../utils";
|
||||||
@ -39,11 +39,11 @@ export class PersistentVolumeClaims extends React.Component {
|
|||||||
tableId="storage_volume_claims"
|
tableId="storage_volume_claims"
|
||||||
className="PersistentVolumeClaims"
|
className="PersistentVolumeClaims"
|
||||||
store={persistentVolumeClaimStore}
|
store={persistentVolumeClaimStore}
|
||||||
dependentStores={[podsStore]}
|
dependentStores={[podStore]}
|
||||||
sortingCallbacks={{
|
sortingCallbacks={{
|
||||||
[columnId.name]: pvc => pvc.getName(),
|
[columnId.name]: pvc => pvc.getName(),
|
||||||
[columnId.namespace]: pvc => pvc.getNs(),
|
[columnId.namespace]: pvc => pvc.getNs(),
|
||||||
[columnId.pods]: pvc => pvc.getPods(podsStore.items).map(pod => pod.getName()),
|
[columnId.pods]: pvc => pvc.getPods(podStore.items).map(pod => pod.getName()),
|
||||||
[columnId.status]: pvc => pvc.getStatus(),
|
[columnId.status]: pvc => pvc.getStatus(),
|
||||||
[columnId.size]: pvc => unitsToBytes(pvc.getStorage()),
|
[columnId.size]: pvc => unitsToBytes(pvc.getStorage()),
|
||||||
[columnId.storageClass]: pvc => pvc.spec.storageClassName,
|
[columnId.storageClass]: pvc => pvc.spec.storageClassName,
|
||||||
@ -51,7 +51,7 @@ export class PersistentVolumeClaims extends React.Component {
|
|||||||
}}
|
}}
|
||||||
searchFilters={[
|
searchFilters={[
|
||||||
pvc => pvc.getSearchFields(),
|
pvc => pvc.getSearchFields(),
|
||||||
pvc => pvc.getPods(podsStore.items).map(pod => pod.getName()),
|
pvc => pvc.getPods(podStore.items).map(pod => pod.getName()),
|
||||||
]}
|
]}
|
||||||
renderHeaderTitle="Persistent Volume Claims"
|
renderHeaderTitle="Persistent Volume Claims"
|
||||||
renderTableHeader={[
|
renderTableHeader={[
|
||||||
@ -65,7 +65,7 @@ export class PersistentVolumeClaims extends React.Component {
|
|||||||
{ title: "Status", className: "status", sortBy: columnId.status, id: columnId.status },
|
{ title: "Status", className: "status", sortBy: columnId.status, id: columnId.status },
|
||||||
]}
|
]}
|
||||||
renderTableContents={pvc => {
|
renderTableContents={pvc => {
|
||||||
const pods = pvc.getPods(podsStore.items);
|
const pods = pvc.getPods(podStore.items);
|
||||||
const { storageClassName } = pvc.spec;
|
const { storageClassName } = pvc.spec;
|
||||||
const storageClassDetailsUrl = getDetailsUrl(storageClassApi.getUrl({
|
const storageClassDetailsUrl = getDetailsUrl(storageClassApi.getUrl({
|
||||||
name: storageClassName,
|
name: storageClassName,
|
||||||
|
|||||||
@ -20,8 +20,8 @@ import { CronJob } from "../../../common/k8s-api/endpoints";
|
|||||||
import { KubeObjectMeta } from "../kube-object-meta";
|
import { KubeObjectMeta } from "../kube-object-meta";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
|
||||||
export interface CronJobDetailsProps extends KubeObjectDetailsProps<CronJob> {
|
export interface CronJobDetailsProps extends KubeObjectDetailsProps<CronJob> {
|
||||||
}
|
}
|
||||||
@ -115,13 +115,9 @@ class NonInjectedCronJobDetails extends React.Component<CronJobDetailsProps & De
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const CronJobDetails = withInjectables<Dependencies, CronJobDetailsProps>(
|
export const CronJobDetails = withInjectables<Dependencies, CronJobDetailsProps>(NonInjectedCronJobDetails, {
|
||||||
NonInjectedCronJobDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
}),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
});
|
||||||
...props,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|||||||
@ -12,8 +12,8 @@ import { Badge } from "../badge";
|
|||||||
import { PodDetailsStatuses } from "../+workloads-pods/pod-details-statuses";
|
import { PodDetailsStatuses } from "../+workloads-pods/pod-details-statuses";
|
||||||
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
||||||
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
||||||
import { daemonSetStore } from "./daemonsets.store";
|
import type { DaemonSetStore } from "./store";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import type { PodStore } from "../+workloads-pods/store";
|
||||||
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
||||||
import { DaemonSet, getMetricsForDaemonSets, type PodMetricData } from "../../../common/k8s-api/endpoints";
|
import { DaemonSet, getMetricsForDaemonSets, type PodMetricData } from "../../../common/k8s-api/endpoints";
|
||||||
import { ResourceMetrics, ResourceMetricsText } from "../resource-metrics";
|
import { ResourceMetrics, ResourceMetricsText } from "../resource-metrics";
|
||||||
@ -25,14 +25,18 @@ import { getActiveClusterEntity } from "../../api/catalog-entity-registry";
|
|||||||
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
|
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
import daemonSetStoreInjectable from "./store.injectable";
|
||||||
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
|
|
||||||
export interface DaemonSetDetailsProps extends KubeObjectDetailsProps<DaemonSet> {
|
export interface DaemonSetDetailsProps extends KubeObjectDetailsProps<DaemonSet> {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
|
daemonSetStore: DaemonSetStore;
|
||||||
|
podStore: PodStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -50,7 +54,7 @@ class NonInjectedDaemonSetDetails extends React.Component<DaemonSetDetailsProps
|
|||||||
this.metrics = null;
|
this.metrics = null;
|
||||||
}),
|
}),
|
||||||
this.props.subscribeStores([
|
this.props.subscribeStores([
|
||||||
podsStore,
|
this.props.podStore,
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -62,7 +66,7 @@ class NonInjectedDaemonSetDetails extends React.Component<DaemonSetDetailsProps
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { object: daemonSet } = this.props;
|
const { object: daemonSet, daemonSetStore, podStore } = this.props;
|
||||||
|
|
||||||
if (!daemonSet) {
|
if (!daemonSet) {
|
||||||
return null;
|
return null;
|
||||||
@ -83,7 +87,7 @@ class NonInjectedDaemonSetDetails extends React.Component<DaemonSetDetailsProps
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="DaemonSetDetails">
|
<div className="DaemonSetDetails">
|
||||||
{!isMetricHidden && podsStore.isLoaded && (
|
{!isMetricHidden && podStore.isLoaded && (
|
||||||
<ResourceMetrics
|
<ResourceMetrics
|
||||||
loader={this.loadMetrics}
|
loader={this.loadMetrics}
|
||||||
tabs={podMetricTabs}
|
tabs={podMetricTabs}
|
||||||
@ -130,13 +134,11 @@ class NonInjectedDaemonSetDetails extends React.Component<DaemonSetDetailsProps
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DaemonSetDetails = withInjectables<Dependencies, DaemonSetDetailsProps>(
|
export const DaemonSetDetails = withInjectables<Dependencies, DaemonSetDetailsProps>(NonInjectedDaemonSetDetails, {
|
||||||
NonInjectedDaemonSetDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
daemonSetStore: di.inject(daemonSetStoreInjectable),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
podStore: di.inject(podStoreInjectable),
|
||||||
...props,
|
}),
|
||||||
}),
|
});
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|||||||
@ -1,15 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
|
||||||
import { daemonSetStore } from "./daemonsets.store";
|
|
||||||
|
|
||||||
const daemonsetsStoreInjectable = getInjectable({
|
|
||||||
id: "daemonsets-store",
|
|
||||||
instantiate: () => daemonSetStore,
|
|
||||||
causesSideEffects: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
export default daemonsetsStoreInjectable;
|
|
||||||
|
|
||||||
@ -9,8 +9,8 @@ import React from "react";
|
|||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import type { DaemonSet } from "../../../common/k8s-api/endpoints";
|
import type { DaemonSet } from "../../../common/k8s-api/endpoints";
|
||||||
import { eventStore } from "../+events/event.store";
|
import { eventStore } from "../+events/event.store";
|
||||||
import { daemonSetStore } from "./daemonsets.store";
|
import { daemonSetStore } from "./legacy-store";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
||||||
import { Badge } from "../badge";
|
import { Badge } from "../badge";
|
||||||
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
|
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
|
||||||
@ -39,7 +39,7 @@ export class DaemonSets extends React.Component {
|
|||||||
tableId="workload_daemonsets"
|
tableId="workload_daemonsets"
|
||||||
className="DaemonSets"
|
className="DaemonSets"
|
||||||
store={daemonSetStore}
|
store={daemonSetStore}
|
||||||
dependentStores={[podsStore, eventStore]} // status icon component uses event store
|
dependentStores={[podStore, eventStore]} // status icon component uses event store
|
||||||
sortingCallbacks={{
|
sortingCallbacks={{
|
||||||
[columnId.name]: daemonSet => daemonSet.getName(),
|
[columnId.name]: daemonSet => daemonSet.getName(),
|
||||||
[columnId.namespace]: daemonSet => daemonSet.getNs(),
|
[columnId.namespace]: daemonSet => daemonSet.getNs(),
|
||||||
@ -68,7 +68,7 @@ export class DaemonSets extends React.Component {
|
|||||||
<Badge
|
<Badge
|
||||||
key={selector}
|
key={selector}
|
||||||
label={selector}
|
label={selector}
|
||||||
scrollable
|
scrollable
|
||||||
/>
|
/>
|
||||||
)),
|
)),
|
||||||
<KubeObjectAge key="age" object={daemonSet} />,
|
<KubeObjectAge key="age" object={daemonSet} />,
|
||||||
|
|||||||
@ -0,0 +1,12 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { asLegacyGlobalForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||||
|
import daemonSetStoreInjectable from "./store.injectable";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use `di.inject(daemonSetStoreInjectable)` instead
|
||||||
|
*/
|
||||||
|
export const daemonSetStore = asLegacyGlobalForExtensionApi(daemonSetStoreInjectable);
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import assert from "assert";
|
||||||
|
import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||||
|
import daemonSetApiInjectable from "../../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
||||||
|
import createStoresAndApisInjectable from "../../create-stores-apis.injectable";
|
||||||
|
import apiManagerInjectable from "../kube-object-menu/dependencies/api-manager.injectable";
|
||||||
|
import { DaemonSetStore } from "./store";
|
||||||
|
|
||||||
|
const daemonSetStoreInjectable = getInjectable({
|
||||||
|
id: "daemon-set-store",
|
||||||
|
instantiate: (di) => {
|
||||||
|
assert(di.inject(createStoresAndApisInjectable), "daemonSetStore is only available in certain environments");
|
||||||
|
|
||||||
|
const api = di.inject(daemonSetApiInjectable);
|
||||||
|
const apiManager = di.inject(apiManagerInjectable);
|
||||||
|
const store = new DaemonSetStore({
|
||||||
|
getPodsByOwnerId: di.inject(getPodsByOwnerIdInjectable),
|
||||||
|
}, api);
|
||||||
|
|
||||||
|
apiManager.registerStore(store);
|
||||||
|
|
||||||
|
return store;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default daemonSetStoreInjectable;
|
||||||
@ -3,16 +3,23 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import type { GetPodsByOwnerId } from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
|
||||||
import type { DaemonSet, DaemonSetApi, Pod } from "../../../common/k8s-api/endpoints";
|
import type { DaemonSet, DaemonSetApi, Pod } from "../../../common/k8s-api/endpoints";
|
||||||
import { daemonSetApi, PodStatusPhase } from "../../../common/k8s-api/endpoints";
|
import { PodStatusPhase } from "../../../common/k8s-api/endpoints";
|
||||||
|
import type { KubeObjectStoreOptions } from "../../../common/k8s-api/kube-object.store";
|
||||||
import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
|
import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
|
||||||
import { isClusterPageContext } from "../../utils";
|
|
||||||
|
export interface DaemonSetStoreDependencies {
|
||||||
|
readonly getPodsByOwnerId: GetPodsByOwnerId;
|
||||||
|
}
|
||||||
|
|
||||||
export class DaemonSetStore extends KubeObjectStore<DaemonSet, DaemonSetApi> {
|
export class DaemonSetStore extends KubeObjectStore<DaemonSet, DaemonSetApi> {
|
||||||
|
constructor(protected readonly dependencies: DaemonSetStoreDependencies, api: DaemonSetApi, opts?: KubeObjectStoreOptions) {
|
||||||
|
super(api, opts);
|
||||||
|
}
|
||||||
|
|
||||||
getChildPods(daemonSet: DaemonSet): Pod[] {
|
getChildPods(daemonSet: DaemonSet): Pod[] {
|
||||||
return podsStore.getPodsByOwnerId(daemonSet.getId());
|
return this.dependencies.getPodsByOwnerId(daemonSet.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
getStatuses(daemonSets?: DaemonSet[]) {
|
getStatuses(daemonSets?: DaemonSet[]) {
|
||||||
@ -33,11 +40,3 @@ export class DaemonSetStore extends KubeObjectStore<DaemonSet, DaemonSetApi> {
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const daemonSetStore = isClusterPageContext()
|
|
||||||
? new DaemonSetStore(daemonSetApi)
|
|
||||||
: undefined as never;
|
|
||||||
|
|
||||||
if (isClusterPageContext()) {
|
|
||||||
apiManager.registerStore(daemonSetStore);
|
|
||||||
}
|
|
||||||
@ -14,7 +14,6 @@ import type { PodMetricData } from "../../../common/k8s-api/endpoints";
|
|||||||
import { Deployment, getMetricsForDeployments } from "../../../common/k8s-api/endpoints";
|
import { Deployment, getMetricsForDeployments } from "../../../common/k8s-api/endpoints";
|
||||||
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
||||||
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
|
||||||
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
||||||
import { ResourceMetrics, ResourceMetricsText } from "../resource-metrics";
|
import { ResourceMetrics, ResourceMetricsText } from "../resource-metrics";
|
||||||
import { deploymentStore } from "./deployments.store";
|
import { deploymentStore } from "./deployments.store";
|
||||||
@ -28,14 +27,17 @@ import { getActiveClusterEntity } from "../../api/catalog-entity-registry";
|
|||||||
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
|
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
import type { PodStore } from "../+workloads-pods/store";
|
||||||
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
|
|
||||||
export interface DeploymentDetailsProps extends KubeObjectDetailsProps<Deployment> {
|
export interface DeploymentDetailsProps extends KubeObjectDetailsProps<Deployment> {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
|
podStore: PodStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -54,7 +56,7 @@ class NonInjectedDeploymentDetails extends React.Component<DeploymentDetailsProp
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
this.props.subscribeStores([
|
this.props.subscribeStores([
|
||||||
podsStore,
|
this.props.podStore,
|
||||||
replicaSetStore,
|
replicaSetStore,
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
@ -67,7 +69,7 @@ class NonInjectedDeploymentDetails extends React.Component<DeploymentDetailsProp
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { object: deployment } = this.props;
|
const { object: deployment, podStore } = this.props;
|
||||||
|
|
||||||
if (!deployment) {
|
if (!deployment) {
|
||||||
return null;
|
return null;
|
||||||
@ -88,7 +90,7 @@ class NonInjectedDeploymentDetails extends React.Component<DeploymentDetailsProp
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="DeploymentDetails">
|
<div className="DeploymentDetails">
|
||||||
{!isMetricHidden && podsStore.isLoaded && (
|
{!isMetricHidden && podStore.isLoaded && (
|
||||||
<ResourceMetrics
|
<ResourceMetrics
|
||||||
loader={this.loadMetrics}
|
loader={this.loadMetrics}
|
||||||
tabs={podMetricTabs}
|
tabs={podMetricTabs}
|
||||||
@ -161,14 +163,11 @@ class NonInjectedDeploymentDetails extends React.Component<DeploymentDetailsProp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DeploymentDetails = withInjectables<Dependencies, DeploymentDetailsProps>(
|
export const DeploymentDetails = withInjectables<Dependencies, DeploymentDetailsProps>(NonInjectedDeploymentDetails, {
|
||||||
NonInjectedDeploymentDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
podStore: di.inject(podStoreInjectable),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
}),
|
||||||
...props,
|
});
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
import { apiManager } from "../../../common/k8s-api/api-manager";
|
||||||
import type { Deployment, DeploymentApi } from "../../../common/k8s-api/endpoints";
|
import type { Deployment, DeploymentApi } from "../../../common/k8s-api/endpoints";
|
||||||
import { deploymentApi, PodStatusPhase } from "../../../common/k8s-api/endpoints";
|
import { deploymentApi, PodStatusPhase } from "../../../common/k8s-api/endpoints";
|
||||||
@ -38,7 +38,7 @@ export class DeploymentStore extends KubeObjectStore<Deployment, DeploymentApi>
|
|||||||
}
|
}
|
||||||
|
|
||||||
getChildPods(deployment: Deployment) {
|
getChildPods(deployment: Deployment) {
|
||||||
return podsStore
|
return podStore
|
||||||
.getByLabel(deployment.getTemplateLabels())
|
.getByLabel(deployment.getTemplateLabels())
|
||||||
.filter(pod => pod.getNs() === deployment.getNs());
|
.filter(pod => pod.getNs() === deployment.getNs());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,7 +14,6 @@ import { PodDetailsStatuses } from "../+workloads-pods/pod-details-statuses";
|
|||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
||||||
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
|
||||||
import { jobStore } from "./job.store";
|
import { jobStore } from "./job.store";
|
||||||
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
||||||
import { getMetricsForJobs, type PodMetricData, Job } from "../../../common/k8s-api/endpoints";
|
import { getMetricsForJobs, type PodMetricData, Job } from "../../../common/k8s-api/endpoints";
|
||||||
@ -29,14 +28,17 @@ import { getDetailsUrl } from "../kube-detail-params";
|
|||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
import { apiManager } from "../../../common/k8s-api/api-manager";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
import type { PodStore } from "../+workloads-pods/store";
|
||||||
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
|
|
||||||
export interface JobDetailsProps extends KubeObjectDetailsProps<Job> {
|
export interface JobDetailsProps extends KubeObjectDetailsProps<Job> {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
|
podStore: PodStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -54,7 +56,7 @@ class NonInjectedJobDetails extends React.Component<JobDetailsProps & Dependenci
|
|||||||
this.metrics = null;
|
this.metrics = null;
|
||||||
}),
|
}),
|
||||||
this.props.subscribeStores([
|
this.props.subscribeStores([
|
||||||
podsStore,
|
this.props.podStore,
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -129,7 +131,7 @@ class NonInjectedJobDetails extends React.Component<JobDetailsProps & Dependenci
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<p key={name}>
|
<p key={name}>
|
||||||
{kind}
|
{kind}
|
||||||
{" "}
|
{" "}
|
||||||
<Link to={detailsUrl}>{name}</Link>
|
<Link to={detailsUrl}>{name}</Link>
|
||||||
</p>
|
</p>
|
||||||
@ -168,14 +170,11 @@ class NonInjectedJobDetails extends React.Component<JobDetailsProps & Dependenci
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const JobDetails = withInjectables<Dependencies, JobDetailsProps>(
|
export const JobDetails = withInjectables<Dependencies, JobDetailsProps>(NonInjectedJobDetails, {
|
||||||
NonInjectedJobDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
podStore: di.inject(podStoreInjectable),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
}),
|
||||||
...props,
|
});
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|||||||
@ -8,13 +8,13 @@ import type { Job, JobApi } from "../../../common/k8s-api/endpoints/job.api";
|
|||||||
import { jobApi } from "../../../common/k8s-api/endpoints/job.api";
|
import { jobApi } from "../../../common/k8s-api/endpoints/job.api";
|
||||||
import type { CronJob, Pod } from "../../../common/k8s-api/endpoints";
|
import type { CronJob, Pod } from "../../../common/k8s-api/endpoints";
|
||||||
import { PodStatusPhase } from "../../../common/k8s-api/endpoints";
|
import { PodStatusPhase } from "../../../common/k8s-api/endpoints";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
import { apiManager } from "../../../common/k8s-api/api-manager";
|
||||||
import { isClusterPageContext } from "../../utils";
|
import { isClusterPageContext } from "../../utils";
|
||||||
|
|
||||||
export class JobStore extends KubeObjectStore<Job, JobApi> {
|
export class JobStore extends KubeObjectStore<Job, JobApi> {
|
||||||
getChildPods(job: Job): Pod[] {
|
getChildPods(job: Job): Pod[] {
|
||||||
return podsStore.getPodsByOwnerId(job.getId());
|
return podStore.getPodsByOwnerId(job.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
getJobsByOwner(cronJob: CronJob) {
|
getJobsByOwner(cronJob: CronJob) {
|
||||||
|
|||||||
@ -8,9 +8,7 @@ import "./overview.scss";
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { disposeOnUnmount, observer } from "mobx-react";
|
import { disposeOnUnmount, observer } from "mobx-react";
|
||||||
import { eventStore } from "../+events/event.store";
|
import { eventStore } from "../+events/event.store";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
|
||||||
import { deploymentStore } from "../+workloads-deployments/deployments.store";
|
import { deploymentStore } from "../+workloads-deployments/deployments.store";
|
||||||
import { daemonSetStore } from "../+workloads-daemonsets/daemonsets.store";
|
|
||||||
import { statefulSetStore } from "../+workloads-statefulsets/statefulset.store";
|
import { statefulSetStore } from "../+workloads-statefulsets/statefulset.store";
|
||||||
import { replicaSetStore } from "../+workloads-replicasets/replicasets.store";
|
import { replicaSetStore } from "../+workloads-replicasets/replicasets.store";
|
||||||
import { jobStore } from "../+workloads-jobs/job.store";
|
import { jobStore } from "../+workloads-jobs/job.store";
|
||||||
@ -23,15 +21,21 @@ import { TooltipPosition } from "../tooltip";
|
|||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import clusterFrameContextInjectable from "../../cluster-frame-context/cluster-frame-context.injectable";
|
import clusterFrameContextInjectable from "../../cluster-frame-context/cluster-frame-context.injectable";
|
||||||
import type { ClusterFrameContext } from "../../cluster-frame-context/cluster-frame-context";
|
import type { ClusterFrameContext } from "../../cluster-frame-context/cluster-frame-context";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
import detailComponentsInjectable from "./detail-components.injectable";
|
import detailComponentsInjectable from "./detail-components.injectable";
|
||||||
import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout";
|
import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout";
|
||||||
|
import type { PodStore } from "../+workloads-pods/store";
|
||||||
|
import type { DaemonSetStore } from "../+workloads-daemonsets/store";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
import daemonSetStoreInjectable from "../+workloads-daemonsets/store.injectable";
|
||||||
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
detailComponents: IComputedValue<React.ComponentType<{}>[]>;
|
detailComponents: IComputedValue<React.ComponentType<{}>[]>;
|
||||||
clusterFrameContext: ClusterFrameContext;
|
clusterFrameContext: ClusterFrameContext;
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
|
podStore: PodStore;
|
||||||
|
daemonSetStore: DaemonSetStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -47,11 +51,11 @@ class NonInjectedWorkloadsOverview extends React.Component<Dependencies> {
|
|||||||
disposeOnUnmount(this, [
|
disposeOnUnmount(this, [
|
||||||
this.props.subscribeStores([
|
this.props.subscribeStores([
|
||||||
cronJobStore,
|
cronJobStore,
|
||||||
daemonSetStore,
|
this.props.daemonSetStore,
|
||||||
deploymentStore,
|
deploymentStore,
|
||||||
eventStore,
|
eventStore,
|
||||||
jobStore,
|
jobStore,
|
||||||
podsStore,
|
this.props.podStore,
|
||||||
replicaSetStore,
|
replicaSetStore,
|
||||||
statefulSetStore,
|
statefulSetStore,
|
||||||
], {
|
], {
|
||||||
@ -104,14 +108,12 @@ class NonInjectedWorkloadsOverview extends React.Component<Dependencies> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WorkloadsOverview = withInjectables<Dependencies>(
|
export const WorkloadsOverview = withInjectables<Dependencies>(NonInjectedWorkloadsOverview, {
|
||||||
NonInjectedWorkloadsOverview,
|
getProps: (di) => ({
|
||||||
|
detailComponents: di.inject(detailComponentsInjectable),
|
||||||
{
|
clusterFrameContext: di.inject(clusterFrameContextInjectable),
|
||||||
getProps: (di) => ({
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
detailComponents: di.inject(detailComponentsInjectable),
|
daemonSetStore: di.inject(daemonSetStoreInjectable),
|
||||||
clusterFrameContext: di.inject(clusterFrameContextInjectable),
|
podStore: di.inject(podStoreInjectable),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
}),
|
||||||
}),
|
});
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import { workloadInjectionToken } from "../workload-injection-token";
|
import { workloadInjectionToken } from "../workload-injection-token";
|
||||||
import { ResourceNames } from "../../../../utils/rbac";
|
import { ResourceNames } from "../../../../utils/rbac";
|
||||||
import namespaceStoreInjectable from "../../../+namespaces/namespace-store/namespace-store.injectable";
|
import namespaceStoreInjectable from "../../../+namespaces/namespace-store/namespace-store.injectable";
|
||||||
import daemonsetsStoreInjectable from "../../../+workloads-daemonsets/daemonsets-store.injectable";
|
import daemonsetsStoreInjectable from "../../../+workloads-daemonsets/store.injectable";
|
||||||
import navigateToDaemonsetsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/daemonsets/navigate-to-daemonsets.injectable";
|
import navigateToDaemonsetsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/daemonsets/navigate-to-daemonsets.injectable";
|
||||||
import { computed } from "mobx";
|
import { computed } from "mobx";
|
||||||
|
|
||||||
|
|||||||
@ -6,9 +6,9 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import { workloadInjectionToken } from "../workload-injection-token";
|
import { workloadInjectionToken } from "../workload-injection-token";
|
||||||
import { ResourceNames } from "../../../../utils/rbac";
|
import { ResourceNames } from "../../../../utils/rbac";
|
||||||
import navigateToPodsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/pods/navigate-to-pods.injectable";
|
import navigateToPodsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/pods/navigate-to-pods.injectable";
|
||||||
import podsStoreInjectable from "../../../+workloads-pods/pods-store.injectable";
|
|
||||||
import namespaceStoreInjectable from "../../../+namespaces/namespace-store/namespace-store.injectable";
|
import namespaceStoreInjectable from "../../../+namespaces/namespace-store/namespace-store.injectable";
|
||||||
import { computed } from "mobx";
|
import { computed } from "mobx";
|
||||||
|
import podStoreInjectable from "../../../+workloads-pods/store.injectable";
|
||||||
|
|
||||||
const podsWorkloadInjectable = getInjectable({
|
const podsWorkloadInjectable = getInjectable({
|
||||||
id: "pods-workload",
|
id: "pods-workload",
|
||||||
@ -16,7 +16,7 @@ const podsWorkloadInjectable = getInjectable({
|
|||||||
instantiate: (di) => {
|
instantiate: (di) => {
|
||||||
const navigate = di.inject(navigateToPodsInjectable);
|
const navigate = di.inject(navigateToPodsInjectable);
|
||||||
const namespaceStore = di.inject(namespaceStoreInjectable);
|
const namespaceStore = di.inject(namespaceStoreInjectable);
|
||||||
const store = di.inject(podsStoreInjectable);
|
const store = di.inject(podStoreInjectable);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
resourceName: "pods",
|
resourceName: "pods",
|
||||||
|
|||||||
@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import type { Pod } from "../../../common/k8s-api/endpoints";
|
||||||
|
import podStoreInjectable from "./store.injectable";
|
||||||
|
|
||||||
|
export type GetPodById = (id: string) => Pod | undefined;
|
||||||
|
|
||||||
|
const getPodByIdInjectable = getInjectable({
|
||||||
|
id: "get-pod-by-id",
|
||||||
|
instantiate: (di): GetPodById => {
|
||||||
|
const store = di.inject(podStoreInjectable);
|
||||||
|
|
||||||
|
return id => store.getById(id);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default getPodByIdInjectable;
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import type { Pod } from "../../../common/k8s-api/endpoints";
|
||||||
|
import podStoreInjectable from "./store.injectable";
|
||||||
|
|
||||||
|
export type GetPodsByOwnerId = (ownerId: string) => Pod[];
|
||||||
|
|
||||||
|
const getPodsByOwnerIdInjectable = getInjectable({
|
||||||
|
id: "get-pods-by-owner-id",
|
||||||
|
instantiate: (di): GetPodsByOwnerId => {
|
||||||
|
const podStore = di.inject(podStoreInjectable);
|
||||||
|
|
||||||
|
return (ownerId) => podStore.getPodsByOwnerId(ownerId);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default getPodsByOwnerIdInjectable;
|
||||||
12
src/renderer/components/+workloads-pods/legacy-store.ts
Normal file
12
src/renderer/components/+workloads-pods/legacy-store.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { asLegacyGlobalForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||||
|
import podStoreInjectable from "./store.injectable";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use `di.inject(podStoreInjectable)` instead
|
||||||
|
*/
|
||||||
|
export const podStore = asLegacyGlobalForExtensionApi(podStoreInjectable);
|
||||||
@ -9,7 +9,7 @@ import React from "react";
|
|||||||
import kebabCase from "lodash/kebabCase";
|
import kebabCase from "lodash/kebabCase";
|
||||||
import { reaction } from "mobx";
|
import { reaction } from "mobx";
|
||||||
import { disposeOnUnmount, observer } from "mobx-react";
|
import { disposeOnUnmount, observer } from "mobx-react";
|
||||||
import { podsStore } from "./pods.store";
|
import { podStore } from "./legacy-store";
|
||||||
import type { Pod } from "../../../common/k8s-api/endpoints";
|
import type { Pod } from "../../../common/k8s-api/endpoints";
|
||||||
import { autoBind, bytesToUnits, cssNames, interval, prevDefault } from "../../utils";
|
import { autoBind, bytesToUnits, cssNames, interval, prevDefault } from "../../utils";
|
||||||
import { LineProgress } from "../line-progress";
|
import { LineProgress } from "../line-progress";
|
||||||
@ -42,7 +42,7 @@ export class PodDetailsList extends React.Component<PodDetailsListProps> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private metricsWatcher = interval(120, () => {
|
private metricsWatcher = interval(120, () => {
|
||||||
podsStore.loadKubeMetrics(this.props.owner.getNs());
|
podStore.loadKubeMetrics(this.props.owner.getNs());
|
||||||
});
|
});
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
@ -113,7 +113,7 @@ export class PodDetailsList extends React.Component<PodDetailsListProps> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const metrics = podsStore.getPodKubeMetrics(pod);
|
const metrics = podStore.getPodKubeMetrics(pod);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TableRow
|
<TableRow
|
||||||
@ -138,7 +138,7 @@ export class PodDetailsList extends React.Component<PodDetailsListProps> {
|
|||||||
render() {
|
render() {
|
||||||
const { pods } = this.props;
|
const { pods } = this.props;
|
||||||
|
|
||||||
if (!podsStore.isLoaded) {
|
if (!podStore.isLoaded) {
|
||||||
return (
|
return (
|
||||||
<div className="PodDetailsList flex justify-center">
|
<div className="PodDetailsList flex justify-center">
|
||||||
<Spinner />
|
<Spinner />
|
||||||
@ -166,8 +166,8 @@ export class PodDetailsList extends React.Component<PodDetailsListProps> {
|
|||||||
sortable={{
|
sortable={{
|
||||||
[sortBy.name]: pod => pod.getName(),
|
[sortBy.name]: pod => pod.getName(),
|
||||||
[sortBy.namespace]: pod => pod.getNs(),
|
[sortBy.namespace]: pod => pod.getNs(),
|
||||||
[sortBy.cpu]: pod => podsStore.getPodKubeMetrics(pod).cpu,
|
[sortBy.cpu]: pod => podStore.getPodKubeMetrics(pod).cpu,
|
||||||
[sortBy.memory]: pod => podsStore.getPodKubeMetrics(pod).memory,
|
[sortBy.memory]: pod => podStore.getPodKubeMetrics(pod).memory,
|
||||||
}}
|
}}
|
||||||
sortByDefault={{ sortBy: sortBy.cpu, orderBy: "desc" }}
|
sortByDefault={{ sortBy: sortBy.cpu, orderBy: "desc" }}
|
||||||
sortSyncWithUrl={false}
|
sortSyncWithUrl={false}
|
||||||
|
|||||||
@ -1,14 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
|
||||||
import { podsStore } from "./pods.store";
|
|
||||||
|
|
||||||
const podsStoreInjectable = getInjectable({
|
|
||||||
id: "pods-store",
|
|
||||||
instantiate: () => podsStore,
|
|
||||||
causesSideEffects: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
export default podsStoreInjectable;
|
|
||||||
@ -8,7 +8,7 @@ import "./pods.scss";
|
|||||||
import React, { Fragment } from "react";
|
import React, { Fragment } from "react";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
import { podsStore } from "./pods.store";
|
import { podStore } from "./legacy-store";
|
||||||
import { eventStore } from "../+events/event.store";
|
import { eventStore } from "../+events/event.store";
|
||||||
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
||||||
import type { Pod } from "../../../common/k8s-api/endpoints";
|
import type { Pod } from "../../../common/k8s-api/endpoints";
|
||||||
@ -80,7 +80,7 @@ export class Pods extends React.Component {
|
|||||||
{this.renderState(name, ready, "terminated", state.terminated)}
|
{this.renderState(name, ready, "terminated", state.terminated)}
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
));
|
));
|
||||||
@ -91,7 +91,7 @@ export class Pods extends React.Component {
|
|||||||
<SiblingsInTabLayout>
|
<SiblingsInTabLayout>
|
||||||
<KubeObjectListLayout
|
<KubeObjectListLayout
|
||||||
className="Pods"
|
className="Pods"
|
||||||
store={podsStore}
|
store={podStore}
|
||||||
dependentStores={[eventStore]} // status icon component uses event store
|
dependentStores={[eventStore]} // status icon component uses event store
|
||||||
tableId = "workloads_pods"
|
tableId = "workloads_pods"
|
||||||
isConfigurable
|
isConfigurable
|
||||||
@ -131,7 +131,7 @@ export class Pods extends React.Component {
|
|||||||
key="name"
|
key="name"
|
||||||
label={pod.getName()}
|
label={pod.getName()}
|
||||||
tooltip={pod.getName()}
|
tooltip={pod.getName()}
|
||||||
expandable={false}
|
expandable={false}
|
||||||
/>,
|
/>,
|
||||||
<KubeObjectStatusIcon key="icon" object={pod} />,
|
<KubeObjectStatusIcon key="icon" object={pod} />,
|
||||||
pod.getNs(),
|
pod.getNs(),
|
||||||
|
|||||||
27
src/renderer/components/+workloads-pods/store.injectable.ts
Normal file
27
src/renderer/components/+workloads-pods/store.injectable.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import assert from "assert";
|
||||||
|
import podApiInjectable from "../../../common/k8s-api/endpoints/pod.api.injectable";
|
||||||
|
import createStoresAndApisInjectable from "../../create-stores-apis.injectable";
|
||||||
|
import apiManagerInjectable from "../kube-object-menu/dependencies/api-manager.injectable";
|
||||||
|
import { PodStore } from "./store";
|
||||||
|
|
||||||
|
const podStoreInjectable = getInjectable({
|
||||||
|
id: "pod-store",
|
||||||
|
instantiate: (di) => {
|
||||||
|
assert(di.inject(createStoresAndApisInjectable), "podStore is only available in certain environements");
|
||||||
|
|
||||||
|
const api = di.inject(podApiInjectable);
|
||||||
|
const apiManager = di.inject(apiManagerInjectable);
|
||||||
|
const store = new PodStore(api);
|
||||||
|
|
||||||
|
apiManager.registerStore(store);
|
||||||
|
|
||||||
|
return store;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default podStoreInjectable;
|
||||||
@ -6,13 +6,12 @@
|
|||||||
import countBy from "lodash/countBy";
|
import countBy from "lodash/countBy";
|
||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
|
import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
|
||||||
import { cpuUnitsToNumber, isClusterPageContext, unitsToBytes } from "../../utils";
|
import { cpuUnitsToNumber, unitsToBytes } from "../../utils";
|
||||||
import type { Pod, PodMetrics, PodApi } from "../../../common/k8s-api/endpoints";
|
import type { Pod, PodMetrics, PodApi } from "../../../common/k8s-api/endpoints";
|
||||||
import { podMetricsApi, podApi } from "../../../common/k8s-api/endpoints";
|
import { podMetricsApi } from "../../../common/k8s-api/endpoints";
|
||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
|
||||||
import type { KubeObject, KubeObjectScope } from "../../../common/k8s-api/kube-object";
|
import type { KubeObject, KubeObjectScope } from "../../../common/k8s-api/kube-object";
|
||||||
|
|
||||||
export class PodsStore extends KubeObjectStore<Pod, PodApi> {
|
export class PodStore extends KubeObjectStore<Pod, PodApi> {
|
||||||
readonly kubeMetrics = observable.array<PodMetrics>([]);
|
readonly kubeMetrics = observable.array<PodMetrics>([]);
|
||||||
|
|
||||||
async loadKubeMetrics(namespace?: string) {
|
async loadKubeMetrics(namespace?: string) {
|
||||||
@ -77,11 +76,3 @@ export class PodsStore extends KubeObjectStore<Pod, PodApi> {
|
|||||||
}, empty);
|
}, empty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const podsStore = isClusterPageContext()
|
|
||||||
? new PodsStore(podApi)
|
|
||||||
: undefined as never;
|
|
||||||
|
|
||||||
if (isClusterPageContext()) {
|
|
||||||
apiManager.registerStore(podsStore);
|
|
||||||
}
|
|
||||||
@ -13,7 +13,6 @@ import { PodDetailsStatuses } from "../+workloads-pods/pod-details-statuses";
|
|||||||
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
||||||
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
||||||
import { disposeOnUnmount, observer } from "mobx-react";
|
import { disposeOnUnmount, observer } from "mobx-react";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
|
||||||
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
||||||
import type { PodMetricData } from "../../../common/k8s-api/endpoints";
|
import type { PodMetricData } from "../../../common/k8s-api/endpoints";
|
||||||
import { getMetricsForReplicaSets, ReplicaSet } from "../../../common/k8s-api/endpoints";
|
import { getMetricsForReplicaSets, ReplicaSet } from "../../../common/k8s-api/endpoints";
|
||||||
@ -25,14 +24,17 @@ import { getActiveClusterEntity } from "../../api/catalog-entity-registry";
|
|||||||
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
|
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
import type { PodStore } from "../+workloads-pods/store";
|
||||||
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
|
|
||||||
export interface ReplicaSetDetailsProps extends KubeObjectDetailsProps<ReplicaSet> {
|
export interface ReplicaSetDetailsProps extends KubeObjectDetailsProps<ReplicaSet> {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
|
podStore: PodStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -51,7 +53,7 @@ class NonInjectedReplicaSetDetails extends React.Component<ReplicaSetDetailsProp
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
this.props.subscribeStores([
|
this.props.subscribeStores([
|
||||||
podsStore,
|
this.props.podStore,
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -63,7 +65,7 @@ class NonInjectedReplicaSetDetails extends React.Component<ReplicaSetDetailsProp
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { object: replicaSet } = this.props;
|
const { object: replicaSet, podStore } = this.props;
|
||||||
|
|
||||||
if (!replicaSet) {
|
if (!replicaSet) {
|
||||||
return null;
|
return null;
|
||||||
@ -84,7 +86,7 @@ class NonInjectedReplicaSetDetails extends React.Component<ReplicaSetDetailsProp
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="ReplicaSetDetails">
|
<div className="ReplicaSetDetails">
|
||||||
{!isMetricHidden && podsStore.isLoaded && (
|
{!isMetricHidden && podStore.isLoaded && (
|
||||||
<ResourceMetrics
|
<ResourceMetrics
|
||||||
loader={this.loadMetrics}
|
loader={this.loadMetrics}
|
||||||
tabs={podMetricTabs}
|
tabs={podMetricTabs}
|
||||||
@ -131,13 +133,10 @@ class NonInjectedReplicaSetDetails extends React.Component<ReplicaSetDetailsProp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ReplicaSetDetails = withInjectables<Dependencies, ReplicaSetDetailsProps>(
|
export const ReplicaSetDetails = withInjectables<Dependencies, ReplicaSetDetailsProps>(NonInjectedReplicaSetDetails, {
|
||||||
NonInjectedReplicaSetDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
podStore: di.inject(podStoreInjectable),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
}),
|
||||||
...props,
|
});
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|||||||
@ -3,17 +3,17 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
import { apiManager } from "../../../common/k8s-api/api-manager";
|
||||||
import type { Deployment, ReplicaSet, ReplicaSetApi } from "../../../common/k8s-api/endpoints";
|
import type { Deployment, ReplicaSet, ReplicaSetApi } from "../../../common/k8s-api/endpoints";
|
||||||
import { replicaSetApi } from "../../../common/k8s-api/endpoints";
|
import { replicaSetApi } from "../../../common/k8s-api/endpoints";
|
||||||
import { PodStatusPhase } from "../../../common/k8s-api/endpoints/pods.api";
|
import { PodStatusPhase } from "../../../common/k8s-api/endpoints/pod.api";
|
||||||
import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
|
import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
|
||||||
import { isClusterPageContext } from "../../utils";
|
import { isClusterPageContext } from "../../utils";
|
||||||
|
|
||||||
export class ReplicaSetStore extends KubeObjectStore<ReplicaSet, ReplicaSetApi> {
|
export class ReplicaSetStore extends KubeObjectStore<ReplicaSet, ReplicaSetApi> {
|
||||||
getChildPods(replicaSet: ReplicaSet) {
|
getChildPods(replicaSet: ReplicaSet) {
|
||||||
return podsStore.getPodsByOwnerId(replicaSet.getId());
|
return podStore.getPodsByOwnerId(replicaSet.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
getStatuses(replicaSets: ReplicaSet[]) {
|
getStatuses(replicaSets: ReplicaSet[]) {
|
||||||
|
|||||||
@ -13,7 +13,6 @@ import { DrawerItem } from "../drawer";
|
|||||||
import { PodDetailsStatuses } from "../+workloads-pods/pod-details-statuses";
|
import { PodDetailsStatuses } from "../+workloads-pods/pod-details-statuses";
|
||||||
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
||||||
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
|
||||||
import { statefulSetStore } from "./statefulset.store";
|
import { statefulSetStore } from "./statefulset.store";
|
||||||
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
||||||
import type { PodMetricData } from "../../../common/k8s-api/endpoints";
|
import type { PodMetricData } from "../../../common/k8s-api/endpoints";
|
||||||
@ -26,14 +25,17 @@ import { getActiveClusterEntity } from "../../api/catalog-entity-registry";
|
|||||||
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
|
import { ClusterMetricsResourceType } from "../../../common/cluster-types";
|
||||||
import logger from "../../../common/logger";
|
import logger from "../../../common/logger";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
import type { PodStore } from "../+workloads-pods/store";
|
||||||
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
|
|
||||||
export interface StatefulSetDetailsProps extends KubeObjectDetailsProps<StatefulSet> {
|
export interface StatefulSetDetailsProps extends KubeObjectDetailsProps<StatefulSet> {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
|
podStore: PodStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -52,7 +54,7 @@ class NonInjectedStatefulSetDetails extends React.Component<StatefulSetDetailsPr
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
this.props.subscribeStores([
|
this.props.subscribeStores([
|
||||||
podsStore,
|
this.props.podStore,
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -64,7 +66,7 @@ class NonInjectedStatefulSetDetails extends React.Component<StatefulSetDetailsPr
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { object: statefulSet } = this.props;
|
const { object: statefulSet, podStore } = this.props;
|
||||||
|
|
||||||
if (!statefulSet) {
|
if (!statefulSet) {
|
||||||
return null;
|
return null;
|
||||||
@ -84,7 +86,7 @@ class NonInjectedStatefulSetDetails extends React.Component<StatefulSetDetailsPr
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="StatefulSetDetails">
|
<div className="StatefulSetDetails">
|
||||||
{!isMetricHidden && podsStore.isLoaded && (
|
{!isMetricHidden && podStore.isLoaded && (
|
||||||
<ResourceMetrics
|
<ResourceMetrics
|
||||||
loader={this.loadMetrics}
|
loader={this.loadMetrics}
|
||||||
tabs={podMetricTabs}
|
tabs={podMetricTabs}
|
||||||
@ -130,14 +132,11 @@ class NonInjectedStatefulSetDetails extends React.Component<StatefulSetDetailsPr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const StatefulSetDetails = withInjectables<Dependencies, StatefulSetDetailsProps>(
|
export const StatefulSetDetails = withInjectables<Dependencies, StatefulSetDetailsProps>(NonInjectedStatefulSetDetails, {
|
||||||
NonInjectedStatefulSetDetails,
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
{
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
getProps: (di, props) => ({
|
podStore: di.inject(podStoreInjectable),
|
||||||
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
}),
|
||||||
...props,
|
});
|
||||||
}),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
import { apiManager } from "../../../common/k8s-api/api-manager";
|
||||||
import type { StatefulSet, StatefulSetApi } from "../../../common/k8s-api/endpoints";
|
import type { StatefulSet, StatefulSetApi } from "../../../common/k8s-api/endpoints";
|
||||||
import { PodStatusPhase, statefulSetApi } from "../../../common/k8s-api/endpoints";
|
import { PodStatusPhase, statefulSetApi } from "../../../common/k8s-api/endpoints";
|
||||||
@ -12,7 +12,7 @@ import { isClusterPageContext } from "../../utils";
|
|||||||
|
|
||||||
export class StatefulSetStore extends KubeObjectStore<StatefulSet, StatefulSetApi> {
|
export class StatefulSetStore extends KubeObjectStore<StatefulSet, StatefulSetApi> {
|
||||||
getChildPods(statefulSet: StatefulSet) {
|
getChildPods(statefulSet: StatefulSet) {
|
||||||
return podsStore.getPodsByOwnerId(statefulSet.getId());
|
return podStore.getPodsByOwnerId(statefulSet.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
getStatuses(statefulSets: StatefulSet[]) {
|
getStatuses(statefulSets: StatefulSet[]) {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import "./statefulsets.scss";
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import type { StatefulSet } from "../../../common/k8s-api/endpoints";
|
import type { StatefulSet } from "../../../common/k8s-api/endpoints";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { statefulSetStore } from "./statefulset.store";
|
import { statefulSetStore } from "./statefulset.store";
|
||||||
import { eventStore } from "../+events/event.store";
|
import { eventStore } from "../+events/event.store";
|
||||||
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
||||||
@ -40,7 +40,7 @@ export class StatefulSets extends React.Component {
|
|||||||
tableId="workload_statefulsets"
|
tableId="workload_statefulsets"
|
||||||
className="StatefulSets"
|
className="StatefulSets"
|
||||||
store={statefulSetStore}
|
store={statefulSetStore}
|
||||||
dependentStores={[podsStore, eventStore]} // status icon component uses event store, details component uses podStore
|
dependentStores={[podStore, eventStore]} // status icon component uses event store, details component uses podStore
|
||||||
sortingCallbacks={{
|
sortingCallbacks={{
|
||||||
[columnId.name]: statefulSet => statefulSet.getName(),
|
[columnId.name]: statefulSet => statefulSet.getName(),
|
||||||
[columnId.namespace]: statefulSet => statefulSet.getNs(),
|
[columnId.namespace]: statefulSet => statefulSet.getNs(),
|
||||||
|
|||||||
@ -4,9 +4,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import { daemonSetStore } from "../+workloads-daemonsets/daemonsets.store";
|
import type { DaemonSetStore } from "../+workloads-daemonsets/store";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import daemonSetStoreInjectable from "../+workloads-daemonsets/store.injectable";
|
||||||
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
import { DaemonSet, Pod } from "../../../common/k8s-api/endpoints";
|
import { DaemonSet, Pod } from "../../../common/k8s-api/endpoints";
|
||||||
|
import createStoresAndApisInjectable from "../../create-stores-apis.injectable";
|
||||||
|
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
||||||
|
|
||||||
const runningDaemonSet = new DaemonSet({
|
const runningDaemonSet = new DaemonSet({
|
||||||
apiVersion: "foo",
|
apiVersion: "foo",
|
||||||
@ -128,8 +131,17 @@ const failedPod = new Pod({
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("DaemonSet Store tests", () => {
|
describe("DaemonSet Store tests", () => {
|
||||||
|
let daemonSetStore: DaemonSetStore;
|
||||||
|
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
podsStore.items = observable.array([
|
const di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||||
|
|
||||||
|
di.override(createStoresAndApisInjectable, () => true);
|
||||||
|
|
||||||
|
const podStore = di.inject(podStoreInjectable);
|
||||||
|
|
||||||
|
daemonSetStore = di.inject(daemonSetStoreInjectable);
|
||||||
|
podStore.items = observable.array([
|
||||||
runningPod,
|
runningPod,
|
||||||
failedPod,
|
failedPod,
|
||||||
pendingPod,
|
pendingPod,
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import { deploymentStore } from "../+workloads-deployments/deployments.store";
|
import { deploymentStore } from "../+workloads-deployments/deployments.store";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import type { PodSpec } from "../../../common/k8s-api/endpoints";
|
import type { PodSpec } from "../../../common/k8s-api/endpoints";
|
||||||
import { Deployment, Pod } from "../../../common/k8s-api/endpoints";
|
import { Deployment, Pod } from "../../../common/k8s-api/endpoints";
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ const failedPod = new Pod({
|
|||||||
describe("Deployment Store tests", () => {
|
describe("Deployment Store tests", () => {
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
// Add pods to pod store
|
// Add pods to pod store
|
||||||
podsStore.items = observable.array([
|
podStore.items = observable.array([
|
||||||
runningPod,
|
runningPod,
|
||||||
failedPod,
|
failedPod,
|
||||||
pendingPod,
|
pendingPod,
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import { jobStore } from "../+workloads-jobs/job.store";
|
import { jobStore } from "../+workloads-jobs/job.store";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { Job, Pod } from "../../../common/k8s-api/endpoints";
|
import { Job, Pod } from "../../../common/k8s-api/endpoints";
|
||||||
|
|
||||||
const runningJob = new Job({
|
const runningJob = new Job({
|
||||||
@ -166,7 +166,7 @@ const succeededPod = new Pod({
|
|||||||
|
|
||||||
describe("Job Store tests", () => {
|
describe("Job Store tests", () => {
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
podsStore.items = observable.array([
|
podStore.items = observable.array([
|
||||||
runningPod,
|
runningPod,
|
||||||
failedPod,
|
failedPod,
|
||||||
pendingPod,
|
pendingPod,
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Pod } from "../../../common/k8s-api/endpoints";
|
import { Pod } from "../../../common/k8s-api/endpoints";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
|
|
||||||
const runningPod = new Pod({
|
const runningPod = new Pod({
|
||||||
apiVersion: "foo",
|
apiVersion: "foo",
|
||||||
@ -112,7 +112,7 @@ const succeededPod = new Pod({
|
|||||||
|
|
||||||
describe("Pod Store tests", () => {
|
describe("Pod Store tests", () => {
|
||||||
it("gets Pod statuses in proper sorting order", () => {
|
it("gets Pod statuses in proper sorting order", () => {
|
||||||
const statuses = Object.entries(podsStore.getStatuses([
|
const statuses = Object.entries(podStore.getStatuses([
|
||||||
pendingPod,
|
pendingPod,
|
||||||
runningPod,
|
runningPod,
|
||||||
succeededPod,
|
succeededPod,
|
||||||
@ -131,7 +131,7 @@ describe("Pod Store tests", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("counts statuses properly", () => {
|
it("counts statuses properly", () => {
|
||||||
const statuses = Object.entries(podsStore.getStatuses([
|
const statuses = Object.entries(podStore.getStatuses([
|
||||||
pendingPod,
|
pendingPod,
|
||||||
pendingPod,
|
pendingPod,
|
||||||
pendingPod,
|
pendingPod,
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { replicaSetStore } from "../+workloads-replicasets/replicasets.store";
|
import { replicaSetStore } from "../+workloads-replicasets/replicasets.store";
|
||||||
import { ReplicaSet, Pod } from "../../../common/k8s-api/endpoints";
|
import { ReplicaSet, Pod } from "../../../common/k8s-api/endpoints";
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ const failedPod = new Pod({
|
|||||||
|
|
||||||
describe("ReplicaSet Store tests", () => {
|
describe("ReplicaSet Store tests", () => {
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
podsStore.items = observable.array([
|
podStore.items = observable.array([
|
||||||
runningPod,
|
runningPod,
|
||||||
failedPod,
|
failedPod,
|
||||||
pendingPod,
|
pendingPod,
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import { podsStore } from "../+workloads-pods/pods.store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { statefulSetStore } from "../+workloads-statefulsets/statefulset.store";
|
import { statefulSetStore } from "../+workloads-statefulsets/statefulset.store";
|
||||||
import { StatefulSet, Pod } from "../../../common/k8s-api/endpoints";
|
import { StatefulSet, Pod } from "../../../common/k8s-api/endpoints";
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ const failedPod = new Pod({
|
|||||||
describe("StatefulSet Store tests", () => {
|
describe("StatefulSet Store tests", () => {
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
// Add pods to pod store
|
// Add pods to pod store
|
||||||
podsStore.items = observable.array([
|
podStore.items = observable.array([
|
||||||
runningPod,
|
runningPod,
|
||||||
failedPod,
|
failedPod,
|
||||||
pendingPod,
|
pendingPod,
|
||||||
|
|||||||
@ -3,7 +3,8 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { podsStore } from "../../+workloads-pods/pods.store";
|
import type { GetPodsByOwnerId } from "../../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||||
|
import getPodsByOwnerIdInjectable from "../../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||||
import type { DaemonSet, Deployment, Job, ReplicaSet, StatefulSet } from "../../../../common/k8s-api/endpoints";
|
import type { DaemonSet, Deployment, Job, ReplicaSet, StatefulSet } from "../../../../common/k8s-api/endpoints";
|
||||||
import type { TabId } from "../dock/store";
|
import type { TabId } from "../dock/store";
|
||||||
import type { CreateLogsTabData } from "./create-logs-tab.injectable";
|
import type { CreateLogsTabData } from "./create-logs-tab.injectable";
|
||||||
@ -15,10 +16,14 @@ export interface WorkloadLogsTabData {
|
|||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
createLogsTab: (title: string, data: CreateLogsTabData) => TabId;
|
createLogsTab: (title: string, data: CreateLogsTabData) => TabId;
|
||||||
|
getPodsByOwnerId: GetPodsByOwnerId;
|
||||||
}
|
}
|
||||||
|
|
||||||
const createWorkloadLogsTab = ({ createLogsTab }: Dependencies) => ({ workload }: WorkloadLogsTabData): TabId | undefined => {
|
const createWorkloadLogsTab = ({
|
||||||
const pods = podsStore.getPodsByOwnerId(workload.getId());
|
createLogsTab,
|
||||||
|
getPodsByOwnerId,
|
||||||
|
}: Dependencies) => ({ workload }: WorkloadLogsTabData): TabId | undefined => {
|
||||||
|
const pods = getPodsByOwnerId(workload.getId());
|
||||||
|
|
||||||
if (pods.length === 0) {
|
if (pods.length === 0) {
|
||||||
return undefined;
|
return undefined;
|
||||||
@ -43,6 +48,7 @@ const createWorkloadLogsTabInjectable = getInjectable({
|
|||||||
|
|
||||||
instantiate: (di) => createWorkloadLogsTab({
|
instantiate: (di) => createWorkloadLogsTab({
|
||||||
createLogsTab: di.inject(createLogsTabInjectable),
|
createLogsTab: di.inject(createLogsTabInjectable),
|
||||||
|
getPodsByOwnerId: di.inject(getPodsByOwnerIdInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -8,17 +8,21 @@ import type { Pod } from "../../../../common/k8s-api/endpoints";
|
|||||||
import logStoreInjectable from "./store.injectable";
|
import logStoreInjectable from "./store.injectable";
|
||||||
import type { LogTabData } from "./tab-store";
|
import type { LogTabData } from "./tab-store";
|
||||||
|
|
||||||
|
export interface LoadLogs {
|
||||||
|
(
|
||||||
|
tabId: string,
|
||||||
|
pod: IComputedValue<Pod | undefined>,
|
||||||
|
logTabData: IComputedValue<LogTabData | undefined>,
|
||||||
|
): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
const loadLogsInjectable = getInjectable({
|
const loadLogsInjectable = getInjectable({
|
||||||
id: "load-logs",
|
id: "load-logs",
|
||||||
|
|
||||||
instantiate: (di) => {
|
instantiate: (di): LoadLogs => {
|
||||||
const logStore = di.inject(logStoreInjectable);
|
const logStore = di.inject(logStoreInjectable);
|
||||||
|
|
||||||
return (
|
return (tabId, pod, logTabData) => logStore.load(tabId, pod, logTabData);
|
||||||
tabId: string,
|
|
||||||
pod: IComputedValue<Pod | undefined>,
|
|
||||||
logTabData: IComputedValue<LogTabData | undefined>,
|
|
||||||
): Promise<void> => logStore.load(tabId, pod, logTabData);
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -13,10 +13,11 @@ import getLogTabDataInjectable from "./get-log-tab-data.injectable";
|
|||||||
import loadLogsInjectable from "./load-logs.injectable";
|
import loadLogsInjectable from "./load-logs.injectable";
|
||||||
import setLogTabDataInjectable from "./set-log-tab-data.injectable";
|
import setLogTabDataInjectable from "./set-log-tab-data.injectable";
|
||||||
import stopLoadingLogsInjectable from "./stop-loading-logs.injectable";
|
import stopLoadingLogsInjectable from "./stop-loading-logs.injectable";
|
||||||
import { podsStore } from "../../+workloads-pods/pods.store";
|
|
||||||
import renameTabInjectable from "../dock/rename-tab.injectable";
|
import renameTabInjectable from "../dock/rename-tab.injectable";
|
||||||
import areLogsPresentInjectable from "./are-logs-present.injectable";
|
import areLogsPresentInjectable from "./are-logs-present.injectable";
|
||||||
import searchStoreInjectable from "../../../search-store/search-store.injectable";
|
import searchStoreInjectable from "../../../search-store/search-store.injectable";
|
||||||
|
import getPodsByOwnerIdInjectable from "../../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||||
|
import getPodByIdInjectable from "../../+workloads-pods/get-pod-by-id.injectable";
|
||||||
|
|
||||||
export interface InstantiateArgs {
|
export interface InstantiateArgs {
|
||||||
tabId: TabId;
|
tabId: TabId;
|
||||||
@ -36,8 +37,8 @@ const logsViewModelInjectable = getInjectable({
|
|||||||
renameTab: di.inject(renameTabInjectable),
|
renameTab: di.inject(renameTabInjectable),
|
||||||
stopLoadingLogs: di.inject(stopLoadingLogsInjectable),
|
stopLoadingLogs: di.inject(stopLoadingLogsInjectable),
|
||||||
areLogsPresent: di.inject(areLogsPresentInjectable),
|
areLogsPresent: di.inject(areLogsPresentInjectable),
|
||||||
getPodById: id => podsStore.getById(id),
|
getPodById: di.inject(getPodByIdInjectable),
|
||||||
getPodsByOwnerId: id => podsStore.getPodsByOwnerId(id),
|
getPodsByOwnerId: di.inject(getPodsByOwnerIdInjectable),
|
||||||
searchStore: di.inject(searchStoreInjectable),
|
searchStore: di.inject(searchStoreInjectable),
|
||||||
}),
|
}),
|
||||||
lifecycle: lifecycleEnum.transient,
|
lifecycle: lifecycleEnum.transient,
|
||||||
|
|||||||
@ -10,6 +10,9 @@ import type { SearchStore } from "../../../search-store/search-store";
|
|||||||
import type { Pod } from "../../../../common/k8s-api/endpoints";
|
import type { Pod } from "../../../../common/k8s-api/endpoints";
|
||||||
import { isDefined } from "../../../utils";
|
import { isDefined } from "../../../utils";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
|
import type { GetPodById } from "../../+workloads-pods/get-pod-by-id.injectable";
|
||||||
|
import type { GetPodsByOwnerId } from "../../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||||
|
import type { LoadLogs } from "./load-logs.injectable";
|
||||||
|
|
||||||
export interface LogTabViewModelDependencies {
|
export interface LogTabViewModelDependencies {
|
||||||
getLogs: (tabId: TabId) => string[];
|
getLogs: (tabId: TabId) => string[];
|
||||||
@ -17,12 +20,12 @@ export interface LogTabViewModelDependencies {
|
|||||||
getTimestampSplitLogs: (tabId: TabId) => [string, string][];
|
getTimestampSplitLogs: (tabId: TabId) => [string, string][];
|
||||||
getLogTabData: (tabId: TabId) => LogTabData | undefined;
|
getLogTabData: (tabId: TabId) => LogTabData | undefined;
|
||||||
setLogTabData: (tabId: TabId, data: LogTabData) => void;
|
setLogTabData: (tabId: TabId, data: LogTabData) => void;
|
||||||
loadLogs: (tabId: TabId, pod: IComputedValue<Pod | undefined>, logTabData: IComputedValue<LogTabData | undefined>) => Promise<void>;
|
loadLogs: LoadLogs;
|
||||||
reloadLogs: (tabId: TabId, pod: IComputedValue<Pod | undefined>, logTabData: IComputedValue<LogTabData | undefined>) => Promise<void>;
|
reloadLogs: (tabId: TabId, pod: IComputedValue<Pod | undefined>, logTabData: IComputedValue<LogTabData | undefined>) => Promise<void>;
|
||||||
renameTab: (tabId: TabId, title: string) => void;
|
renameTab: (tabId: TabId, title: string) => void;
|
||||||
stopLoadingLogs: (tabId: TabId) => void;
|
stopLoadingLogs: (tabId: TabId) => void;
|
||||||
getPodById: (id: string) => Pod | undefined;
|
getPodById: GetPodById;
|
||||||
getPodsByOwnerId: (id: string) => Pod[];
|
getPodsByOwnerId: GetPodsByOwnerId;
|
||||||
areLogsPresent: (tabId: TabId) => boolean;
|
areLogsPresent: (tabId: TabId) => boolean;
|
||||||
searchStore: SearchStore;
|
searchStore: SearchStore;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,8 @@ import type { DockTab } from "../dock/store";
|
|||||||
import { cssNames } from "../../../utils";
|
import { cssNames } from "../../../utils";
|
||||||
import type { SubscribeStores } from "../../../kube-watch-api/kube-watch-api";
|
import type { SubscribeStores } from "../../../kube-watch-api/kube-watch-api";
|
||||||
import subscribeStoresInjectable from "../../../kube-watch-api/subscribe-stores.injectable";
|
import subscribeStoresInjectable from "../../../kube-watch-api/subscribe-stores.injectable";
|
||||||
import { podsStore } from "../../+workloads-pods/pods.store";
|
import type { PodStore } from "../../+workloads-pods/store";
|
||||||
|
import podStoreInjectable from "../../+workloads-pods/store.injectable";
|
||||||
|
|
||||||
export interface LogsDockTabProps {
|
export interface LogsDockTabProps {
|
||||||
className?: string;
|
className?: string;
|
||||||
@ -28,9 +29,16 @@ export interface LogsDockTabProps {
|
|||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
model: LogTabViewModel;
|
model: LogTabViewModel;
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
|
podStore: PodStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
const NonInjectedLogsDockTab = observer(({ className, tab, model, subscribeStores }: Dependencies & LogsDockTabProps) => {
|
const NonInjectedLogsDockTab = observer(({
|
||||||
|
className,
|
||||||
|
tab,
|
||||||
|
model,
|
||||||
|
subscribeStores,
|
||||||
|
podStore,
|
||||||
|
}: Dependencies & LogsDockTabProps) => {
|
||||||
const logListElement = createRef<LogListRef>();
|
const logListElement = createRef<LogListRef>();
|
||||||
const data = model.logTabData.get();
|
const data = model.logTabData.get();
|
||||||
|
|
||||||
@ -40,7 +48,7 @@ const NonInjectedLogsDockTab = observer(({ className, tab, model, subscribeStore
|
|||||||
return model.stopLoadingLogs;
|
return model.stopLoadingLogs;
|
||||||
}, [tab.id]);
|
}, [tab.id]);
|
||||||
useEffect(() => subscribeStores([
|
useEffect(() => subscribeStores([
|
||||||
podsStore,
|
podStore,
|
||||||
], {
|
], {
|
||||||
namespaces: data ? [data.namespace] : [],
|
namespaces: data ? [data.namespace] : [],
|
||||||
}), [data?.namespace]);
|
}), [data?.namespace]);
|
||||||
@ -92,10 +100,11 @@ const NonInjectedLogsDockTab = observer(({ className, tab, model, subscribeStore
|
|||||||
|
|
||||||
export const LogsDockTab = withInjectables<Dependencies, LogsDockTabProps>(NonInjectedLogsDockTab, {
|
export const LogsDockTab = withInjectables<Dependencies, LogsDockTabProps>(NonInjectedLogsDockTab, {
|
||||||
getProps: (di, props) => ({
|
getProps: (di, props) => ({
|
||||||
|
...props,
|
||||||
model: di.inject(logsViewModelInjectable, {
|
model: di.inject(logsViewModelInjectable, {
|
||||||
tabId: props.tab.id,
|
tabId: props.tab.id,
|
||||||
}),
|
}),
|
||||||
subscribeStores: di.inject(subscribeStoresInjectable),
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
...props,
|
podStore: di.inject(podStoreInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import { cssNames } from "../../utils";
|
|||||||
|
|
||||||
export interface DrawerParamTogglerProps {
|
export interface DrawerParamTogglerProps {
|
||||||
label: string | number;
|
label: string | number;
|
||||||
|
children: React.ReactNode | React.ReactNode[];
|
||||||
}
|
}
|
||||||
|
|
||||||
interface State {
|
interface State {
|
||||||
@ -37,7 +38,9 @@ export class DrawerParamToggler extends React.Component<DrawerParamTogglerProps,
|
|||||||
<Icon material={icon}/>
|
<Icon material={icon}/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={cssNames("param-content", { open })}>{children}</div>
|
<div className={cssNames("param-content", { open })}>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,9 +23,9 @@ import { TooltipPosition } from "../tooltip";
|
|||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import type { ClusterFrameContext } from "../../cluster-frame-context/cluster-frame-context";
|
import type { ClusterFrameContext } from "../../cluster-frame-context/cluster-frame-context";
|
||||||
import clusterFrameContextInjectable from "../../cluster-frame-context/cluster-frame-context.injectable";
|
import clusterFrameContextInjectable from "../../cluster-frame-context/cluster-frame-context.injectable";
|
||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
|
||||||
import type { SubscribableStore, SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
import type { SubscribableStore, SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||||
import type { KubeApi } from "../../../common/k8s-api/kube-api";
|
import type { KubeApi } from "../../../common/k8s-api/kube-api";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
|
||||||
export interface KubeObjectListLayoutProps<
|
export interface KubeObjectListLayoutProps<
|
||||||
K extends KubeObject,
|
K extends KubeObject,
|
||||||
@ -148,9 +148,9 @@ const InjectedKubeObjectListLayout = withInjectables<
|
|||||||
KubeObjectListLayoutProps<KubeObject, KubeApi<KubeObject, KubeJsonApiDataFor<KubeObject>>, KubeJsonApiDataFor<KubeObject>>
|
KubeObjectListLayoutProps<KubeObject, KubeApi<KubeObject, KubeJsonApiDataFor<KubeObject>>, KubeJsonApiDataFor<KubeObject>>
|
||||||
>(NonInjectedKubeObjectListLayout, {
|
>(NonInjectedKubeObjectListLayout, {
|
||||||
getProps: (di, props) => ({
|
getProps: (di, props) => ({
|
||||||
clusterFrameContext: di.inject(clusterFrameContextInjectable),
|
|
||||||
subscribeToStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
|
||||||
...props,
|
...props,
|
||||||
|
clusterFrameContext: di.inject(clusterFrameContextInjectable),
|
||||||
|
subscribeToStores: di.inject(subscribeStoresInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
12
yarn.lock
12
yarn.lock
@ -1197,14 +1197,14 @@
|
|||||||
lodash "^4.17.15"
|
lodash "^4.17.15"
|
||||||
redent "^3.0.0"
|
redent "^3.0.0"
|
||||||
|
|
||||||
"@testing-library/react@^13.0.0":
|
"@testing-library/react@^13.0.1":
|
||||||
version "13.0.0"
|
version "13.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.0.0.tgz#8cdaf4667c6c2b082eb0513731551e9db784e8bc"
|
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.0.1.tgz#00d223e182923d341a9610590561fb9dd1324110"
|
||||||
integrity sha512-p0lYA1M7uoEmk2LnCbZLGmHJHyH59sAaZVXChTXlyhV/PRW9LoIh4mdf7tiXsO8BoNG+vN8UnFJff1hbZeXv+w==
|
integrity sha512-zeHx3PohYYp+4bTJwrixQY8zSBZjWUGwYc7OhD1EpWTHS92RleApLoP72NdwaWxOrM1P1Uezt3XvGf6t2XSWPQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.12.5"
|
"@babel/runtime" "^7.12.5"
|
||||||
"@testing-library/dom" "^8.5.0"
|
"@testing-library/dom" "^8.5.0"
|
||||||
"@types/react-dom" "*"
|
"@types/react-dom" "^18.0.0"
|
||||||
|
|
||||||
"@testing-library/user-event@^13.5.0":
|
"@testing-library/user-event@^13.5.0":
|
||||||
version "13.5.0"
|
version "13.5.0"
|
||||||
@ -1756,7 +1756,7 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/react" "*"
|
"@types/react" "*"
|
||||||
|
|
||||||
"@types/react-dom@*", "@types/react-dom@^18.0.0":
|
"@types/react-dom@^18.0.0":
|
||||||
version "18.0.0"
|
version "18.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.0.tgz#b13f8d098e4b0c45df4f1ed123833143b0c71141"
|
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.0.tgz#b13f8d098e4b0c45df4f1ed123833143b0c71141"
|
||||||
integrity sha512-49897Y0UiCGmxZqpC8Blrf6meL8QUla6eb+BBhn69dTXlmuOlzkfr7HHY/O8J25e1lTUMs+YYxSlVDAaGHCOLg==
|
integrity sha512-49897Y0UiCGmxZqpC8Blrf6meL8QUla6eb+BBhn69dTXlmuOlzkfr7HHY/O8J25e1lTUMs+YYxSlVDAaGHCOLg==
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user