mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
fix cronjob.store.test.ts
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
5c7314da0a
commit
6a6cb35ca4
19
src/common/k8s-api/endpoints/cron-job.api.injectable.ts
Normal file
19
src/common/k8s-api/endpoints/cron-job.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 { CronJobApi } from "./cron-job.api";
|
||||||
|
|
||||||
|
const cronJobApiInjectable = getInjectable({
|
||||||
|
id: "cron-job-api",
|
||||||
|
instantiate: (di) => {
|
||||||
|
assert(di.inject(createStoresAndApisInjectionToken), "cronJobApi is only available in certain environments");
|
||||||
|
|
||||||
|
return new CronJobApi();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default cronJobApiInjectable;
|
||||||
@ -9,7 +9,6 @@ import { KubeObject } from "../kube-object";
|
|||||||
import { formatDuration } from "../../utils/formatDuration";
|
import { formatDuration } from "../../utils/formatDuration";
|
||||||
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 { JobTemplateSpec } from "./types/job-template-spec";
|
import type { JobTemplateSpec } from "./types/job-template-spec";
|
||||||
|
|
||||||
export class CronJobApi extends KubeApi<CronJob> {
|
export class CronJobApi extends KubeApi<CronJob> {
|
||||||
@ -103,7 +102,3 @@ export class CronJob extends KubeObject<CronJobStatus, CronJobSpec, KubeObjectSc
|
|||||||
return this.spec.suspend;
|
return this.spec.suspend;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const cronJobApi = isClusterPageContext()
|
|
||||||
? new CronJobApi()
|
|
||||||
: undefined as never;
|
|
||||||
|
|||||||
19
src/common/k8s-api/endpoints/job.api.injectable.ts
Normal file
19
src/common/k8s-api/endpoints/job.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 { JobApi } from "./job.api";
|
||||||
|
|
||||||
|
const jobApiInjectable = getInjectable({
|
||||||
|
id: "job-api",
|
||||||
|
instantiate: (di) => {
|
||||||
|
assert(di.inject(createStoresAndApisInjectionToken), "jobApi is only available in certain environments");
|
||||||
|
|
||||||
|
return new JobApi();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default jobApiInjectable;
|
||||||
@ -7,7 +7,6 @@ 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 "./pod.api";
|
import type { PodContainer, PodMetricData, PodSpec } 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";
|
||||||
|
|
||||||
@ -82,7 +81,7 @@ export class Job extends KubeObject<JobStatus, JobSpec, KubeObjectScope.Namespac
|
|||||||
|
|
||||||
getCondition() {
|
getCondition() {
|
||||||
// Type of Job condition could be only Complete or Failed
|
// Type of Job condition could be only Complete or Failed
|
||||||
// https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.14/#jobcondition-v1-batch
|
// https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#jobcondition-v1-batch
|
||||||
return this.status?.conditions?.find(({ status }) => status === "True");
|
return this.status?.conditions?.find(({ status }) => status === "True");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +115,3 @@ export function getMetricsForJobs(jobs: Job[], namespace: string, selector = "")
|
|||||||
namespace,
|
namespace,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export const jobApi = isClusterPageContext()
|
|
||||||
? new JobApi()
|
|
||||||
: undefined as never;
|
|
||||||
|
|||||||
@ -6,8 +6,10 @@
|
|||||||
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 cronJobApiInjectable from "./cron-job.api.injectable";
|
||||||
import daemonSetApiInjectable from "./daemon-set.api.injectable";
|
import daemonSetApiInjectable from "./daemon-set.api.injectable";
|
||||||
import deploymentApiInjectable from "./deployment.api.injectable";
|
import deploymentApiInjectable from "./deployment.api.injectable";
|
||||||
|
import jobApiInjectable from "./job.api.injectable";
|
||||||
import podApiInjectable from "./pod.api.injectable";
|
import podApiInjectable from "./pod.api.injectable";
|
||||||
import replicaSetApiInjectable from "./replica-set.api.injectable";
|
import replicaSetApiInjectable from "./replica-set.api.injectable";
|
||||||
import roleApiInjectable from "./role.api.injectable";
|
import roleApiInjectable from "./role.api.injectable";
|
||||||
@ -58,3 +60,13 @@ export const statefulSetApi = asLegacyGlobalForExtensionApi(statefulSetApiInject
|
|||||||
* @deprecated use `di.inject(deploymentApiInjectable)` instead
|
* @deprecated use `di.inject(deploymentApiInjectable)` instead
|
||||||
*/
|
*/
|
||||||
export const deploymentApi = asLegacyGlobalForExtensionApi(deploymentApiInjectable);
|
export const deploymentApi = asLegacyGlobalForExtensionApi(deploymentApiInjectable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use `di.inject(cronJobApiInjectable)` instead
|
||||||
|
*/
|
||||||
|
export const cronJobApi = asLegacyGlobalForExtensionApi(cronJobApiInjectable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use `di.inject(jobApiInjectable)` instead
|
||||||
|
*/
|
||||||
|
export const jobApi = asLegacyGlobalForExtensionApi(jobApiInjectable);
|
||||||
|
|||||||
@ -5,7 +5,10 @@
|
|||||||
|
|
||||||
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 cronJobApiInjectable from "../../common/k8s-api/endpoints/cron-job.api.injectable";
|
||||||
import daemonSetApiInjectable from "../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
import daemonSetApiInjectable from "../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
||||||
|
import deploymentApiInjectable from "../../common/k8s-api/endpoints/deployment.api.injectable";
|
||||||
|
import jobApiInjectable from "../../common/k8s-api/endpoints/job.api.injectable";
|
||||||
import podApiInjectable from "../../common/k8s-api/endpoints/pod.api.injectable";
|
import podApiInjectable from "../../common/k8s-api/endpoints/pod.api.injectable";
|
||||||
import replicaSetApiInjectable from "../../common/k8s-api/endpoints/replica-set.api.injectable";
|
import replicaSetApiInjectable from "../../common/k8s-api/endpoints/replica-set.api.injectable";
|
||||||
import roleApiInjectable from "../../common/k8s-api/endpoints/role.api.injectable";
|
import roleApiInjectable from "../../common/k8s-api/endpoints/role.api.injectable";
|
||||||
@ -29,6 +32,9 @@ export const podsApi = asLegacyGlobalForExtensionApi(podApiInjectable);
|
|||||||
export const daemonSetApi = asLegacyGlobalForExtensionApi(daemonSetApiInjectable);
|
export const daemonSetApi = asLegacyGlobalForExtensionApi(daemonSetApiInjectable);
|
||||||
export const replicaSetApi = asLegacyGlobalForExtensionApi(replicaSetApiInjectable);
|
export const replicaSetApi = asLegacyGlobalForExtensionApi(replicaSetApiInjectable);
|
||||||
export const statefulSetApi = asLegacyGlobalForExtensionApi(statefulSetApiInjectable);
|
export const statefulSetApi = asLegacyGlobalForExtensionApi(statefulSetApiInjectable);
|
||||||
|
export const deploymentApi = asLegacyGlobalForExtensionApi(deploymentApiInjectable);
|
||||||
|
export const jobApi = asLegacyGlobalForExtensionApi(jobApiInjectable);
|
||||||
|
export const cronJobApi = asLegacyGlobalForExtensionApi(cronJobApiInjectable);
|
||||||
|
|
||||||
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";
|
||||||
@ -37,11 +43,11 @@ 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 } from "../../common/k8s-api/endpoints/pod.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 } from "../../common/k8s-api/endpoints/deployment.api";
|
||||||
export { DaemonSet } from "../../common/k8s-api/endpoints/daemon-set.api";
|
export { DaemonSet } from "../../common/k8s-api/endpoints/daemon-set.api";
|
||||||
export { StatefulSet } from "../../common/k8s-api/endpoints/stateful-set.api";
|
export { StatefulSet } from "../../common/k8s-api/endpoints/stateful-set.api";
|
||||||
export { Job, jobApi } from "../../common/k8s-api/endpoints/job.api";
|
export { Job } from "../../common/k8s-api/endpoints/job.api";
|
||||||
export { CronJob, cronJobApi } from "../../common/k8s-api/endpoints/cron-job.api";
|
export { CronJob } from "../../common/k8s-api/endpoints/cron-job.api";
|
||||||
export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints/configmap.api";
|
export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints/configmap.api";
|
||||||
export { Secret, secretApi as secretsApi } from "../../common/k8s-api/endpoints/secret.api";
|
export { Secret, secretApi as secretsApi } from "../../common/k8s-api/endpoints/secret.api";
|
||||||
export { ReplicaSet } from "../../common/k8s-api/endpoints/replica-set.api";
|
export { ReplicaSet } from "../../common/k8s-api/endpoints/replica-set.api";
|
||||||
|
|||||||
@ -16,6 +16,9 @@ import podApiInjectable from "../../common/k8s-api/endpoints/pod.api.injectable"
|
|||||||
import daemonSetApiInjectable from "../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
import daemonSetApiInjectable from "../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
||||||
import replicaSetApiInjectable from "../../common/k8s-api/endpoints/replica-set.api.injectable";
|
import replicaSetApiInjectable from "../../common/k8s-api/endpoints/replica-set.api.injectable";
|
||||||
import statefulSetApiInjectable from "../../common/k8s-api/endpoints/stateful-set.api.injectable";
|
import statefulSetApiInjectable from "../../common/k8s-api/endpoints/stateful-set.api.injectable";
|
||||||
|
import deploymentApiInjectable from "../../common/k8s-api/endpoints/deployment.api.injectable";
|
||||||
|
import jobApiInjectable from "../../common/k8s-api/endpoints/job.api.injectable";
|
||||||
|
import cronJobApiInjectable from "../../common/k8s-api/endpoints/cron-job.api.injectable";
|
||||||
|
|
||||||
export function isAllowedResource(resource: KubeResource | KubeResource[]) {
|
export function isAllowedResource(resource: KubeResource | KubeResource[]) {
|
||||||
const resources = castArray(resource);
|
const resources = castArray(resource);
|
||||||
@ -38,6 +41,9 @@ export const podsApi = asLegacyGlobalForExtensionApi(podApiInjectable);
|
|||||||
export const daemonSetApi = asLegacyGlobalForExtensionApi(daemonSetApiInjectable);
|
export const daemonSetApi = asLegacyGlobalForExtensionApi(daemonSetApiInjectable);
|
||||||
export const replicaSetApi = asLegacyGlobalForExtensionApi(replicaSetApiInjectable);
|
export const replicaSetApi = asLegacyGlobalForExtensionApi(replicaSetApiInjectable);
|
||||||
export const statefulSetApi = asLegacyGlobalForExtensionApi(statefulSetApiInjectable);
|
export const statefulSetApi = asLegacyGlobalForExtensionApi(statefulSetApiInjectable);
|
||||||
|
export const deploymentApi = asLegacyGlobalForExtensionApi(deploymentApiInjectable);
|
||||||
|
export const jobApi = asLegacyGlobalForExtensionApi(jobApiInjectable);
|
||||||
|
export const cronJobApi = asLegacyGlobalForExtensionApi(cronJobApiInjectable);
|
||||||
|
|
||||||
export {
|
export {
|
||||||
BaseKubeJsonApiObjectMetadata,
|
BaseKubeJsonApiObjectMetadata,
|
||||||
@ -49,11 +55,11 @@ 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 } from "../../common/k8s-api/endpoints/pod.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 } from "../../common/k8s-api/endpoints/deployment.api";
|
||||||
export { DaemonSet } from "../../common/k8s-api/endpoints/daemon-set.api";
|
export { DaemonSet } from "../../common/k8s-api/endpoints/daemon-set.api";
|
||||||
export { StatefulSet } from "../../common/k8s-api/endpoints/stateful-set.api";
|
export { StatefulSet } from "../../common/k8s-api/endpoints/stateful-set.api";
|
||||||
export { Job, jobApi } from "../../common/k8s-api/endpoints/job.api";
|
export { Job } from "../../common/k8s-api/endpoints/job.api";
|
||||||
export { CronJob, cronJobApi } from "../../common/k8s-api/endpoints/cron-job.api";
|
export { CronJob } from "../../common/k8s-api/endpoints/cron-job.api";
|
||||||
export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints/configmap.api";
|
export { ConfigMap, configMapApi } from "../../common/k8s-api/endpoints/configmap.api";
|
||||||
export { Secret, secretApi as secretsApi } from "../../common/k8s-api/endpoints/secret.api";
|
export { Secret, secretApi as secretsApi } from "../../common/k8s-api/endpoints/secret.api";
|
||||||
export { ReplicaSet } from "../../common/k8s-api/endpoints/replica-set.api";
|
export { ReplicaSet } from "../../common/k8s-api/endpoints/replica-set.api";
|
||||||
@ -93,8 +99,8 @@ export type { NodesStore } from "../../renderer/components/+nodes/nodes.store";
|
|||||||
export type { DeploymentStore } from "../../renderer/components/+workloads-deployments/store";
|
export type { DeploymentStore } from "../../renderer/components/+workloads-deployments/store";
|
||||||
export type { DaemonSetStore } from "../../renderer/components/+workloads-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/store";
|
||||||
export type { CronJobStore } from "../../renderer/components/+workloads-cronjobs/cronjob.store";
|
export type { CronJobStore } from "../../renderer/components/+workloads-cronjobs/store";
|
||||||
export type { ConfigMapStore as ConfigMapsStore } from "../../renderer/components/+config-maps/config-maps.store";
|
export type { ConfigMapStore as ConfigMapsStore } from "../../renderer/components/+config-maps/config-maps.store";
|
||||||
export type { SecretStore as SecretsStore } from "../../renderer/components/+config-secrets/secrets.store";
|
export type { SecretStore as SecretsStore } from "../../renderer/components/+config-secrets/secrets.store";
|
||||||
export type { ReplicaSetStore } from "../../renderer/components/+workloads-replicasets/store";
|
export type { ReplicaSetStore } from "../../renderer/components/+workloads-replicasets/store";
|
||||||
|
|||||||
@ -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 { cronJobStore } from "./cronjob.store";
|
|
||||||
|
|
||||||
const cronJobsStoreInjectable = getInjectable({
|
|
||||||
id: "cron-jobs-store",
|
|
||||||
instantiate: () => cronJobStore,
|
|
||||||
causesSideEffects: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
export default cronJobsStoreInjectable;
|
|
||||||
@ -10,9 +10,9 @@ import kebabCase from "lodash/kebabCase";
|
|||||||
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/badge";
|
import { Badge } from "../badge/badge";
|
||||||
import { jobStore } from "../+workloads-jobs/job.store";
|
import type { JobStore } from "../+workloads-jobs/store";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
import { cronJobStore } from "./cronjob.store";
|
import type { CronJobStore } from "./store";
|
||||||
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
||||||
import { getDetailsUrl } from "../kube-detail-params";
|
import { getDetailsUrl } from "../kube-detail-params";
|
||||||
import type { Job } from "../../../common/k8s-api/endpoints";
|
import type { Job } from "../../../common/k8s-api/endpoints";
|
||||||
@ -22,12 +22,16 @@ import logger from "../../../common/logger";
|
|||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
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 cronJobStoreInjectable from "./store.injectable";
|
||||||
|
import jobStoreInjectable from "../+workloads-jobs/store.injectable";
|
||||||
|
|
||||||
export interface CronJobDetailsProps extends KubeObjectDetailsProps<CronJob> {
|
export interface CronJobDetailsProps extends KubeObjectDetailsProps<CronJob> {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
|
jobStore: JobStore;
|
||||||
|
cronJobStore: CronJobStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -35,13 +39,13 @@ class NonInjectedCronJobDetails extends React.Component<CronJobDetailsProps & De
|
|||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
disposeOnUnmount(this, [
|
disposeOnUnmount(this, [
|
||||||
this.props.subscribeStores([
|
this.props.subscribeStores([
|
||||||
jobStore,
|
this.props.jobStore,
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { object: cronJob } = this.props;
|
const { object: cronJob, jobStore, cronJobStore } = this.props;
|
||||||
|
|
||||||
if (!cronJob) {
|
if (!cronJob) {
|
||||||
return null;
|
return null;
|
||||||
@ -119,5 +123,7 @@ export const CronJobDetails = withInjectables<Dependencies, CronJobDetailsProps>
|
|||||||
getProps: (di, props) => ({
|
getProps: (di, props) => ({
|
||||||
...props,
|
...props,
|
||||||
subscribeStores: di.inject(subscribeStoresInjectable),
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
|
cronJobStore: di.inject(cronJobStoreInjectable),
|
||||||
|
jobStore: di.inject(jobStoreInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,8 +7,8 @@ import "./cronjobs.scss";
|
|||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { cronJobStore } from "./cronjob.store";
|
import { cronJobStore } from "./legacy-store";
|
||||||
import { jobStore } from "../+workloads-jobs/job.store";
|
import { jobStore } from "../+workloads-jobs/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 { KubeObjectStatusIcon } from "../kube-object-status-icon";
|
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
|
||||||
|
|||||||
12
src/renderer/components/+workloads-cronjobs/legacy-store.ts
Normal file
12
src/renderer/components/+workloads-cronjobs/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 cronJobStoreInjectable from "./store.injectable";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use `di.inject(cronJobStoreInjectable)` instead
|
||||||
|
*/
|
||||||
|
export const cronJobStore = asLegacyGlobalForExtensionApi(cronJobStoreInjectable);
|
||||||
@ -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 getJobsByOwnerInjectable from "../+workloads-jobs/get-jobs-by-owner.injectable";
|
||||||
|
import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable";
|
||||||
|
import cronJobApiInjectable from "../../../common/k8s-api/endpoints/cron-job.api.injectable";
|
||||||
|
import createStoresAndApisInjectable from "../../create-stores-apis.injectable";
|
||||||
|
import { CronJobStore } from "./store";
|
||||||
|
|
||||||
|
const cronJobStoreInjectable = getInjectable({
|
||||||
|
id: "cron-job-store",
|
||||||
|
instantiate: (di) => {
|
||||||
|
assert(di.inject(createStoresAndApisInjectable), "cronJobStore is only available in certain environments");
|
||||||
|
|
||||||
|
const api = di.inject(cronJobApiInjectable);
|
||||||
|
const apiManager = di.inject(apiManagerInjectable);
|
||||||
|
const store = new CronJobStore({
|
||||||
|
getJobsByOwner: di.inject(getJobsByOwnerInjectable),
|
||||||
|
}, api);
|
||||||
|
|
||||||
|
apiManager.registerStore(store);
|
||||||
|
|
||||||
|
return store;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default cronJobStoreInjectable;
|
||||||
@ -3,14 +3,20 @@
|
|||||||
* 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 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 type { CronJob, CronJobApi } from "../../../common/k8s-api/endpoints/cron-job.api";
|
import type { CronJob, CronJobApi } from "../../../common/k8s-api/endpoints/cron-job.api";
|
||||||
import { cronJobApi } from "../../../common/k8s-api/endpoints/cron-job.api";
|
import type { GetJobsByOwner } from "../+workloads-jobs/get-jobs-by-owner.injectable";
|
||||||
import { jobStore } from "../+workloads-jobs/job.store";
|
|
||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
interface Dependencies {
|
||||||
import { isClusterPageContext } from "../../utils";
|
getJobsByOwner: GetJobsByOwner;
|
||||||
|
}
|
||||||
|
|
||||||
export class CronJobStore extends KubeObjectStore<CronJob, CronJobApi> {
|
export class CronJobStore extends KubeObjectStore<CronJob, CronJobApi> {
|
||||||
|
constructor(protected readonly dependencies: Dependencies, api: CronJobApi, opts?: KubeObjectStoreOptions) {
|
||||||
|
super(api, opts);
|
||||||
|
}
|
||||||
|
|
||||||
getStatuses(cronJobs?: CronJob[]) {
|
getStatuses(cronJobs?: CronJob[]) {
|
||||||
const status = { scheduled: 0, suspended: 0 };
|
const status = { scheduled: 0, suspended: 0 };
|
||||||
|
|
||||||
@ -28,18 +34,10 @@ export class CronJobStore extends KubeObjectStore<CronJob, CronJobApi> {
|
|||||||
|
|
||||||
getActiveJobsNum(cronJob: CronJob) {
|
getActiveJobsNum(cronJob: CronJob) {
|
||||||
// Active jobs are jobs without any condition 'Complete' nor 'Failed'
|
// Active jobs are jobs without any condition 'Complete' nor 'Failed'
|
||||||
const jobs = jobStore.getJobsByOwner(cronJob);
|
const jobs = this.dependencies.getJobsByOwner(cronJob);
|
||||||
|
|
||||||
if (!jobs.length) return 0;
|
if (!jobs.length) return 0;
|
||||||
|
|
||||||
return jobs.filter(job => !job.getCondition()).length;
|
return jobs.filter(job => !job.getCondition()).length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const cronJobStore = isClusterPageContext()
|
|
||||||
? new CronJobStore(cronJobApi)
|
|
||||||
: undefined as never;
|
|
||||||
|
|
||||||
if (isClusterPageContext()) {
|
|
||||||
apiManager.registerStore(cronJobStore);
|
|
||||||
}
|
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type { CronJob, Job } from "../../../common/k8s-api/endpoints";
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import jobStoreInjectable from "./store.injectable";
|
||||||
|
|
||||||
|
export type GetJobsByOwner = (cronJob: CronJob) => Job[];
|
||||||
|
|
||||||
|
const getJobsByOwnerInjectable = getInjectable({
|
||||||
|
id: "get-jobs-by-owner",
|
||||||
|
instantiate: (di): GetJobsByOwner => {
|
||||||
|
const store = di.inject(jobStoreInjectable);
|
||||||
|
|
||||||
|
return (cronJob) => store.getJobsByOwner(cronJob);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default getJobsByOwnerInjectable;
|
||||||
@ -14,7 +14,7 @@ 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 { jobStore } from "./job.store";
|
import type { JobStore } from "./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";
|
||||||
import { PodDetailsList } from "../+workloads-pods/pod-details-list";
|
import { PodDetailsList } from "../+workloads-pods/pod-details-list";
|
||||||
@ -32,6 +32,7 @@ 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 type { PodStore } from "../+workloads-pods/store";
|
import type { PodStore } from "../+workloads-pods/store";
|
||||||
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
|
import jobStoreInjectable from "./store.injectable";
|
||||||
|
|
||||||
export interface JobDetailsProps extends KubeObjectDetailsProps<Job> {
|
export interface JobDetailsProps extends KubeObjectDetailsProps<Job> {
|
||||||
}
|
}
|
||||||
@ -39,6 +40,7 @@ export interface JobDetailsProps extends KubeObjectDetailsProps<Job> {
|
|||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
subscribeStores: SubscribeStores;
|
subscribeStores: SubscribeStores;
|
||||||
podStore: PodStore;
|
podStore: PodStore;
|
||||||
|
jobStore: JobStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -68,7 +70,7 @@ class NonInjectedJobDetails extends React.Component<JobDetailsProps & Dependenci
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { object: job } = this.props;
|
const { object: job, jobStore } = this.props;
|
||||||
|
|
||||||
if (!job) {
|
if (!job) {
|
||||||
return null;
|
return null;
|
||||||
@ -175,6 +177,7 @@ export const JobDetails = withInjectables<Dependencies, JobDetailsProps>(NonInje
|
|||||||
...props,
|
...props,
|
||||||
subscribeStores: di.inject(subscribeStoresInjectable),
|
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||||
podStore: di.inject(podStoreInjectable),
|
podStore: di.inject(podStoreInjectable),
|
||||||
|
jobStore: di.inject(jobStoreInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -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 { jobStore } from "./job.store";
|
|
||||||
|
|
||||||
const jobsStoreInjectable = getInjectable({
|
|
||||||
id: "jobs-store",
|
|
||||||
instantiate: () => jobStore,
|
|
||||||
causesSideEffects: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
export default jobsStoreInjectable;
|
|
||||||
@ -7,7 +7,7 @@ import "./jobs.scss";
|
|||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { jobStore } from "./job.store";
|
import { jobStore } 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 kebabCase from "lodash/kebabCase";
|
import kebabCase from "lodash/kebabCase";
|
||||||
|
|||||||
12
src/renderer/components/+workloads-jobs/legacy-store.ts
Normal file
12
src/renderer/components/+workloads-jobs/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 jobStoreInjectable from "./store.injectable";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated use `di.inject(jobStoreInjectable)` instead
|
||||||
|
*/
|
||||||
|
export const jobStore = asLegacyGlobalForExtensionApi(jobStoreInjectable);
|
||||||
30
src/renderer/components/+workloads-jobs/store.injectable.ts
Normal file
30
src/renderer/components/+workloads-jobs/store.injectable.ts
Normal file
@ -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 apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable";
|
||||||
|
import jobApiInjectable from "../../../common/k8s-api/endpoints/job.api.injectable";
|
||||||
|
import createStoresAndApisInjectable from "../../create-stores-apis.injectable";
|
||||||
|
import { JobStore } from "./store";
|
||||||
|
|
||||||
|
const jobStoreInjectable = getInjectable({
|
||||||
|
id: "job-store",
|
||||||
|
instantiate: (di) => {
|
||||||
|
assert(di.inject(createStoresAndApisInjectable), "jobStore is only available in certain environments");
|
||||||
|
|
||||||
|
const api = di.inject(jobApiInjectable);
|
||||||
|
const apiManager = di.inject(apiManagerInjectable);
|
||||||
|
const store = new JobStore({
|
||||||
|
getPodsByOwnerId: di.inject(getPodsByOwnerIdInjectable),
|
||||||
|
}, api);
|
||||||
|
|
||||||
|
apiManager.registerStore(store);
|
||||||
|
|
||||||
|
return store;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default jobStoreInjectable;
|
||||||
@ -3,18 +3,24 @@
|
|||||||
* 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 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 type { Job, JobApi } from "../../../common/k8s-api/endpoints/job.api";
|
import type { Job, 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 { podStore } from "../+workloads-pods/legacy-store";
|
import type { GetPodsByOwnerId } from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
|
||||||
import { isClusterPageContext } from "../../utils";
|
interface Dependencies {
|
||||||
|
getPodsByOwnerId: GetPodsByOwnerId;
|
||||||
|
}
|
||||||
|
|
||||||
export class JobStore extends KubeObjectStore<Job, JobApi> {
|
export class JobStore extends KubeObjectStore<Job, JobApi> {
|
||||||
|
constructor(protected readonly dependencies: Dependencies, api: JobApi, opts?: KubeObjectStoreOptions) {
|
||||||
|
super(api, opts);
|
||||||
|
}
|
||||||
|
|
||||||
getChildPods(job: Job): Pod[] {
|
getChildPods(job: Job): Pod[] {
|
||||||
return podStore.getPodsByOwnerId(job.getId());
|
return this.dependencies.getPodsByOwnerId(job.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
getJobsByOwner(cronJob: CronJob) {
|
getJobsByOwner(cronJob: CronJob) {
|
||||||
@ -44,11 +50,3 @@ export class JobStore extends KubeObjectStore<Job, JobApi> {
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const jobStore = isClusterPageContext()
|
|
||||||
? new JobStore(jobApi)
|
|
||||||
: undefined as never;
|
|
||||||
|
|
||||||
if (isClusterPageContext()) {
|
|
||||||
apiManager.registerStore(jobStore);
|
|
||||||
}
|
|
||||||
@ -8,10 +8,10 @@ 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 { deploymentStore } from "../+workloads-deployments/store";
|
import type { DeploymentStore } from "../+workloads-deployments/store";
|
||||||
import { statefulSetStore } from "../+workloads-statefulsets/statefulset.store";
|
import { statefulSetStore } from "../+workloads-statefulsets/statefulset.store";
|
||||||
import { jobStore } from "../+workloads-jobs/job.store";
|
import type { JobStore } from "../+workloads-jobs/store";
|
||||||
import { cronJobStore } from "../+workloads-cronjobs/cronjob.store";
|
import type { CronJobStore } from "../+workloads-cronjobs/store";
|
||||||
import type { IComputedValue } from "mobx";
|
import type { IComputedValue } from "mobx";
|
||||||
import { makeObservable, observable, reaction } from "mobx";
|
import { makeObservable, observable, reaction } from "mobx";
|
||||||
import { NamespaceSelectFilter } from "../+namespaces/namespace-select-filter";
|
import { NamespaceSelectFilter } from "../+namespaces/namespace-select-filter";
|
||||||
@ -30,6 +30,9 @@ import daemonSetStoreInjectable from "../+workloads-daemonsets/store.injectable"
|
|||||||
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||||
import type { ReplicaSetStore } from "../+workloads-replicasets/store";
|
import type { ReplicaSetStore } from "../+workloads-replicasets/store";
|
||||||
import replicaSetStoreInjectable from "../+workloads-replicasets/store.injectable";
|
import replicaSetStoreInjectable from "../+workloads-replicasets/store.injectable";
|
||||||
|
import cronJobStoreInjectable from "../+workloads-cronjobs/store.injectable";
|
||||||
|
import deploymentStoreInjectable from "../+workloads-deployments/store.injectable";
|
||||||
|
import jobStoreInjectable from "../+workloads-jobs/store.injectable";
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
detailComponents: IComputedValue<React.ComponentType<{}>[]>;
|
detailComponents: IComputedValue<React.ComponentType<{}>[]>;
|
||||||
@ -38,6 +41,9 @@ interface Dependencies {
|
|||||||
podStore: PodStore;
|
podStore: PodStore;
|
||||||
daemonSetStore: DaemonSetStore;
|
daemonSetStore: DaemonSetStore;
|
||||||
replicaSetStore: ReplicaSetStore;
|
replicaSetStore: ReplicaSetStore;
|
||||||
|
deploymentStore: DeploymentStore;
|
||||||
|
jobStore: JobStore;
|
||||||
|
cronJobStore: CronJobStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -52,11 +58,11 @@ class NonInjectedWorkloadsOverview extends React.Component<Dependencies> {
|
|||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
disposeOnUnmount(this, [
|
disposeOnUnmount(this, [
|
||||||
this.props.subscribeStores([
|
this.props.subscribeStores([
|
||||||
cronJobStore,
|
this.props.cronJobStore,
|
||||||
this.props.daemonSetStore,
|
this.props.daemonSetStore,
|
||||||
deploymentStore,
|
this.props.deploymentStore,
|
||||||
eventStore,
|
eventStore,
|
||||||
jobStore,
|
this.props.jobStore,
|
||||||
this.props.podStore,
|
this.props.podStore,
|
||||||
this.props.replicaSetStore,
|
this.props.replicaSetStore,
|
||||||
statefulSetStore,
|
statefulSetStore,
|
||||||
@ -118,5 +124,8 @@ export const WorkloadsOverview = withInjectables<Dependencies>(NonInjectedWorklo
|
|||||||
daemonSetStore: di.inject(daemonSetStoreInjectable),
|
daemonSetStore: di.inject(daemonSetStoreInjectable),
|
||||||
podStore: di.inject(podStoreInjectable),
|
podStore: di.inject(podStoreInjectable),
|
||||||
replicaSetStore: di.inject(replicaSetStoreInjectable),
|
replicaSetStore: di.inject(replicaSetStoreInjectable),
|
||||||
|
cronJobStore: di.inject(cronJobStoreInjectable),
|
||||||
|
deploymentStore: di.inject(deploymentStoreInjectable),
|
||||||
|
jobStore: di.inject(jobStoreInjectable),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,7 +7,7 @@ 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/deployments/navigate-to-deployments.injectable";
|
import navigateToPodsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/deployments/navigate-to-deployments.injectable";
|
||||||
import namespaceStoreInjectable from "../../../+namespaces/namespace-store/namespace-store.injectable";
|
import namespaceStoreInjectable from "../../../+namespaces/namespace-store/namespace-store.injectable";
|
||||||
import cronJobsStoreInjectable from "../../../+workloads-cronjobs/cron-jobs-store.injectable";
|
import cronJobsStoreInjectable from "../../../+workloads-cronjobs/store.injectable";
|
||||||
import { computed } from "mobx";
|
import { computed } from "mobx";
|
||||||
|
|
||||||
const cronJobsWorkloadInjectable = getInjectable({
|
const cronJobsWorkloadInjectable = getInjectable({
|
||||||
|
|||||||
@ -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 jobsStoreInjectable from "../../../+workloads-jobs/jobs-store.injectable";
|
import jobStoreInjectable from "../../../+workloads-jobs/store.injectable";
|
||||||
import navigateToJobsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/jobs/navigate-to-jobs.injectable";
|
import navigateToJobsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/jobs/navigate-to-jobs.injectable";
|
||||||
import { computed } from "mobx";
|
import { computed } from "mobx";
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ const jobsWorkloadInjectable = getInjectable({
|
|||||||
instantiate: (di) => {
|
instantiate: (di) => {
|
||||||
const navigate = di.inject(navigateToJobsInjectable);
|
const navigate = di.inject(navigateToJobsInjectable);
|
||||||
const namespaceStore = di.inject(namespaceStoreInjectable);
|
const namespaceStore = di.inject(namespaceStoreInjectable);
|
||||||
const store = di.inject(jobsStoreInjectable);
|
const store = di.inject(jobStoreInjectable);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
resourceName: "jobs",
|
resourceName: "jobs",
|
||||||
|
|||||||
@ -2,33 +2,11 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* 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 { cronJobStore } from "../+workloads-cronjobs/cronjob.store";
|
import type { CronJobStore } from "../+workloads-cronjobs/store";
|
||||||
import type { CronJobSpec } from "../../../common/k8s-api/endpoints";
|
import cronJobStoreInjectable from "../+workloads-cronjobs/store.injectable";
|
||||||
import { CronJob } from "../../../common/k8s-api/endpoints";
|
import { CronJob } from "../../../common/k8s-api/endpoints";
|
||||||
|
import createStoresAndApisInjectable from "../../create-stores-apis.injectable";
|
||||||
const spec: CronJobSpec = {
|
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
||||||
schedule: "test",
|
|
||||||
concurrencyPolicy: "test",
|
|
||||||
suspend: true,
|
|
||||||
jobTemplate: {
|
|
||||||
metadata: {},
|
|
||||||
spec: {
|
|
||||||
template: {
|
|
||||||
metadata: {},
|
|
||||||
spec: {
|
|
||||||
containers: [],
|
|
||||||
restartPolicy: "restart",
|
|
||||||
terminationGracePeriodSeconds: 1,
|
|
||||||
dnsPolicy: "no",
|
|
||||||
hostPID: true,
|
|
||||||
schedulerName: "string",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
successfulJobsHistoryLimit: 1,
|
|
||||||
failedJobsHistoryLimit: 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
const scheduledCronJob = new CronJob({
|
const scheduledCronJob = new CronJob({
|
||||||
apiVersion: "foo",
|
apiVersion: "foo",
|
||||||
@ -40,7 +18,29 @@ const scheduledCronJob = new CronJob({
|
|||||||
namespace: "default",
|
namespace: "default",
|
||||||
selfLink: "/apis/batch/v1beta1/cronjobs/default/scheduledCronJob",
|
selfLink: "/apis/batch/v1beta1/cronjobs/default/scheduledCronJob",
|
||||||
},
|
},
|
||||||
spec,
|
spec: {
|
||||||
|
schedule: "test",
|
||||||
|
concurrencyPolicy: "test",
|
||||||
|
suspend: false,
|
||||||
|
jobTemplate: {
|
||||||
|
metadata: {},
|
||||||
|
spec: {
|
||||||
|
template: {
|
||||||
|
metadata: {},
|
||||||
|
spec: {
|
||||||
|
containers: [],
|
||||||
|
restartPolicy: "restart",
|
||||||
|
terminationGracePeriodSeconds: 1,
|
||||||
|
dnsPolicy: "no",
|
||||||
|
hostPID: true,
|
||||||
|
schedulerName: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
successfulJobsHistoryLimit: 1,
|
||||||
|
failedJobsHistoryLimit: 1,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const suspendedCronJob = new CronJob({
|
const suspendedCronJob = new CronJob({
|
||||||
@ -53,7 +53,29 @@ const suspendedCronJob = new CronJob({
|
|||||||
namespace: "default",
|
namespace: "default",
|
||||||
selfLink: "/apis/batch/v1beta1/cronjobs/default/suspendedCronJob",
|
selfLink: "/apis/batch/v1beta1/cronjobs/default/suspendedCronJob",
|
||||||
},
|
},
|
||||||
spec,
|
spec: {
|
||||||
|
schedule: "test",
|
||||||
|
concurrencyPolicy: "test",
|
||||||
|
suspend: true,
|
||||||
|
jobTemplate: {
|
||||||
|
metadata: {},
|
||||||
|
spec: {
|
||||||
|
template: {
|
||||||
|
metadata: {},
|
||||||
|
spec: {
|
||||||
|
containers: [],
|
||||||
|
restartPolicy: "restart",
|
||||||
|
terminationGracePeriodSeconds: 1,
|
||||||
|
dnsPolicy: "no",
|
||||||
|
hostPID: true,
|
||||||
|
schedulerName: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
successfulJobsHistoryLimit: 1,
|
||||||
|
failedJobsHistoryLimit: 1,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const otherSuspendedCronJob = new CronJob({
|
const otherSuspendedCronJob = new CronJob({
|
||||||
@ -66,12 +88,42 @@ const otherSuspendedCronJob = new CronJob({
|
|||||||
namespace: "default",
|
namespace: "default",
|
||||||
selfLink: "/apis/batch/v1beta1/cronjobs/default/otherSuspendedCronJob",
|
selfLink: "/apis/batch/v1beta1/cronjobs/default/otherSuspendedCronJob",
|
||||||
},
|
},
|
||||||
spec,
|
spec: {
|
||||||
|
schedule: "test",
|
||||||
|
concurrencyPolicy: "test",
|
||||||
|
suspend: true,
|
||||||
|
jobTemplate: {
|
||||||
|
metadata: {},
|
||||||
|
spec: {
|
||||||
|
template: {
|
||||||
|
metadata: {},
|
||||||
|
spec: {
|
||||||
|
containers: [],
|
||||||
|
restartPolicy: "restart",
|
||||||
|
terminationGracePeriodSeconds: 1,
|
||||||
|
dnsPolicy: "no",
|
||||||
|
hostPID: true,
|
||||||
|
schedulerName: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
successfulJobsHistoryLimit: 1,
|
||||||
|
failedJobsHistoryLimit: 1,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
scheduledCronJob.spec.suspend = false;
|
|
||||||
|
|
||||||
describe("CronJob Store tests", () => {
|
describe("CronJob Store tests", () => {
|
||||||
|
let cronJobStore: CronJobStore;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
const di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||||
|
|
||||||
|
di.override(createStoresAndApisInjectable, () => true);
|
||||||
|
|
||||||
|
cronJobStore = di.inject(cronJobStoreInjectable);
|
||||||
|
});
|
||||||
|
|
||||||
it("gets CronJob statuses in proper sorting order", () => {
|
it("gets CronJob statuses in proper sorting order", () => {
|
||||||
const statuses = Object.entries(cronJobStore.getStatuses([
|
const statuses = Object.entries(cronJobStore.getStatuses([
|
||||||
suspendedCronJob,
|
suspendedCronJob,
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import { jobStore } from "../+workloads-jobs/job.store";
|
import { jobStore } from "../+workloads-jobs/store";
|
||||||
import { podStore } from "../+workloads-pods/legacy-store";
|
import { podStore } from "../+workloads-pods/legacy-store";
|
||||||
import { Job, Pod } from "../../../common/k8s-api/endpoints";
|
import { Job, Pod } from "../../../common/k8s-api/endpoints";
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user