From 0a0950043967b5e62eea7e5c607b787bd19e583c Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Sun, 20 Nov 2022 04:20:31 -0800 Subject: [PATCH] chore: restore autocancellation --- packages/daemon/src/db/PbClient.ts | 5 -- packages/daemon/src/services/BackupService.ts | 13 ++- .../src/pocketbase/PocketbaseClient.ts | 4 - .../app/instances/[instanceId]/Restore.svelte | 83 +------------------ readme.md | 2 +- 5 files changed, 12 insertions(+), 95 deletions(-) diff --git a/packages/daemon/src/db/PbClient.ts b/packages/daemon/src/db/PbClient.ts index 491496ea..f550e93e 100644 --- a/packages/daemon/src/db/PbClient.ts +++ b/packages/daemon/src/db/PbClient.ts @@ -24,11 +24,6 @@ export const createPbClient = (url: string) => { ) const client = new PocketBase(url) - client.beforeSend = (url: string, reqConfig: { [_: string]: any }) => { - // dbg(reqConfig) - delete reqConfig.signal - return reqConfig - } const adminAuthViaEmail = safeCatch( `adminAuthViaEmail`, diff --git a/packages/daemon/src/services/BackupService.ts b/packages/daemon/src/services/BackupService.ts index 195eafc7..840d57ab 100644 --- a/packages/daemon/src/services/BackupService.ts +++ b/packages/daemon/src/services/BackupService.ts @@ -1,11 +1,13 @@ import { assertTruthy, + BackupRecord, BackupStatus, createTimerManager, InstanceBackupJobPayload, InstanceRestoreJobPayload, JobCommands, } from '@pockethost/common' +import Bottleneck from 'bottleneck' import { PocketbaseClientApi } from '../db/PbClient' import { backupInstance } from '../util/backupInstance' import { dbg } from '../util/dbg' @@ -60,6 +62,7 @@ export const createBackupService = async ( ) const tm = createTimerManager({}) + const limiter = new Bottleneck({ maxConcurrent: 1 }) tm.repeat(async () => { const backupRec = await client.getNextBackupJob() if (!backupRec) { @@ -67,8 +70,10 @@ export const createBackupService = async ( return true } const instance = await client.getInstance(backupRec.instanceId) + const _update = (fields: Partial) => + limiter.schedule(() => client.updateBackup(backupRec.id, fields)) try { - await client.updateBackup(backupRec.id, { + await _update({ status: BackupStatus.Running, }) let progress = backupRec.progress || {} @@ -78,12 +83,12 @@ export const createBackupService = async ( (_progress) => { progress = { ...progress, ..._progress } dbg(_progress) - return client.updateBackup(backupRec.id, { + return _update({ progress, }) } ) - await client.updateBackup(backupRec.id, { + await _update({ bytes, status: BackupStatus.FinishedSuccess, }) @@ -95,7 +100,7 @@ export const createBackupService = async ( } return s })() - await client.updateBackup(backupRec.id, { + await _update({ status: BackupStatus.FinishedError, message, }) diff --git a/packages/pockethost.io/src/pocketbase/PocketbaseClient.ts b/packages/pockethost.io/src/pocketbase/PocketbaseClient.ts index 4fa83810..8c7bddc6 100644 --- a/packages/pockethost.io/src/pocketbase/PocketbaseClient.ts +++ b/packages/pockethost.io/src/pocketbase/PocketbaseClient.ts @@ -39,10 +39,6 @@ export type PocketbaseClientApi = ReturnType export const createPocketbaseClient = (url: string) => { const client = new PocketBase(url) - client.beforeSend = (url, reqConfig) => { - delete reqConfig.signal - return reqConfig - } const { authStore } = client diff --git a/packages/pockethost.io/src/routes/app/instances/[instanceId]/Restore.svelte b/packages/pockethost.io/src/routes/app/instances/[instanceId]/Restore.svelte index 7f5f9355..d3f9839c 100644 --- a/packages/pockethost.io/src/routes/app/instances/[instanceId]/Restore.svelte +++ b/packages/pockethost.io/src/routes/app/instances/[instanceId]/Restore.svelte @@ -1,92 +1,13 @@

Restore

- {#if PUBLIC_APP_DOMAIN.toString().endsWith('.io')} - Contact support to perform a restore. - {/if} - {#if PUBLIC_APP_DOMAIN.toString().endsWith('.test')} - {#if $backups.length === 0} - You must create a backup first. - {/if} - {#if $backups.length > 0} - - -
-
- Notice: Your instance will be placed in maintenance mode and then backed up before - restoring the selected snapshot. -
- -
- {/if} - {/if} + Contact support to perform a restore.