mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Convert network online/offline to injectable IPC
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
0fd48affd8
commit
b0ff941314
@ -17,12 +17,9 @@ import { when } from "mobx";
|
|||||||
import type { Logger } from "../logger";
|
import type { Logger } from "../logger";
|
||||||
import type { FindExtensionInstanceByName } from "../../features/extensions/loader/common/find-instance-by-name.injectable";
|
import type { FindExtensionInstanceByName } from "../../features/extensions/loader/common/find-instance-by-name.injectable";
|
||||||
|
|
||||||
// IPC channel for protocol actions. Main broadcasts the open-url events to this channel.
|
export const ProtocolHandlerInternal = `protocol-handler:internal`;
|
||||||
export const ProtocolHandlerIpcPrefix = "protocol-handler";
|
export const ProtocolHandlerExtension = `protocol-handler:extension`;
|
||||||
|
export const ProtocolHandlerInvalid = `protocol-handler:invalid`;
|
||||||
export const ProtocolHandlerInternal = `${ProtocolHandlerIpcPrefix}:internal`;
|
|
||||||
export const ProtocolHandlerExtension = `${ProtocolHandlerIpcPrefix}:extension`;
|
|
||||||
export const ProtocolHandlerInvalid = `${ProtocolHandlerIpcPrefix}:invalid`;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* These two names are long and cumbersome by design so as to decrease the chances
|
* These two names are long and cumbersome by design so as to decrease the chances
|
||||||
|
|||||||
@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* 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 prefixedLoggerInjectable from "../../../../common/logger/prefixed-logger.injectable";
|
||||||
|
|
||||||
|
const clusterManagerLoggerInjectable = getInjectable({
|
||||||
|
id: "cluster-manager-logger",
|
||||||
|
instantiate: (di) => di.inject(prefixedLoggerInjectable, "CLUSTER-MANAGER"),
|
||||||
|
});
|
||||||
|
|
||||||
|
export default clusterManagerLoggerInjectable;
|
||||||
14
packages/core/src/features/network/common/channels.ts
Normal file
14
packages/core/src/features/network/common/channels.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type { MessageChannel } from "../../../common/utils/channel/message-channel-listener-injection-token";
|
||||||
|
|
||||||
|
export const networkGoneOnlineChannel: MessageChannel<void> = {
|
||||||
|
id: "network-gone-online",
|
||||||
|
};
|
||||||
|
|
||||||
|
export const networkGoneOfflineChannel: MessageChannel<void> = {
|
||||||
|
id: "network-gone-offline",
|
||||||
|
};
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import clusterStoreInjectable from "../../../common/cluster-store/cluster-store.injectable";
|
||||||
|
import { getMessageChannelListenerInjectable } from "../../../common/utils/channel/message-channel-listener-injection-token";
|
||||||
|
import clusterManagerLoggerInjectable from "../../cluster/manager/common/logger.injectable";
|
||||||
|
import { networkGoneOfflineChannel } from "../common/channels";
|
||||||
|
|
||||||
|
const networkGoneOfflineListenerInjectable = getMessageChannelListenerInjectable({
|
||||||
|
channel: networkGoneOfflineChannel,
|
||||||
|
id: "main",
|
||||||
|
handler: (di) => {
|
||||||
|
const logger = di.inject(clusterManagerLoggerInjectable);
|
||||||
|
const store = di.inject(clusterStoreInjectable);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
logger.info("network is online");
|
||||||
|
|
||||||
|
for (const cluster of store.clusters.values()) {
|
||||||
|
if (!cluster.disconnected) {
|
||||||
|
cluster.online = false;
|
||||||
|
cluster.accessible = false;
|
||||||
|
void cluster.refreshConnectionStatus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default networkGoneOfflineListenerInjectable;
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import clusterStoreInjectable from "../../../common/cluster-store/cluster-store.injectable";
|
||||||
|
import { getMessageChannelListenerInjectable } from "../../../common/utils/channel/message-channel-listener-injection-token";
|
||||||
|
import clusterManagerLoggerInjectable from "../../cluster/manager/common/logger.injectable";
|
||||||
|
import { networkGoneOnlineChannel } from "../common/channels";
|
||||||
|
|
||||||
|
const networkGoneOnlineListenerInjectable = getMessageChannelListenerInjectable({
|
||||||
|
channel: networkGoneOnlineChannel,
|
||||||
|
id: "main",
|
||||||
|
handler: (di) => {
|
||||||
|
const logger = di.inject(clusterManagerLoggerInjectable);
|
||||||
|
const store = di.inject(clusterStoreInjectable);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
logger.info("network is online");
|
||||||
|
|
||||||
|
for (const cluster of store.clusters.values()) {
|
||||||
|
if (!cluster.disconnected) {
|
||||||
|
void cluster.refreshConnectionStatus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default networkGoneOnlineListenerInjectable;
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* 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 { beforeMainFrameStartsFirstInjectionToken } from "../../../renderer/before-frame-starts/tokens";
|
||||||
|
import setupEmittingNetworkStateInjectable from "./setup-emiting-network-state.injectable";
|
||||||
|
|
||||||
|
const runSetupEmitNetworkStateInjectable = getInjectable({
|
||||||
|
id: "run-setup-emit-network-state",
|
||||||
|
instantiate: (di) => ({
|
||||||
|
id: "run-setup-emit-network-state",
|
||||||
|
run: () => {
|
||||||
|
const setupEmittingNetworkState = di.inject(setupEmittingNetworkStateInjectable);
|
||||||
|
|
||||||
|
setupEmittingNetworkState();
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
injectionToken: beforeMainFrameStartsFirstInjectionToken,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default runSetupEmitNetworkStateInjectable;
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* 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 { sendMessageToChannelInjectionToken } from "../../../common/utils/channel/message-to-channel-injection-token";
|
||||||
|
import { networkGoneOfflineChannel } from "../common/channels";
|
||||||
|
|
||||||
|
const sendNetworkGoneOfflineInjectable = getInjectable({
|
||||||
|
id: "send-network-gone-offline",
|
||||||
|
instantiate: (di) => {
|
||||||
|
const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken);
|
||||||
|
|
||||||
|
return () => sendMessageToChannel(networkGoneOfflineChannel);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default sendNetworkGoneOfflineInjectable;
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* 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 { sendMessageToChannelInjectionToken } from "../../../common/utils/channel/message-to-channel-injection-token";
|
||||||
|
import { networkGoneOnlineChannel } from "../common/channels";
|
||||||
|
|
||||||
|
const sendNetworkGoneOnlineInjectable = getInjectable({
|
||||||
|
id: "send-network-gone-online",
|
||||||
|
instantiate: (di) => {
|
||||||
|
const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken);
|
||||||
|
|
||||||
|
return () => sendMessageToChannel(networkGoneOnlineChannel);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default sendNetworkGoneOnlineInjectable;
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { getGlobalOverride } from "../../../common/test-utils/get-global-override";
|
||||||
|
import setupEmittingNetworkStateInjectable from "./setup-emiting-network-state.injectable";
|
||||||
|
|
||||||
|
export default getGlobalOverride(setupEmittingNetworkStateInjectable, () => () => {});
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* 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 sendNetworkGoneOfflineInjectable from "./send-network-offline.injectable";
|
||||||
|
import sendNetworkGoneOnlineInjectable from "./send-network-online.injectable";
|
||||||
|
|
||||||
|
const setupEmittingNetworkStateInjectable = getInjectable({
|
||||||
|
id: "setup-emitting-network-state",
|
||||||
|
instantiate: (di) => {
|
||||||
|
const sendNetworkGoneOnline = di.inject(sendNetworkGoneOnlineInjectable);
|
||||||
|
const sendNetworkGoneOffline = di.inject(sendNetworkGoneOfflineInjectable);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window.addEventListener("offline", sendNetworkGoneOnline);
|
||||||
|
window.addEventListener("online", sendNetworkGoneOffline);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
causesSideEffects: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default setupEmittingNetworkStateInjectable;
|
||||||
@ -10,7 +10,6 @@ import type { Cluster } from "../../common/cluster/cluster";
|
|||||||
import { isErrnoException } from "../../common/utils";
|
import { isErrnoException } from "../../common/utils";
|
||||||
import type { KubernetesClusterPrometheusMetrics } from "../../common/catalog-entities/kubernetes-cluster";
|
import type { KubernetesClusterPrometheusMetrics } from "../../common/catalog-entities/kubernetes-cluster";
|
||||||
import { isKubernetesCluster, KubernetesCluster, LensKubernetesClusterStatus } from "../../common/catalog-entities/kubernetes-cluster";
|
import { isKubernetesCluster, KubernetesCluster, LensKubernetesClusterStatus } from "../../common/catalog-entities/kubernetes-cluster";
|
||||||
import { ipcMainOn } from "../../common/ipc";
|
|
||||||
import { once } from "lodash";
|
import { once } from "lodash";
|
||||||
import type { ClusterStore } from "../../common/cluster-store/cluster-store";
|
import type { ClusterStore } from "../../common/cluster-store/cluster-store";
|
||||||
import type { ClusterId } from "../../common/cluster-types";
|
import type { ClusterId } from "../../common/cluster-types";
|
||||||
@ -72,9 +71,6 @@ export class ClusterManager {
|
|||||||
this.updateEntityStatus(this.dependencies.catalogEntityRegistry.findById(change.newValue) as KubernetesCluster);
|
this.updateEntityStatus(this.dependencies.catalogEntityRegistry.findById(change.newValue) as KubernetesCluster);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcMainOn("network:offline", this.onNetworkOffline);
|
|
||||||
ipcMainOn("network:online", this.onNetworkOnline);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@action
|
@action
|
||||||
@ -233,26 +229,6 @@ export class ClusterManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected onNetworkOffline = () => {
|
|
||||||
this.dependencies.logger.info(`${logPrefix} network is offline`);
|
|
||||||
this.dependencies.store.clustersList.forEach((cluster) => {
|
|
||||||
if (!cluster.disconnected) {
|
|
||||||
cluster.online = false;
|
|
||||||
cluster.accessible = false;
|
|
||||||
cluster.refreshConnectionStatus().catch((e) => e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
protected onNetworkOnline = () => {
|
|
||||||
this.dependencies.logger.info(`${logPrefix} network is online`);
|
|
||||||
this.dependencies.store.clustersList.forEach((cluster) => {
|
|
||||||
if (!cluster.disconnected) {
|
|
||||||
cluster.refreshConnectionStatus().catch((e) => e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
stop() {
|
stop() {
|
||||||
this.dependencies.store.clusters.forEach((cluster: Cluster) => {
|
this.dependencies.store.clusters.forEach((cluster: Cluster) => {
|
||||||
cluster.disconnect();
|
cluster.disconnect();
|
||||||
|
|||||||
@ -7,7 +7,6 @@ import bindProtocolAddRouteHandlersInjectable from "../../protocol-handler/bind-
|
|||||||
import lensProtocolRouterRendererInjectable from "../../protocol-handler/lens-protocol-router-renderer/lens-protocol-router-renderer.injectable";
|
import lensProtocolRouterRendererInjectable from "../../protocol-handler/lens-protocol-router-renderer/lens-protocol-router-renderer.injectable";
|
||||||
import registerIpcListenersInjectable from "../../ipc/register-ipc-listeners.injectable";
|
import registerIpcListenersInjectable from "../../ipc/register-ipc-listeners.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import { broadcastMessage } from "../../../common/ipc";
|
|
||||||
import unmountRootComponentInjectable from "../../window/unmount-root-component.injectable";
|
import unmountRootComponentInjectable from "../../window/unmount-root-component.injectable";
|
||||||
|
|
||||||
const initRootFrameInjectable = getInjectable({
|
const initRootFrameInjectable = getInjectable({
|
||||||
@ -23,13 +22,6 @@ const initRootFrameInjectable = getInjectable({
|
|||||||
lensProtocolRouterRenderer.init();
|
lensProtocolRouterRenderer.init();
|
||||||
|
|
||||||
bindProtocolAddRouteHandlers();
|
bindProtocolAddRouteHandlers();
|
||||||
|
|
||||||
window.addEventListener("offline", () =>
|
|
||||||
broadcastMessage("network:offline"),
|
|
||||||
);
|
|
||||||
|
|
||||||
window.addEventListener("online", () => broadcastMessage("network:online"));
|
|
||||||
|
|
||||||
registerIpcListeners();
|
registerIpcListeners();
|
||||||
|
|
||||||
window.addEventListener("beforeunload", () => {
|
window.addEventListener("beforeunload", () => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user