add health request time out of 10 seconds
This commit is contained in:
parent
0e533b5d26
commit
53e6cf959c
3 changed files with 20 additions and 3 deletions
|
@ -6,6 +6,7 @@ import * as dayjs from "dayjs";
|
||||||
import * as localizedFormat from "dayjs/plugin/localizedFormat";
|
import * as localizedFormat from "dayjs/plugin/localizedFormat";
|
||||||
import { healthTooltips } from "../../appwrite/Health";
|
import { healthTooltips } from "../../appwrite/Health";
|
||||||
import { AppwriteHealth } from "../../appwrite";
|
import { AppwriteHealth } from "../../appwrite";
|
||||||
|
import { promiseWithTimeout } from "../../utils/promiseWithTimeout";
|
||||||
// dayjs.extend(relativeTime);
|
// dayjs.extend(relativeTime);
|
||||||
dayjs.extend(localizedFormat);
|
dayjs.extend(localizedFormat);
|
||||||
|
|
||||||
|
@ -27,14 +28,16 @@ export class HealthTreeItemProvider implements vscode.TreeDataProvider<vscode.Tr
|
||||||
}
|
}
|
||||||
|
|
||||||
async getChildren(element?: HealthTreeItem): Promise<vscode.TreeItem[]> {
|
async getChildren(element?: HealthTreeItem): Promise<vscode.TreeItem[]> {
|
||||||
|
|
||||||
if (healthClient === undefined) {
|
if (healthClient === undefined) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
// get children for root
|
// get children for root
|
||||||
if (element === undefined) {
|
if (element === undefined) {
|
||||||
const health = await healthClient.checkup();
|
const health = await promiseWithTimeout<AppwriteHealth | undefined>(10000, async () => await healthClient?.checkup(), 'Health request timed out');
|
||||||
|
if (health === undefined) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
ext.outputChannel?.append(JSON.stringify(health, null, 4));
|
ext.outputChannel?.append(JSON.stringify(health, null, 4));
|
||||||
const healthItems = Object.entries(health).map(([service, status]) => {
|
const healthItems = Object.entries(health).map(([service, status]) => {
|
||||||
return new HealthTreeItem(service, status, healthTooltips[service as keyof AppwriteHealth]);
|
return new HealthTreeItem(service, status, healthTooltips[service as keyof AppwriteHealth]);
|
||||||
|
|
|
@ -34,7 +34,10 @@ export async function addProjectWizard(): Promise<AppwriteProjectConfiguration |
|
||||||
{ label: "Yes", description: "If running Appwrite on localhost, or local IP" },
|
{ label: "Yes", description: "If running Appwrite on localhost, or local IP" },
|
||||||
{ label: "No", description: "If connecting to a remote Appwrite instance" },
|
{ label: "No", description: "If connecting to a remote Appwrite instance" },
|
||||||
],
|
],
|
||||||
{ placeHolder: "Allow communication with self-signed SSL certificates? (Select 'Yes' for connecting to Appwrite on localhost)" }
|
{
|
||||||
|
placeHolder: "Allow communication with self-signed SSL certificates? (Select 'Yes' for connecting to Appwrite on localhost)",
|
||||||
|
ignoreFocusOut: true,
|
||||||
|
}
|
||||||
);
|
);
|
||||||
if (selfSigned === undefined) {
|
if (selfSigned === undefined) {
|
||||||
return;
|
return;
|
||||||
|
|
11
src/utils/promiseWithTimeout.ts
Normal file
11
src/utils/promiseWithTimeout.ts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
export const promiseWithTimeout = <T>(timeoutMs: number, promise: () => Promise<T>, failureMessage?: string): Promise<T> => {
|
||||||
|
let timeoutHandle: NodeJS.Timeout;
|
||||||
|
const timeoutPromise = new Promise<never>((resolve, reject) => {
|
||||||
|
timeoutHandle = setTimeout(() => reject(new Error(failureMessage)), timeoutMs);
|
||||||
|
});
|
||||||
|
|
||||||
|
return Promise.race([promise(), timeoutPromise]).then((result) => {
|
||||||
|
clearTimeout(timeoutHandle);
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
};
|
Loading…
Reference in a new issue