1
0
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:
Sebastian Malton 2023-02-17 15:14:57 -05:00
parent 0fd48affd8
commit b0ff941314
12 changed files with 180 additions and 38 deletions

View File

@ -17,12 +17,9 @@ import { when } from "mobx";
import type { Logger } from "../logger";
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 ProtocolHandlerIpcPrefix = "protocol-handler";
export const ProtocolHandlerInternal = `${ProtocolHandlerIpcPrefix}:internal`;
export const ProtocolHandlerExtension = `${ProtocolHandlerIpcPrefix}:extension`;
export const ProtocolHandlerInvalid = `${ProtocolHandlerIpcPrefix}:invalid`;
export const ProtocolHandlerInternal = `protocol-handler:internal`;
export const ProtocolHandlerExtension = `protocol-handler:extension`;
export const ProtocolHandlerInvalid = `protocol-handler:invalid`;
/**
* These two names are long and cumbersome by design so as to decrease the chances

View File

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

View 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",
};

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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, () => () => {});

View File

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

View File

@ -10,7 +10,6 @@ import type { Cluster } from "../../common/cluster/cluster";
import { isErrnoException } from "../../common/utils";
import type { KubernetesClusterPrometheusMetrics } 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 type { ClusterStore } from "../../common/cluster-store/cluster-store";
import type { ClusterId } from "../../common/cluster-types";
@ -72,9 +71,6 @@ export class ClusterManager {
this.updateEntityStatus(this.dependencies.catalogEntityRegistry.findById(change.newValue) as KubernetesCluster);
}
});
ipcMainOn("network:offline", this.onNetworkOffline);
ipcMainOn("network:online", this.onNetworkOnline);
});
@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() {
this.dependencies.store.clusters.forEach((cluster: Cluster) => {
cluster.disconnect();

View File

@ -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 registerIpcListenersInjectable from "../../ipc/register-ipc-listeners.injectable";
import loggerInjectable from "../../../common/logger.injectable";
import { broadcastMessage } from "../../../common/ipc";
import unmountRootComponentInjectable from "../../window/unmount-root-component.injectable";
const initRootFrameInjectable = getInjectable({
@ -23,13 +22,6 @@ const initRootFrameInjectable = getInjectable({
lensProtocolRouterRenderer.init();
bindProtocolAddRouteHandlers();
window.addEventListener("offline", () =>
broadcastMessage("network:offline"),
);
window.addEventListener("online", () => broadcastMessage("network:online"));
registerIpcListeners();
window.addEventListener("beforeunload", () => {