mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Add guards to prevent activation errors slipping through (#5845)
* Add guards to prevent activation errors slipping through Signed-off-by: Sebastian Malton <sebastian@malton.name> * Make sure all logging has a message, output less errors when prometheus fails Signed-off-by: Sebastian Malton <sebastian@malton.name> * Improve logging from getPortFromStream Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
0d2aea0101
commit
81c18a6cad
@ -340,15 +340,35 @@ export class Cluster implements ClusterModel, ClusterState {
|
||||
}
|
||||
|
||||
if (this.disconnected || !this.accessible) {
|
||||
try {
|
||||
this.broadcastConnectUpdate("Starting connection ...");
|
||||
await this.reconnect();
|
||||
} catch (error) {
|
||||
this.broadcastConnectUpdate(`Failed to start connection: ${error}`, true);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
this.broadcastConnectUpdate("Refreshing connection status ...");
|
||||
await this.refreshConnectionStatus();
|
||||
} catch (error) {
|
||||
this.broadcastConnectUpdate(`Failed to connection status: ${error}`, true);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.accessible) {
|
||||
try {
|
||||
this.broadcastConnectUpdate("Refreshing cluster accessibility ...");
|
||||
await this.refreshAccessibility();
|
||||
} catch (error) {
|
||||
this.broadcastConnectUpdate(`Failed to refresh accessibility: ${error}`, true);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// download kubectl in background, so it's not blocking dashboard
|
||||
this.ensureKubectl()
|
||||
.catch(error => this.dependencies.logger.warn(`[CLUSTER]: failed to download kubectl for clusterId=${this.id}`, error));
|
||||
|
||||
@ -78,4 +78,4 @@ export default winston.createLogger({
|
||||
format.simple(),
|
||||
),
|
||||
transports,
|
||||
});
|
||||
}) as Logger;
|
||||
|
||||
@ -16,7 +16,10 @@ import { TypedRegEx } from "typed-regex";
|
||||
import type { Spawn } from "../child-process/spawn.injectable";
|
||||
import type { Logger } from "../../common/logger";
|
||||
|
||||
const startingServeRegex = TypedRegEx("starting to serve on (?<address>.+)", "i");
|
||||
const startingServeMatcher = "starting to serve on (?<address>.+)";
|
||||
const startingServeRegex = Object.assign(TypedRegEx(startingServeMatcher, "i"), {
|
||||
rawMatcher: startingServeMatcher,
|
||||
});
|
||||
|
||||
export interface KubeAuthProxyDependencies {
|
||||
readonly proxyBinPath: string;
|
||||
|
||||
@ -132,8 +132,7 @@ export class Kubectl {
|
||||
|
||||
return this.path;
|
||||
} catch (err) {
|
||||
logger.error("Failed to ensure kubectl, fallback to the bundled version");
|
||||
logger.error(err);
|
||||
logger.error("Failed to ensure kubectl, fallback to the bundled version", err);
|
||||
|
||||
return this.getBundledPath();
|
||||
}
|
||||
@ -146,7 +145,7 @@ export class Kubectl {
|
||||
|
||||
return this.dirname;
|
||||
} catch (err) {
|
||||
logger.error(err);
|
||||
logger.error("Failed to get biniary directory", err);
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
@ -31,11 +31,11 @@ const loadMetricsFor = (getMetrics: GetMetrics) => async (promQueries: string[],
|
||||
} catch (error) {
|
||||
if (isRequestError(error)) {
|
||||
if (lastAttempt || (error.statusCode && error.statusCode >= 400 && error.statusCode < 500)) {
|
||||
logger.error("[Metrics]: metrics not available", error?.response ? error.response?.body : error);
|
||||
throw new Error("Metrics not available");
|
||||
throw new Error("Metrics not available", { cause: error });
|
||||
}
|
||||
} else if (error instanceof Error) {
|
||||
throw new Error("Metrics not available", { cause: error });
|
||||
} else {
|
||||
logger.error("[Metrics]: metrics not available", error);
|
||||
throw new Error("Metrics not available");
|
||||
}
|
||||
|
||||
|
||||
@ -9,7 +9,10 @@ import { spawn } from "child_process";
|
||||
import * as tcpPortUsed from "tcp-port-used";
|
||||
import { TypedRegEx } from "typed-regex";
|
||||
|
||||
const internalPortRegex = TypedRegEx("^forwarding from (?<address>.+) ->", "i");
|
||||
const internalPortMatcher = "^forwarding from (?<address>.+) ->";
|
||||
const internalPortRegex = Object.assign(TypedRegEx(internalPortMatcher, "i"), {
|
||||
rawMatcher: internalPortMatcher,
|
||||
});
|
||||
|
||||
export interface PortForwardArgs {
|
||||
clusterId: string;
|
||||
|
||||
@ -20,6 +20,7 @@ interface GetPortArgs {
|
||||
};
|
||||
raw?: RegExpExecArray;
|
||||
};
|
||||
rawMatcher: string;
|
||||
};
|
||||
/**
|
||||
* Called when the port is found
|
||||
@ -27,7 +28,7 @@ interface GetPortArgs {
|
||||
onFind?: () => void;
|
||||
/**
|
||||
* Timeout for how long to wait for the port.
|
||||
* Default: 5s
|
||||
* Default: 15s
|
||||
*/
|
||||
timeout?: number;
|
||||
}
|
||||
@ -61,7 +62,7 @@ export function getPortFrom(stream: Readable, args: GetPortArgs): Promise<number
|
||||
};
|
||||
const timeoutID = setTimeout(() => {
|
||||
stream.off("data", handler);
|
||||
logger.warn(`[getPortFrom]: failed to retrieve port via ${args.lineRegex.toString()}: ${logLines}`);
|
||||
logger.warn(`[getPortFrom]: failed to retrieve port via ${args.lineRegex.rawMatcher}`, logLines);
|
||||
reject(new Error("failed to retrieve port from stream"));
|
||||
}, args.timeout ?? 15000);
|
||||
|
||||
|
||||
@ -121,7 +121,7 @@ export class ThemeStore {
|
||||
try {
|
||||
this.applyActiveTheme();
|
||||
} catch (err) {
|
||||
logger.error(err);
|
||||
logger.error(`Failed to apply active theme: ${err}`);
|
||||
this.dependencies.userStore.resetTheme();
|
||||
}
|
||||
}, {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user