1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

remove unused legacy KubeApi globals

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-04-13 13:21:27 -04:00
parent ee8e36911c
commit b4ca52488c
31 changed files with 115 additions and 223 deletions

View File

@ -4,56 +4,18 @@
*/ */
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 clusterRoleApiInjectable from "./cluster-role.api.injectable";
import clusterApiInjectable from "./cluster.api.injectable";
import componentStatusApiInjectable from "./component-status.api.injectable";
import configMapApiInjectable from "./config-map.api.injectable"; import configMapApiInjectable from "./config-map.api.injectable";
import cronJobApiInjectable from "./cron-job.api.injectable"; import cronJobApiInjectable from "./cron-job.api.injectable";
import customResourceDefinitionApiInjectable from "./custom-resource-definition.api.injectable";
import daemonSetApiInjectable from "./daemon-set.api.injectable";
import deploymentApiInjectable from "./deployment.api.injectable";
import endpointsApiInjectable from "./endpoint.api.injectable";
import kubeEventApiInjectable from "./events.api.injectable";
import horizontalPodAutoscalerApiInjectable from "./horizontal-pod-autoscaler.api.injectable";
import ingressApiInjectable from "./ingress.api.injectable";
import jobApiInjectable from "./job.api.injectable"; import jobApiInjectable from "./job.api.injectable";
import limitRangeApiInjectable from "./limit-range.api.injectable";
import namespaceApiInjectable from "./namespace.api.injectable";
import networkPolicyApiInjectable from "./network-policy.api.injectable"; import networkPolicyApiInjectable from "./network-policy.api.injectable";
import nodeApiInjectable from "./node.api.injectable"; import nodeApiInjectable from "./node.api.injectable";
import persistentVolumeClaimApiInjectable from "./persistent-volume-claim.api.injectable"; import persistentVolumeClaimApiInjectable from "./persistent-volume-claim.api.injectable";
import persistentVolumeApiInjectable from "./persistent-volume.api.injectable";
import podDisruptionBudgetApiInjectable from "./pod-disruption-budget.api.injectable";
import podMetricsApiInjectable from "./pod-metrics.api.injectable";
import podSecurityPolicyApiInjectable from "./pod-security-policy.api.injectable";
import podApiInjectable from "./pod.api.injectable"; import podApiInjectable from "./pod.api.injectable";
import replicaSetApiInjectable from "./replica-set.api.injectable";
import resourceQuotaApiInjectable from "./resource-quota.api.injectable";
import roleBindingApiInjectable from "./role-binding.api.injectable";
import roleApiInjectable from "./role.api.injectable"; import roleApiInjectable from "./role.api.injectable";
import secretApiInjectable from "./secret.api.injectable"; import secretApiInjectable from "./secret.api.injectable";
import selfSubjectRulesReviewApiInjectable from "./self-subject-rules-reviews.api.injectable";
import serviceAccountApiInjectable from "./service-account.api.injectable";
import serviceApiInjectable from "./service.api.injectable"; import serviceApiInjectable from "./service.api.injectable";
import statefulSetApiInjectable from "./stateful-set.api.injectable";
import storageClassApiInjectable from "./storage-class.api.injectable"; import storageClassApiInjectable from "./storage-class.api.injectable";
/**
* @deprecated use `di.inject(clusterRoleBindingApiInjectable)` instead
*/
export const clusterRoleBindingApi = asLegacyGlobalForExtensionApi(clusterRoleBindingApiInjectable);
/**
* @deprecated use `di.inject(clusterRoleApiInjectable)` instead
*/
export const clusterRoleApi = asLegacyGlobalForExtensionApi(clusterRoleApiInjectable);
/**
* @deprecated use `di.inject(serviceAccountApiInjectable)` instead
*/
export const serviceAccountApi = asLegacyGlobalForExtensionApi(serviceAccountApiInjectable);
/** /**
* @deprecated use `di.inject(roleApiInjectable)` instead * @deprecated use `di.inject(roleApiInjectable)` instead
*/ */
@ -64,26 +26,6 @@ export const roleApi = asLegacyGlobalForExtensionApi(roleApiInjectable);
*/ */
export const podApi = asLegacyGlobalForExtensionApi(podApiInjectable); export const podApi = asLegacyGlobalForExtensionApi(podApiInjectable);
/**
* @deprecated use `di.inject(daemonSetApiInjectable)` instead
*/
export const daemonSetApi = asLegacyGlobalForExtensionApi(daemonSetApiInjectable);
/**
* @deprecated use `di.inject(replicaSetApiInjectable)` instead
*/
export const replicaSetApi = asLegacyGlobalForExtensionApi(replicaSetApiInjectable);
/**
* @deprecated use `di.inject(statefulSetApiInjectable)` instead
*/
export const statefulSetApi = asLegacyGlobalForExtensionApi(statefulSetApiInjectable);
/**
* @deprecated use `di.inject(deploymentApiInjectable)` instead
*/
export const deploymentApi = asLegacyGlobalForExtensionApi(deploymentApiInjectable);
/** /**
* @deprecated use `di.inject(cronJobApiInjectable)` instead * @deprecated use `di.inject(cronJobApiInjectable)` instead
*/ */
@ -94,56 +36,11 @@ export const cronJobApi = asLegacyGlobalForExtensionApi(cronJobApiInjectable);
*/ */
export const jobApi = asLegacyGlobalForExtensionApi(jobApiInjectable); export const jobApi = asLegacyGlobalForExtensionApi(jobApiInjectable);
/**
* @deprecated use `di.inject(clusterApiInjectable)` instead
*/
export const clusterApi = asLegacyGlobalForExtensionApi(clusterApiInjectable);
/** /**
* @deprecated use `di.inject(configMapApiInjectable)` instead * @deprecated use `di.inject(configMapApiInjectable)` instead
*/ */
export const configMapApi = asLegacyGlobalForExtensionApi(configMapApiInjectable); export const configMapApi = asLegacyGlobalForExtensionApi(configMapApiInjectable);
/**
* @deprecated use `di.inject(componentStatusApiInjectable)` instead
*/
export const componentStatusApi = asLegacyGlobalForExtensionApi(componentStatusApiInjectable);
/**
* @deprecated use `di.inject(customResourceDefinitionApiInjectable)` instead
*/
export const customResourceDefinitionApi = asLegacyGlobalForExtensionApi(customResourceDefinitionApiInjectable);
/**
* @deprecated use `di.inject(kubeEventApiInjectable)` instead
*/
export const kubeEventApi = asLegacyGlobalForExtensionApi(kubeEventApiInjectable);
/**
* @deprecated use `di.inject(endpointsApiInjectable)` instead
*/
export const endpointsApi = asLegacyGlobalForExtensionApi(endpointsApiInjectable);
/**
* @deprecated use `di.inject(horizontalPodAutoscalerApiInjectable)` instead
*/
export const horizontalPodAutoscalerApi = asLegacyGlobalForExtensionApi(horizontalPodAutoscalerApiInjectable);
/**
* @deprecated use `di.inject(ingressApiInjectable)` instead
*/
export const ingressApi = asLegacyGlobalForExtensionApi(ingressApiInjectable);
/**
* @deprecated use `di.inject(limitRangeApiInjectable)` instead
*/
export const limitRangeApi = asLegacyGlobalForExtensionApi(limitRangeApiInjectable);
/**
* @deprecated use `di.inject(namespaceApiInjectable)` instead
*/
export const namespaceApi = asLegacyGlobalForExtensionApi(namespaceApiInjectable);
/** /**
* @deprecated use `di.inject(networkPolicyApiInjectable)` instead * @deprecated use `di.inject(networkPolicyApiInjectable)` instead
*/ */
@ -159,46 +56,11 @@ export const nodeApi = asLegacyGlobalForExtensionApi(nodeApiInjectable);
*/ */
export const persistentVolumeClaimApi = asLegacyGlobalForExtensionApi(persistentVolumeClaimApiInjectable); export const persistentVolumeClaimApi = asLegacyGlobalForExtensionApi(persistentVolumeClaimApiInjectable);
/**
* @deprecated use `di.inject(persistentVolumeApiInjectable)` instead
*/
export const persistentVolumeApi = asLegacyGlobalForExtensionApi(persistentVolumeApiInjectable);
/**
* @deprecated use `di.inject(podDisruptionBudgetApiInjectable)` instead
*/
export const podDisruptionBudgetApi = asLegacyGlobalForExtensionApi(podDisruptionBudgetApiInjectable);
/**
* @deprecated use `di.inject(podMetricsApiInjectable)` instead
*/
export const podMetricsApi = asLegacyGlobalForExtensionApi(podMetricsApiInjectable);
/**
* @deprecated use `di.inject(podSecurityPolicyApiInjectable)` instead
*/
export const podSecurityPolicyApi = asLegacyGlobalForExtensionApi(podSecurityPolicyApiInjectable);
/**
* @deprecated use `di.inject(resourceQuotaApiInjectable)` instead
*/
export const resourceQuotaApi = asLegacyGlobalForExtensionApi(resourceQuotaApiInjectable);
/**
* @deprecated use `di.inject(roleBindingApiInjectable)` instead
*/
export const roleBindingApi = asLegacyGlobalForExtensionApi(roleBindingApiInjectable);
/** /**
* @deprecated use `di.inject(secretApiInjectable)` instead * @deprecated use `di.inject(secretApiInjectable)` instead
*/ */
export const secretApi = asLegacyGlobalForExtensionApi(secretApiInjectable); export const secretApi = asLegacyGlobalForExtensionApi(secretApiInjectable);
/**
* @deprecated use `di.inject(selfSubjectRulesReviewApiInjectable)` instead
*/
export const selfSubjectRulesReviewApi = asLegacyGlobalForExtensionApi(selfSubjectRulesReviewApiInjectable);
/** /**
* @deprecated use `di.inject(serviceApiInjectable)` instead * @deprecated use `di.inject(serviceApiInjectable)` instead
*/ */

