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:
parent
d620bf578c
commit
879fc04c7d
@ -93,7 +93,7 @@ export class ServicePortComponent extends React.Component<Props> {
|
|||||||
this.waiting = true;
|
this.waiting = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// determine how many port-forwards are already active
|
// determine how many port-forwards already exist
|
||||||
const { length } = await getPortForwards();
|
const { length } = await getPortForwards();
|
||||||
|
|
||||||
this.forwardPort = await addPortForward(portForward);
|
this.forwardPort = await addPortForward(portForward);
|
||||||
|
|||||||
@ -97,7 +97,7 @@ export class PodContainerPort extends React.Component<Props> {
|
|||||||
this.waiting = true;
|
this.waiting = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// determine how many port-forwards are already active
|
// determine how many port-forwards already exist
|
||||||
const { length } = await getPortForwards();
|
const { length } = await getPortForwards();
|
||||||
|
|
||||||
this.forwardPort = await addPortForward(portForward);
|
this.forwardPort = await addPortForward(portForward);
|
||||||
|
|||||||
@ -96,7 +96,7 @@ export class PortForwardDialog extends Component<Props> {
|
|||||||
const { currentPort, desiredPort, close } = this;
|
const { currentPort, desiredPort, close } = this;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// determine how many port-forwards are already active
|
// determine how many port-forwards already exist
|
||||||
const { length } = await getPortForwards();
|
const { length } = await getPortForwards();
|
||||||
|
|
||||||
let port: number;
|
let port: number;
|
||||||
|
|||||||
@ -32,7 +32,7 @@ import { Notifications } from "../components/notifications";
|
|||||||
export class PortForwardStore extends ItemStore<PortForwardItem> {
|
export class PortForwardStore extends ItemStore<PortForwardItem> {
|
||||||
private storage = createStorage<ForwardedPort[] | undefined>("port_forwards", undefined);
|
private storage = createStorage<ForwardedPort[] | undefined>("port_forwards", undefined);
|
||||||
|
|
||||||
@observable portForwards: PortForwardItem[];
|
@observable portForwards: PortForwardItem[] = [];
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
@ -103,10 +103,31 @@ interface PortForwardsResult {
|
|||||||
portForwards: ForwardedPort[];
|
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> {
|
export async function addPortForward(portForward: ForwardedPort): Promise<number> {
|
||||||
const { port, forwardPort } = portForward;
|
const { port, forwardPort } = portForward;
|
||||||
let response: PortForwardResult;
|
let response: PortForwardResult;
|
||||||
|
|
||||||
|
const pf = findPortForward(portForward);
|
||||||
|
|
||||||
|
if (pf) {
|
||||||
|
return pf.forwardPort;
|
||||||
|
}
|
||||||
|
|
||||||
if (!portForward.status) {
|
if (!portForward.status) {
|
||||||
portForward.status = "Active";
|
portForward.status = "Active";
|
||||||
}
|
}
|
||||||
@ -121,6 +142,7 @@ export async function addPortForward(portForward: ForwardedPort): Promise<number
|
|||||||
if (portForward.forwardPort && response?.port && response.port != +portForward.forwardPort) {
|
if (portForward.forwardPort && response?.port && response.port != +portForward.forwardPort) {
|
||||||
logger.warn(`[PORT-FORWARD-STORE] specified ${portForward.forwardPort} got ${response.port}`);
|
logger.warn(`[PORT-FORWARD-STORE] specified ${portForward.forwardPort} got ${response.port}`);
|
||||||
}
|
}
|
||||||
|
portForward.forwardPort = response.port;
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn("[PORT-FORWARD-STORE] Error starting port-forward:", error, portForward);
|
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;
|
return response?.port;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getPortForward(portForward: ForwardedPort): Promise<number> {
|
export async function getActivePortForward(portForward: ForwardedPort): Promise<number> {
|
||||||
const { port, forwardPort, protocol } = portForward;
|
const { port, forwardPort, protocol } = portForward;
|
||||||
let response: PortForwardResult;
|
let response: PortForwardResult;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
response = await apiBase.get<PortForwardResult>(`/pods/port-forward/${portForward.namespace}/${portForward.kind}/${portForward.name}`, { query: { port, forwardPort, protocol }});
|
response = await apiBase.get<PortForwardResult>(`/pods/port-forward/${portForward.namespace}/${portForward.kind}/${portForward.name}`, { query: { port, forwardPort, protocol }});
|
||||||
} catch (error) {
|
} 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);
|
throw (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response?.port;
|
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> {
|
export async function modifyPortForward(portForward: ForwardedPort, desiredPort: number): Promise<number> {
|
||||||
let port = 0;
|
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;
|
const { port, forwardPort } = portForward;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await apiBase.del(`/pods/port-forward/${portForward.namespace}/${portForward.kind}/${portForward.name}`, { query: { port, forwardPort }});
|
await apiBase.del(`/pods/port-forward/${portForward.namespace}/${portForward.kind}/${portForward.name}`, { query: { port, forwardPort }});
|
||||||
await waitUntilFree(+forwardPort, 200, 1000);
|
await waitUntilFree(+forwardPort, 200, 1000);
|
||||||
} catch (error) {
|
} 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);
|
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 {
|
try {
|
||||||
const response = await apiBase.get<PortForwardsResult>("/pods/port-forwards", { query: { clusterId }});
|
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();
|
export const portForwardStore = new PortForwardStore();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user