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 { 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
|
||||
|
||||
@ -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 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();
|
||||
|
||||
@ -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", () => {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user