From d8a5db93849943cb80a9f17286ebaf6d69220808 Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Tue, 17 Jun 2025 12:51:20 +0000 Subject: [PATCH] feat: add timing and logging for Docker container startup in InstanceService and PocketBaseService --- .../src/services/InstanceService/index.ts | 6 +++++- .../src/services/PocketBaseService/index.ts | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/pockethost/src/services/InstanceService/index.ts b/packages/pockethost/src/services/InstanceService/index.ts index 6599562b..9c69d76c 100644 --- a/packages/pockethost/src/services/InstanceService/index.ts +++ b/packages/pockethost/src/services/InstanceService/index.ts @@ -393,6 +393,10 @@ export const instanceService = mkSingleton( const start = now() const api = await (instanceApis[instance.id] = instanceApis[instance.id] || createInstanceApi(instance)).catch((e) => { + const end = now() + const duration = end - start + warn(`Container ${instance.id} failed to launch in ${duration}ms`) + throw new Error( `Could not launch container. Please review your instance logs at https://app.pockethost.io/app/instances/${instance.id} or contact support at https://pockethost.io/support. [${res.locals.requestId}]`, ) @@ -400,7 +404,7 @@ export const instanceService = mkSingleton( const end = now() const duration = end - start if (duration > 200) { - console.log(`Container ${instance.id} launch took ${duration}ms`) + warn(`Container ${instance.id} launch took ${duration}ms`) } const endRequest = api.startRequest() diff --git a/packages/pockethost/src/services/PocketBaseService/index.ts b/packages/pockethost/src/services/PocketBaseService/index.ts index a3a97dd4..6b4240c4 100644 --- a/packages/pockethost/src/services/PocketBaseService/index.ts +++ b/packages/pockethost/src/services/PocketBaseService/index.ts @@ -63,7 +63,7 @@ export const createPocketbaseService = async ( const _spawn = async (cfg: SpawnConfig) => { const cm = createCleanupManager() const logger = LoggerService().create('spawn') - const { dbg, warn, error } = logger + const { dbg, info, warn, error } = logger const _cfg: Required = { version: maxVersion, @@ -109,6 +109,12 @@ export const createPocketbaseService = async ( let stopped = false let stopping = false + // Add timing for container startup + const containerStartTime = Date.now() + info( + `[${instanceId}] Starting Docker container creation at ${new Date(containerStartTime).toISOString()}`, + ) + const container = await new Promise<{ on: EventEmitter['on'] kill: () => Promise @@ -218,6 +224,16 @@ export const createPocketbaseService = async ( }, ) .on('start', async (container: Container) => { + const containerReadyTime = Date.now() + const startupDuration = containerReadyTime - containerStartTime + + info( + `[${instanceId}] Docker container started at ${new Date(containerReadyTime).toISOString()}`, + ) + info( + `[${instanceId}] Container startup time: ${startupDuration}ms (${(startupDuration / 1000).toFixed(2)}s)`, + ) + dbg(`Got started container`, container) started = true