From f1ba19564ee8fc18db6233fd3fd532369d78c76c Mon Sep 17 00:00:00 2001 From: "Abdulmhsen B. A. A." Date: Mon, 12 Aug 2024 17:45:56 +0300 Subject: [PATCH 1/3] Better error tracing for segments errors. --- src/API/Player/Segments.php | 42 ++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/src/API/Player/Segments.php b/src/API/Player/Segments.php index c006572a..3a82a1e3 100644 --- a/src/API/Player/Segments.php +++ b/src/API/Player/Segments.php @@ -281,17 +281,17 @@ readonly class Segments $end = microtime(true); if (!$process->isSuccessful()) { - if (true === $debug) { - return api_error($process->getErrorOutput(), Status::INTERNAL_SERVER_ERROR, [ + $this->logger->error( + r("Failed to generate segment. '{error}'", ['error' => $process->getErrorOutput()]), [ 'stdout' => $process->getOutput(), 'stderr' => $process->getErrorOutput(), 'Ffmpeg' => $process->getCommandLine(), 'config' => $sConfig, 'command' => implode(' ', $cmd), - ]); - } + ] + ); - return api_error('Failed to generate segment.', Status::INTERNAL_SERVER_ERROR, headers: [ + return api_error('Failed to generate segment. check logs.', Status::INTERNAL_SERVER_ERROR, headers: [ 'X-Transcode-Time' => round($end - $start, 6), ]); } @@ -318,7 +318,19 @@ readonly class Segments return $response; } catch (Throwable $e) { - return api_error($e->getMessage(), Status::INTERNAL_SERVER_ERROR); + $this->logger->error("Failed to generate segment. '{error}' at {file}:{line}", [ + 'stdout' => isset($process) ? $process->getOutput() : null, + 'stderr' => isset($process) ? $process->getErrorOutput() : null, + 'Ffmpeg' => isset($process) ? $process->getCommandLine() : null, + 'config' => $sConfig, + 'command' => implode(' ', $cmd), + 'error' => $e->getMessage(), + 'line' => $e->getLine(), + 'file' => $e->getFile(), + 'trace' => $e->getTrace(), + ]); + + return api_error('Failed to generate segment. check logs.', Status::INTERNAL_SERVER_ERROR); } finally { if (file_exists($tmpVidLock)) { unlink($tmpVidLock); @@ -369,7 +381,12 @@ readonly class Segments $process->wait(); if (!$process->isSuccessful()) { - $this->logger->error(join(' ', $cmd) . $process->getErrorOutput()); + $this->logger->error('Failed to extract subtitle.', [ + 'stdout' => $process->getOutput(), + 'stderr' => $process->getErrorOutput(), + 'Ffmpeg' => $process->getCommandLine(), + 'command' => implode(' ', $cmd), + ]); return "{$path}:stream_index={$stream}"; } @@ -381,7 +398,16 @@ readonly class Segments $stream->close(); return $cacheFile; } catch (Throwable $e) { - $this->logger->error($e->getMessage(), ['trace' => $e->getTrace()]); + $this->logger->error("Failed to extract subtitles. '{error}' at {file}:{line}", [ + 'stdout' => isset($process) ? $process->getOutput() : null, + 'stderr' => isset($process) ? $process->getErrorOutput() : null, + 'Ffmpeg' => isset($process) ? $process->getCommandLine() : null, + 'command' => implode(' ', $cmd), + 'error' => $e->getMessage(), + 'line' => $e->getLine(), + 'file' => $e->getFile(), + 'trace' => $e->getTrace(), + ]); return "{$path}:stream_index={$stream}"; } } From e025c91dad120d4b9889b24e294b943c7ed26eec Mon Sep 17 00:00:00 2001 From: "Abdulmhsen B. A. A." Date: Mon, 12 Aug 2024 18:20:49 +0300 Subject: [PATCH 2/3] Minor improvements to how we handle running commands via API. --- frontend/pages/console.vue | 32 +++++++-- src/API/System/Command.php | 133 ++++++++++++++++++++++++------------- 2 files changed, 112 insertions(+), 53 deletions(-) diff --git a/frontend/pages/console.vue b/frontend/pages/console.vue index c7918679..e33bba44 100644 --- a/frontend/pages/console.vue +++ b/frontend/pages/console.vue @@ -112,13 +112,12 @@