Changes to reset container workflow (#1155)

* reset changes

* undid config context changes

* renamed method
This commit is contained in:
Srinath Narayanan
2021-11-04 09:25:41 -07:00
committed by GitHub
parent e3d5ad2ce8
commit 5597a1e8b6
3 changed files with 34 additions and 36 deletions

View File

@@ -14,15 +14,27 @@ import { userContext } from "../UserContext";
import { getAuthorizationHeader } from "../Utils/AuthorizationUtils";
export class PhoenixClient {
public async containerConnectionInfo(
provisionData: IProvisionData
private containerHealthHandler: NodeJS.Timeout;
public async allocateContainer(provisionData: IProvisionData): Promise<IResponse<IPhoenixConnectionInfoResult>> {
return this.executeContainerAssignmentOperation(provisionData, "allocate");
}
public async resetContainer(provisionData: IProvisionData): Promise<IResponse<IPhoenixConnectionInfoResult>> {
return this.executeContainerAssignmentOperation(provisionData, "reset");
}
private async executeContainerAssignmentOperation(
provisionData: IProvisionData,
operation: string
): Promise<IResponse<IPhoenixConnectionInfoResult>> {
try {
const response = await window.fetch(`${this.getPhoenixContainerPoolingEndPoint()}/allocate`, {
const response = await fetch(`${this.getPhoenixContainerPoolingEndPoint()}/${operation}`, {
method: "POST",
headers: PhoenixClient.getHeaders(),
body: JSON.stringify(provisionData),
});
let data: IPhoenixConnectionInfoResult;
if (response.status === HttpStatusCodes.OK) {
data = await response.json();
@@ -38,12 +50,15 @@ export class PhoenixClient {
}
public async initiateContainerHeartBeat(containerData: { forwardingId: string; dbAccountName: string }) {
this.getContainerHealth(Notebook.containerStatusHeartbeatDelayMs, containerData);
if (this.containerHealthHandler) {
clearTimeout(this.containerHealthHandler);
}
await this.getContainerHealth(Notebook.containerStatusHeartbeatDelayMs, containerData);
}
private scheduleContainerHeartbeat(delayMs: number, containerData: IContainerData): void {
setTimeout(() => {
this.getContainerHealth(delayMs, containerData);
this.containerHealthHandler = setTimeout(async () => {
await this.getContainerHealth(delayMs, containerData);
}, delayMs);
}
@@ -79,14 +94,12 @@ export class PhoenixClient {
}
}
private getContainerHealth(delayMs: number, containerData: { forwardingId: string; dbAccountName: string }) {
this.getContainerStatusAsync(containerData)
.then((ContainerInfo) => useNotebook.getState().setContainerStatus(ContainerInfo))
.finally(() => {
if (useNotebook.getState().containerStatus?.status === ContainerStatusType.Active) {
this.scheduleContainerHeartbeat(delayMs, containerData);
}
});
private async getContainerHealth(delayMs: number, containerData: { forwardingId: string; dbAccountName: string }) {
const containerInfo = await this.getContainerStatusAsync(containerData);
useNotebook.getState().setContainerStatus(containerInfo);
if (useNotebook.getState().containerStatus?.status === ContainerStatusType.Active) {
this.scheduleContainerHeartbeat(delayMs, containerData);
}
}
public static getPhoenixEndpoint(): string {
@@ -104,6 +117,7 @@ export class PhoenixClient {
public getPhoenixContainerPoolingEndPoint(): string {
return `${PhoenixClient.getPhoenixEndpoint()}/api/controlplane/toolscontainer`;
}
private static getHeaders(): HeadersInit {
const authorizationHeader = getAuthorizationHeader();
return {