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

more work

Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com>
This commit is contained in:
Jim Ehrismann 2021-12-06 12:15:17 -05:00
parent d620bf578c
commit 879fc04c7d
4 changed files with 96 additions and 9 deletions

View File

@ -93,7 +93,7 @@ export class ServicePortComponent extends React.Component<Props> {
this.waiting = true;
try {
// determine how many port-forwards are already active
// determine how many port-forwards already exist
const { length } = await getPortForwards();
this.forwardPort = await addPortForward(portForward);

View File

@ -97,7 +97,7 @@ export class PodContainerPort extends React.Component<Props> {
this.waiting = true;
try {
// determine how many port-forwards are already active
// determine how many port-forwards already exist
const { length } = await getPortForwards();
this.forwardPort = await addPortForward(portForward);

View File

@ -96,7 +96,7 @@ export class PortForwardDialog extends Component<Props> {
const { currentPort, desiredPort, close } = this;
try {
// determine how many port-forwards are already active
// determine how many port-forwards already exist
const { length } = await getPortForwards();
let port: number;

View File

@ -32,7 +32,7 @@ import { Notifications } from "../components/notifications";
export class PortForwardStore extends ItemStore<PortForwardItem> {
private storage = createStorage<ForwardedPort[] | undefined>("port_forwards", undefined);
@observable portForwards: PortForwardItem[];
@observable portForwards: PortForwardItem[] = [];
constructor() {
super();
@ -103,10 +103,31 @@ interface PortForwardsResult {
portForwards: ForwardedPort[];
}
function portForwardsEqual(portForward: ForwardedPort) {
return (pf: ForwardedPort) => (
pf.clusterId == portForward.clusterId &&
pf.kind == portForward.kind &&
pf.name == portForward.name &&
pf.namespace == portForward.namespace &&
pf.port == portForward.port
);
}
function findPortForward(portForward: ForwardedPort) {
return (portForwardStore.portForwards.find(portForwardsEqual(portForward)));
}
export async function addPortForward(portForward: ForwardedPort): Promise<number> {
const { port, forwardPort } = portForward;
let response: PortForwardResult;
const pf = findPortForward(portForward);
if (pf) {
return pf.forwardPort;
}
if (!portForward.status) {
portForward.status = "Active";
}
@ -121,6 +142,7 @@ export async function addPortForward(portForward: ForwardedPort): Promise<number
if (portForward.forwardPort && response?.port && response.port != +portForward.forwardPort) {
logger.warn(`[PORT-FORWARD-STORE] specified ${portForward.forwardPort} got ${response.port}`);
}
portForward.forwardPort = response.port;
}
} catch (error) {
logger.warn("[PORT-FORWARD-STORE] Error starting port-forward:", error, portForward);
@ -133,20 +155,45 @@ export async function addPortForward(portForward: ForwardedPort): Promise<number
return response?.port;
}
export async function getPortForward(portForward: ForwardedPort): Promise<number> {
export async function getActivePortForward(portForward: ForwardedPort): Promise<number> {
const { port, forwardPort, protocol } = portForward;
let response: PortForwardResult;
try {
response = await apiBase.get<PortForwardResult>(`/pods/port-forward/${portForward.namespace}/${portForward.kind}/${portForward.name}`, { query: { port, forwardPort, protocol }});
} catch (error) {
logger.warn("[PORT-FORWARD-STORE] Error getting port-forward:", error, portForward);
logger.warn("[PORT-FORWARD-STORE] Error getting active port-forward:", error, portForward);
throw (error);
}
return response?.port;
}
export async function getPortForward(portForward: ForwardedPort): Promise<number> {
const pf = findPortForward(portForward);
if (!pf) {
const error = new Error("port-forward not found");
logger.warn("[PORT-FORWARD-STORE] Error getting port-forward:", error, portForward);
throw (error);
}
let port = pf.port;
try {
port = await getActivePortForward(portForward);
pf.status = "Active";
pf.forwardPort = port;
} catch (error) {
// port is not active
pf.status = "Disabled";
}
return port;
}
export async function modifyPortForward(portForward: ForwardedPort, desiredPort: number): Promise<number> {
let port = 0;
@ -158,19 +205,40 @@ export async function modifyPortForward(portForward: ForwardedPort, desiredPort:
}
export async function removePortForward(portForward: ForwardedPort) {
export async function removeActivePortForward(portForward: ForwardedPort) {
const { port, forwardPort } = portForward;
try {
await apiBase.del(`/pods/port-forward/${portForward.namespace}/${portForward.kind}/${portForward.name}`, { query: { port, forwardPort }});
await waitUntilFree(+forwardPort, 200, 1000);
} catch (error) {
logger.warn("[PORT-FORWARD-STORE] Error removing port-forward:", error, portForward);
logger.warn("[PORT-FORWARD-STORE] Error removing active port-forward:", error, portForward);
throw (error);
}
}
export async function getPortForwards(clusterId?: string): Promise<ForwardedPort[]> {
export async function removePortForward(portForward: ForwardedPort) {
const pf = findPortForward(portForward);
if (!pf) {
const error = new Error("port-forward not found");
logger.warn("[PORT-FORWARD-STORE] Error getting port-forward:", error, portForward);
throw (error);
}
try {
await removeActivePortForward(portForward);
} catch (error) {
if (pf.status === "Active") {
logger.warn("[PORT-FORWARD-STORE] Error removing port-forward:", error, portForward);
}
}
portForwardStore.portForwards.filter(item => item !== pf);
console.log("portForwards:", portForwardStore.portForwards);
}
export async function getActivePortForwards(clusterId?: string): Promise<ForwardedPort[]> {
try {
const response = await apiBase.get<PortForwardsResult>("/pods/port-forwards", { query: { clusterId }});
@ -182,4 +250,23 @@ export async function getPortForwards(clusterId?: string): Promise<ForwardedPort
}
}
export async function getPortForwards(clusterId?: string): Promise<ForwardedPort[]> {
try {
// get the active port-forwards to update the status
const activePortForwards = await getActivePortForwards(clusterId);
portForwardStore.portForwards.map((item, index) => {
if (activePortForwards.find(portForwardsEqual(item))) {
portForwardStore.portForwards[index].status = "Active";
} else {
portForwardStore.portForwards[index].status = "Disabled";
}
});
} catch (error) {
logger.warn("[PORT-FORWARD-STORE] Error getting all active port-forwards:", error);
}
return portForwardStore.portForwards;
}
export const portForwardStore = new PortForwardStore();