private async getContainerLogs()

in app/lib/server/processors/DockerJobExecutor.ts [282:330]


  private async getContainerLogs(
    container: any,
    jobId: string
  ): Promise<string> {
    // Get logs stream
    const stream = await container.logs({
      stdout: true,
      stderr: true,
      follow: true,
    });

    return new Promise((resolve, reject) => {
      let output = "";
      const jobStore = getJobStore();

      stream.on("data", async (chunk: Buffer) => {
        // Docker multiplexes stdout/stderr, need to handle the stream format
        const cleanChunk = this.cleanDockerStreamChunk(chunk);
        output += cleanChunk;

        // Store incremental logs in real-time
        try {
          await jobStore.setJobLogs(jobId, output);
        } catch (error) {
          console.error(
            `Failed to store incremental logs for job ${jobId}:`,
            error
          );
        }
      });

      stream.on("end", () => {
        console.log(`✅ Container execution completed for job ${jobId}`);
        console.log(`📋 Total output length: ${output.length} characters`);
        resolve(output);
      });

      stream.on("error", (error: Error) => {
        console.error(`🚨 Container error for job ${jobId}:`, error);
        reject(error);
      });

      // Timeout after configured time
      setTimeout(() => {
        container.kill().catch(console.error); // Attempt to kill the container
        reject(new Error("Container execution timeout"));
      }, DOCKER.TIMEOUT);
    });
  }