View File

@ -5,7 +5,7 @@
import type { MetricData } from "./metrics.api"; 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, ResourceDescriptor } from "../kube-api";
import { KubeApi } from "../kube-api"; import { KubeApi } from "../kube-api";
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";
@ -22,11 +22,11 @@ export class PodApi extends KubeApi<Pod> {
}); });
} }
getLogs = async (params: { namespace: string; name: string }, query?: IPodLogsQuery): Promise<string> => { async getLogs(params: ResourceDescriptor, query?: PodLogsQuery): Promise<string> {
const path = `${this.getUrl(params)}/log`; const path = `${this.getUrl(params)}/log`;
return this.request.get(path, { query }); return this.request.get(path, { query });
}; }
} }
export function getMetricsForPods(pods: Pod[], namespace: string, selector = "pod, namespace"): Promise<PodMetricData> { export function getMetricsForPods(pods: Pod[], namespace: string, selector = "pod, namespace"): Promise<PodMetricData> {
@ -65,7 +65,7 @@ export interface PodMetricData extends Partial<Record<string, MetricData>> {
} }
// Reference: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#read-log-pod-v1-core // Reference: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#read-log-pod-v1-core
export interface IPodLogsQuery { export interface PodLogsQuery {
container?: string; container?: string;
tailLines?: number; tailLines?: number;
timestamps?: boolean; timestamps?: boolean;

View File

@ -109,7 +109,7 @@ export type { NetworkPolicyStore } from "../../renderer/components/+network-poli
export type { PersistentVolumeStore as PersistentVolumesStore } from "../../renderer/components/+storage-volumes/store"; export type { PersistentVolumeStore as PersistentVolumesStore } from "../../renderer/components/+storage-volumes/store";
export type { PersistentVolumeClaimStore as VolumeClaimStore } from "../../renderer/components/+storage-volume-claims/store"; export type { PersistentVolumeClaimStore as VolumeClaimStore } from "../../renderer/components/+storage-volume-claims/store";
export type { StorageClassStore } from "../../renderer/components/+storage-classes/store"; export type { StorageClassStore } from "../../renderer/components/+storage-classes/store";
export type { NamespaceStore } from "../../renderer/components/+namespaces/namespace-store/namespace.store"; export type { NamespaceStore } from "../../renderer/components/+namespaces/store";
export type { ServiceAccountStore as ServiceAccountsStore } from "../../renderer/components/+user-management/+service-accounts/store"; export type { ServiceAccountStore as ServiceAccountsStore } from "../../renderer/components/+user-management/+service-accounts/store";
export type { RoleStore as RolesStore } from "../../renderer/components/+user-management/+roles/store"; export type { RoleStore as RolesStore } from "../../renderer/components/+user-management/+roles/store";
export type { RoleBindingStore as RoleBindingsStore } from "../../renderer/components/+user-management/+role-bindings/store"; export type { RoleBindingStore as RoleBindingsStore } from "../../renderer/components/+user-management/+role-bindings/store";

View File

@ -4,7 +4,7 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { ClusterFrameContext } from "./cluster-frame-context"; import { ClusterFrameContext } from "./cluster-frame-context";
import namespaceStoreInjectable from "../components/+namespaces/namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "../components/+namespaces/store.injectable";
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";

View File

@ -4,7 +4,7 @@
*/ */
import type { Cluster } from "../../common/cluster/cluster"; import type { Cluster } from "../../common/cluster/cluster";
import type { NamespaceStore } from "../components/+namespaces/namespace-store/namespace.store"; import type { NamespaceStore } from "../components/+namespaces/store";
import type { ClusterContext } from "../../common/k8s-api/cluster-context"; import type { ClusterContext } from "../../common/k8s-api/cluster-context";
import { computed, makeObservable } from "mobx"; import { computed, makeObservable } from "mobx";

View File

@ -12,13 +12,19 @@ import {
} from "./cluster-overview-store"; } from "./cluster-overview-store";
import createStorageInjectable from "../../../utils/create-storage/create-storage.injectable"; import createStorageInjectable from "../../../utils/create-storage/create-storage.injectable";
import apiManagerInjectable from "../../../../common/k8s-api/api-manager/manager.injectable"; import apiManagerInjectable from "../../../../common/k8s-api/api-manager/manager.injectable";
import { clusterApi } from "../../../../common/k8s-api/endpoints"; import clusterApiInjectable from "../../../../common/k8s-api/endpoints/cluster.api.injectable";
import createStoresAndApisInjectable from "../../../create-stores-apis.injectable";
import assert from "assert";
import nodeStoreInjectable from "../../+nodes/store.injectable";
const clusterOverviewStoreInjectable = getInjectable({ const clusterOverviewStoreInjectable = getInjectable({
id: "cluster-overview-store", id: "cluster-overview-store",
instantiate: (di) => { instantiate: (di) => {
assert(di.inject(createStoresAndApisInjectable), "clusterOverviewStore is only available in certain environments");
const createStorage = di.inject(createStorageInjectable); const createStorage = di.inject(createStorageInjectable);
const clusterApi = di.inject(clusterApiInjectable);
const apiManager = di.inject(apiManagerInjectable);
const storage = createStorage<ClusterOverviewStorageState>( const storage = createStorage<ClusterOverviewStorageState>(
"cluster_overview", "cluster_overview",
@ -27,13 +33,11 @@ const clusterOverviewStoreInjectable = getInjectable({
metricNodeRole: MetricNodeRole.WORKER, metricNodeRole: MetricNodeRole.WORKER,
}, },
); );
const store = new ClusterOverviewStore({ const store = new ClusterOverviewStore({
storage, storage,
nodeStore: di.inject(nodeStoreInjectable),
}, clusterApi); }, clusterApi);
const apiManager = di.inject(apiManagerInjectable);
apiManager.registerStore(store); apiManager.registerStore(store);
return store; return store;

View File

@ -27,7 +27,7 @@ export interface ClusterOverviewStorageState {
metricNodeRole: MetricNodeRole; metricNodeRole: MetricNodeRole;
} }
interface Dependencies { interface ClusterOverviewStoreDependencies {
readonly storage: StorageLayer<ClusterOverviewStorageState>; readonly storage: StorageLayer<ClusterOverviewStorageState>;
readonly nodeStore: NodeStore; readonly nodeStore: NodeStore;
} }
@ -52,7 +52,7 @@ export class ClusterOverviewStore extends KubeObjectStore<Cluster, ClusterApi> i
this.dependencies.storage.merge({ metricNodeRole: value }); this.dependencies.storage.merge({ metricNodeRole: value });
} }
constructor(protected readonly dependencies: Dependencies, api: ClusterApi) { constructor(protected readonly dependencies: ClusterOverviewStoreDependencies, api: ClusterApi) {
super(api); super(api);
makeObservable(this); makeObservable(this);
autoBind(this); autoBind(this);

View File

@ -4,7 +4,7 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { asyncComputed } from "@ogre-tools/injectable-react"; import { asyncComputed } from "@ogre-tools/injectable-react";
import namespaceStoreInjectable from "../+namespaces/namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "../+namespaces/store.injectable";
import { listReleases } from "../../../common/k8s-api/endpoints/helm-releases.api"; import { listReleases } from "../../../common/k8s-api/endpoints/helm-releases.api";
const releasesInjectable = getInjectable({ const releasesInjectable = getInjectable({

View File

@ -9,7 +9,7 @@ import "./releases.scss";
import React, { Component } from "react"; import React, { Component } from "react";
import type { HelmRelease } from "../../../common/k8s-api/endpoints/helm-releases.api"; import type { HelmRelease } from "../../../common/k8s-api/endpoints/helm-releases.api";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import namespaceStoreInjectable from "../+namespaces/namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "../+namespaces/store.injectable";
import type { ItemListStore } from "../item-object-list"; import type { ItemListStore } from "../item-object-list";
import { ItemListLayout } from "../item-object-list"; import { ItemListLayout } from "../item-object-list";
import { NamespaceSelectFilter } from "../+namespaces/namespace-select-filter"; import { NamespaceSelectFilter } from "../+namespaces/namespace-select-filter";

View File

@ -16,11 +16,11 @@ import { Input } from "../input";
import { systemName } from "../input/input_validators"; import { systemName } from "../input/input_validators";
import { Notifications } from "../notifications"; import { Notifications } from "../notifications";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import namespaceStoreInjectable from "./namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "./store.injectable";
import type { AddNamespaceDialogModel } from "./add-namespace-dialog-model/add-namespace-dialog-model"; import type { AddNamespaceDialogModel } from "./add-namespace-dialog-model/add-namespace-dialog-model";
import addNamespaceDialogModelInjectable import addNamespaceDialogModelInjectable
from "./add-namespace-dialog-model/add-namespace-dialog-model.injectable"; from "./add-namespace-dialog-model/add-namespace-dialog-model.injectable";
import type { NamespaceStore } from "./namespace-store/namespace.store"; import type { NamespaceStore } from "./store";
export interface AddNamespaceDialogProps extends DialogProps { export interface AddNamespaceDialogProps extends DialogProps {
onSuccess?(ns: Namespace): void; onSuccess?(ns: Namespace): void;

View File

@ -4,7 +4,7 @@
*/ */
import { NamespaceSelectFilterModel } from "./namespace-select-filter-model"; import { NamespaceSelectFilterModel } from "./namespace-select-filter-model";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import namespaceStoreInjectable from "../namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "../store.injectable";
const namespaceSelectFilterModelInjectable = getInjectable({ const namespaceSelectFilterModelInjectable = getInjectable({
id: "namespace-select-filter-model", id: "namespace-select-filter-model",

View File

@ -4,7 +4,7 @@
*/ */
import React from "react"; import React from "react";
import { observable, makeObservable, action, untracked, computed } from "mobx"; import { observable, makeObservable, action, untracked, computed } from "mobx";
import type { NamespaceStore } from "../namespace-store/namespace.store"; import type { NamespaceStore } from "../store";
import { isMac } from "../../../../common/vars"; import { isMac } from "../../../../common/vars";
import type { ActionMeta } from "react-select"; import type { ActionMeta } from "react-select";
import { Icon } from "../../icon"; import { Icon } from "../../icon";

View File

@ -9,12 +9,12 @@ import React from "react";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import type { PlaceholderProps } from "react-select"; import type { PlaceholderProps } from "react-select";
import { components } from "react-select"; import { components } from "react-select";
import type { NamespaceStore } from "./namespace-store/namespace.store"; import type { NamespaceStore } from "./store";
import { Select } from "../select"; import { Select } from "../select";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import type { NamespaceSelectFilterModel, NamespaceSelectFilterOption, SelectAllNamespaces } from "./namespace-select-filter-model/namespace-select-filter-model"; import type { NamespaceSelectFilterModel, NamespaceSelectFilterOption, SelectAllNamespaces } from "./namespace-select-filter-model/namespace-select-filter-model";
import namespaceSelectFilterModelInjectable from "./namespace-select-filter-model/namespace-select-filter-model.injectable"; import namespaceSelectFilterModelInjectable from "./namespace-select-filter-model/namespace-select-filter-model.injectable";
import namespaceStoreInjectable from "./namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "./store.injectable";
interface NamespaceSelectFilterProps { interface NamespaceSelectFilterProps {
id: string; id: string;

View File

@ -12,9 +12,9 @@ import type { SelectProps } from "../select";
import { Select } from "../select"; import { Select } from "../select";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
import { Icon } from "../icon"; import { Icon } from "../icon";
import type { NamespaceStore } from "./namespace-store/namespace.store"; import type { NamespaceStore } from "./store";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import namespaceStoreInjectable from "./namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "./store.injectable";
export type NamespaceSelectSort = (left: string, right: string) => number; export type NamespaceSelectSort = (left: string, right: string) => number;

View File

@ -1,34 +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 { NamespaceStore } from "./namespace.store";
import apiManagerInjectable from "../../../../common/k8s-api/api-manager/manager.injectable";
import createStorageInjectable from "../../../utils/create-storage/create-storage.injectable";
import { namespaceApi } from "../../../../common/k8s-api/endpoints";
const namespaceStoreInjectable = getInjectable({
id: "namespace-store",
instantiate: (di) => {
const createStorage = di.inject(createStorageInjectable);
const storage = createStorage<string[] | undefined>(
"selected_namespaces",
undefined,
);
const namespaceStore = new NamespaceStore({
storage,
}, namespaceApi);
const apiManager = di.inject(apiManagerInjectable);
apiManager.registerStore(namespaceStore);
return namespaceStore;
},
});
export default namespaceStoreInjectable;

View File

@ -11,10 +11,10 @@ import { AddNamespaceDialog } from "./add-namespace-dialog";
import { TabLayout } from "../layout/tab-layout-2"; import { TabLayout } from "../layout/tab-layout-2";
import { Badge } from "../badge"; import { Badge } from "../badge";
import { KubeObjectListLayout } from "../kube-object-list-layout"; import { KubeObjectListLayout } from "../kube-object-list-layout";
import type { NamespaceStore } from "./namespace-store/namespace.store"; import type { NamespaceStore } from "./store";
import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import namespaceStoreInjectable from "./namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "./store.injectable";
import addNamespaceDialogModelInjectable from "./add-namespace-dialog-model/add-namespace-dialog-model.injectable"; import addNamespaceDialogModelInjectable from "./add-namespace-dialog-model/add-namespace-dialog-model.injectable";
import { KubeObjectAge } from "../kube-object/age"; import { KubeObjectAge } from "../kube-object/age";

View File

@ -0,0 +1,36 @@
/**
* 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 { NamespaceStore } from "./store";
import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable";
import createStorageInjectable from "../../utils/create-storage/create-storage.injectable";
import namespaceApiInjectable from "../../../common/k8s-api/endpoints/namespace.api.injectable";
import assert from "assert";
import createStoresAndApisInjectable from "../../create-stores-apis.injectable";
const namespaceStoreInjectable = getInjectable({
id: "namespace-store",
instantiate: (di) => {
assert(di.inject(createStoresAndApisInjectable), "namespaceStore is only available in certain environments");
const createStorage = di.inject(createStorageInjectable);
const apiManager = di.inject(apiManagerInjectable);
const api = di.inject(namespaceApiInjectable);
const storage = createStorage<string[] | undefined>(
"selected_namespaces",
undefined,
);
const store = new NamespaceStore({
storage,
}, api);
apiManager.registerStore(store);
return store;
},
});
export default namespaceStoreInjectable;

View File

@ -5,12 +5,12 @@
import type { IReactionDisposer } from "mobx"; import type { IReactionDisposer } from "mobx";
import { action, comparer, computed, makeObservable, reaction } from "mobx"; import { action, comparer, computed, makeObservable, reaction } from "mobx";
import type { StorageLayer } from "../../../utils"; import type { StorageLayer } from "../../utils";
import { autoBind, noop, toggle } from "../../../utils"; import { autoBind, noop, toggle } from "../../utils";
import type { KubeObjectStoreLoadingParams } from "../../../../common/k8s-api/kube-object.store"; import type { KubeObjectStoreLoadingParams } 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 { NamespaceApi } from "../../../../common/k8s-api/endpoints/namespace.api"; import type { NamespaceApi } from "../../../common/k8s-api/endpoints/namespace.api";
import { Namespace } from "../../../../common/k8s-api/endpoints/namespace.api"; import { Namespace } from "../../../common/k8s-api/endpoints/namespace.api";
interface Dependencies { interface Dependencies {
storage: StorageLayer<string[] | undefined>; storage: StorageLayer<string[] | undefined>;

View File

@ -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 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/store.injectable";
import cronJobsStoreInjectable from "../../../+workloads-cronjobs/store.injectable"; import cronJobsStoreInjectable from "../../../+workloads-cronjobs/store.injectable";
import { computed } from "mobx"; import { computed } from "mobx";

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable"; 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/store.injectable";
import daemonsetsStoreInjectable from "../../../+workloads-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";

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable"; 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/store.injectable";
import deploymentsStoreInjectable from "../../../+workloads-deployments/store.injectable"; import deploymentsStoreInjectable from "../../../+workloads-deployments/store.injectable";
import navigateToDeploymentsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/deployments/navigate-to-deployments.injectable"; import navigateToDeploymentsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/deployments/navigate-to-deployments.injectable";
import { computed } from "mobx"; import { computed } from "mobx";

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable"; 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/store.injectable";
import jobStoreInjectable from "../../../+workloads-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";

View File

@ -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 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 namespaceStoreInjectable from "../../../+namespaces/namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "../../../+namespaces/store.injectable";
import { computed } from "mobx"; import { computed } from "mobx";
import podStoreInjectable from "../../../+workloads-pods/store.injectable"; import podStoreInjectable from "../../../+workloads-pods/store.injectable";

View File

@ -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 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/store.injectable";
import replicasetsStoreInjectable from "../../../+workloads-replicasets/store.injectable"; import replicasetsStoreInjectable from "../../../+workloads-replicasets/store.injectable";
import { computed } from "mobx"; import { computed } from "mobx";

View File

@ -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 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/store.injectable";
import statefulsetsStoreInjectable from "../../../+workloads-statefulsets/store.injectable"; import statefulsetsStoreInjectable from "../../../+workloads-statefulsets/store.injectable";
import { computed } from "mobx"; import { computed } from "mobx";

View File

@ -8,6 +8,7 @@ import podApiInjectable from "../../../common/k8s-api/endpoints/pod.api.injectab
import createStoresAndApisInjectable from "../../create-stores-apis.injectable"; import createStoresAndApisInjectable from "../../create-stores-apis.injectable";
import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable"; import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable";
import { PodStore } from "./store"; import { PodStore } from "./store";
import podMetricsApiInjectable from "../../../common/k8s-api/endpoints/pod-metrics.api.injectable";
const podStoreInjectable = getInjectable({ const podStoreInjectable = getInjectable({
id: "pod-store", id: "pod-store",
@ -16,7 +17,9 @@ const podStoreInjectable = getInjectable({
const api = di.inject(podApiInjectable); const api = di.inject(podApiInjectable);
const apiManager = di.inject(apiManagerInjectable); const apiManager = di.inject(apiManagerInjectable);
const store = new PodStore(api); const store = new PodStore({
podMetricsApi: di.inject(podMetricsApiInjectable),
}, api);
apiManager.registerStore(store); apiManager.registerStore(store);

View File

@ -5,18 +5,30 @@
import countBy from "lodash/countBy"; import countBy from "lodash/countBy";
import { observable } from "mobx"; import { observable } from "mobx";
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 { cpuUnitsToNumber, unitsToBytes } from "../../utils"; import { cpuUnitsToNumber, unitsToBytes } from "../../utils";
import type { Pod, PodMetrics, PodApi } from "../../../common/k8s-api/endpoints"; import type { Pod, PodMetrics, PodApi, PodMetricsApi } from "../../../common/k8s-api/endpoints";
import { podMetricsApi } from "../../../common/k8s-api/endpoints";
import type { KubeObject, KubeObjectScope } from "../../../common/k8s-api/kube-object"; import type { KubeObject, KubeObjectScope } from "../../../common/k8s-api/kube-object";
export interface PodStoreDependencies {
readonly podMetricsApi: PodMetricsApi;
}
export class PodStore extends KubeObjectStore<Pod, PodApi> { export class PodStore extends KubeObjectStore<Pod, PodApi> {
constructor(
protected readonly dependencies: PodStoreDependencies,
api: PodApi,
opts?: KubeObjectStoreOptions,
) {
super(api, opts);
}
readonly kubeMetrics = observable.array<PodMetrics>([]); readonly kubeMetrics = observable.array<PodMetrics>([]);
async loadKubeMetrics(namespace?: string) { async loadKubeMetrics(namespace?: string) {
try { try {
const metrics = await podMetricsApi.list({ namespace }); const metrics = await this.dependencies.podMetricsApi.list({ namespace });
this.kubeMetrics.replace(metrics ?? []); this.kubeMetrics.replace(metrics ?? []);
} catch (error) { } catch (error) {

View File

@ -3,11 +3,19 @@
* 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 { podApi } from "../../../../common/k8s-api/endpoints"; import type { PodLogsQuery } from "../../../../common/k8s-api/endpoints";
import podApiInjectable from "../../../../common/k8s-api/endpoints/pod.api.injectable";
import type { ResourceDescriptor } from "../../../../common/k8s-api/kube-api";
export type CallForLogs = (params: ResourceDescriptor, query?: PodLogsQuery) => Promise<string>;
const callForLogsInjectable = getInjectable({ const callForLogsInjectable = getInjectable({
id: "call-for-logs", id: "call-for-logs",
instantiate: () => podApi.getLogs, instantiate: (di): CallForLogs => {
const api = di.inject(podApiInjectable);
return (params, query) => api.getLogs(params, query);
},
}); });
export default callForLogsInjectable; export default callForLogsInjectable;

View File

@ -5,11 +5,12 @@
import type { IComputedValue } from "mobx"; import type { IComputedValue } from "mobx";
import { observable } from "mobx"; import { observable } from "mobx";
import type { IPodLogsQuery, Pod } from "../../../../common/k8s-api/endpoints"; import type { PodLogsQuery, Pod } from "../../../../common/k8s-api/endpoints";
import { waitUntilDefinied } from "../../../../common/utils/wait"; import { waitUntilDefinied } from "../../../../common/utils/wait";
import type { IntervalFn } from "../../../utils"; import type { IntervalFn } from "../../../utils";
import { getOrInsertWith, interval } from "../../../utils"; import { getOrInsertWith, interval } from "../../../utils";
import type { TabId } from "../dock/store"; import type { TabId } from "../dock/store";
import type { CallForLogs } from "./call-for-logs.injectable";
import type { LogTabData } from "./tab-store"; import type { LogTabData } from "./tab-store";
type PodLogLine = string; type PodLogLine = string;
@ -17,7 +18,7 @@ type PodLogLine = string;
const logLinesToLoad = 500; const logLinesToLoad = 500;
interface Dependencies { interface Dependencies {
callForLogs: ({ namespace, name }: { namespace: string; name: string }, query: IPodLogsQuery) => Promise<string>; callForLogs: CallForLogs;
} }
export class LogStore { export class LogStore {
@ -109,7 +110,7 @@ export class LogStore {
* @param params request parameters described in IPodLogsQuery interface * @param params request parameters described in IPodLogsQuery interface
* @returns A fetch request promise * @returns A fetch request promise
*/ */
private async loadLogs(computedPod: IComputedValue<Pod | undefined>, logTabData: IComputedValue<LogTabData | undefined>, params: Partial<IPodLogsQuery>): Promise<string[]> { private async loadLogs(computedPod: IComputedValue<Pod | undefined>, logTabData: IComputedValue<LogTabData | undefined>, params: Partial<PodLogsQuery>): Promise<string[]> {
const { const {
pod, pod,
tabData: { tabData: {

View File

@ -17,8 +17,8 @@ import type { ItemObject } from "../../../common/item.store";
import type { SearchInputUrlProps } from "../input"; import type { SearchInputUrlProps } from "../input";
import { FilterType, pageFilters } from "./page-filters.store"; import { FilterType, pageFilters } from "./page-filters.store";
import { PageFiltersList } from "./page-filters-list"; import { PageFiltersList } from "./page-filters-list";
import type { NamespaceStore } from "../+namespaces/namespace-store/namespace.store"; import type { NamespaceStore } from "../+namespaces/store";
import namespaceStoreInjectable from "../+namespaces/namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "../+namespaces/store.injectable";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import itemListLayoutStorageInjectable from "./storage.injectable"; import itemListLayoutStorageInjectable from "./storage.injectable";
import { ItemListLayoutContent } from "./content"; import { ItemListLayoutContent } from "./content";

View File

@ -22,9 +22,9 @@ import { Dock } from "../../components/dock";
import { watchHistoryState } from "../../remote-helpers/history-updater"; import { watchHistoryState } from "../../remote-helpers/history-updater";
import { PortForwardDialog } from "../../port-forward"; import { PortForwardDialog } from "../../port-forward";
import { DeleteClusterDialog } from "../../components/delete-cluster-dialog"; import { DeleteClusterDialog } from "../../components/delete-cluster-dialog";
import type { NamespaceStore } from "../../components/+namespaces/namespace-store/namespace.store"; import type { NamespaceStore } from "../../components/+namespaces/store";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import namespaceStoreInjectable from "../../components/+namespaces/namespace-store/namespace-store.injectable"; import namespaceStoreInjectable from "../../components/+namespaces/store.injectable";
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api"; import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
import { disposer } from "../../utils"; import { disposer } from "../../utils";
import currentRouteComponentInjectable from "../../routes/current-route-component.injectable"; import currentRouteComponentInjectable from "../../routes/current-route-component.injectable";