aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornfebe <fenn25.fn@gmail.com>2025-04-11 08:49:50 +0100
committernfebe <fenn25.fn@gmail.com>2025-04-17 14:24:18 +0100
commit6b89838cc245a9c0c20e6efcac701229889bb4ed (patch)
tree4a62d531237fe667d50785269828ba26962858c4
parent47f1950a402fe2064276d7fde12510abe6de583c (diff)
downloadnextcloud-server-6b89838cc245a9c0c20e6efcac701229889bb4ed.tar.gz
nextcloud-server-6b89838cc245a9c0c20e6efcac701229889bb4ed.zip
feat: add logging to preview generationfeat/no-issue/add-logging-preview-generation
Signed-off-by: nfebe <fenn25.fn@gmail.com>
-rw-r--r--lib/private/Preview/Generator.php48
-rw-r--r--lib/private/PreviewManager.php11
-rw-r--r--tests/lib/Preview/GeneratorTest.php7
3 files changed, 40 insertions, 26 deletions
diff --git a/lib/private/Preview/Generator.php b/lib/private/Preview/Generator.php
index ef68c17b896..66069beaecc 100644
--- a/lib/private/Preview/Generator.php
+++ b/lib/private/Preview/Generator.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
@@ -20,34 +21,20 @@ use OCP\IStreamImage;
use OCP\Preview\BeforePreviewFetchedEvent;
use OCP\Preview\IProviderV2;
use OCP\Preview\IVersionedPreviewFile;
+use Psr\Log\LoggerInterface;
class Generator {
public const SEMAPHORE_ID_ALL = 0x0a11;
public const SEMAPHORE_ID_NEW = 0x07ea;
- /** @var IPreview */
- private $previewManager;
- /** @var IConfig */
- private $config;
- /** @var IAppData */
- private $appData;
- /** @var GeneratorHelper */
- private $helper;
- /** @var IEventDispatcher */
- private $eventDispatcher;
-
public function __construct(
- IConfig $config,
- IPreview $previewManager,
- IAppData $appData,
- GeneratorHelper $helper,
- IEventDispatcher $eventDispatcher,
+ private IConfig $config,
+ private IPreview $previewManager,
+ private IAppData $appData,
+ private GeneratorHelper $helper,
+ private IEventDispatcher $eventDispatcher,
+ private LoggerInterface $logger,
) {
- $this->config = $config;
- $this->previewManager = $previewManager;
- $this->appData = $appData;
- $this->helper = $helper;
- $this->eventDispatcher = $eventDispatcher;
}
/**
@@ -83,6 +70,16 @@ class Generator {
$mimeType,
));
+ $this->logger->debug('Requesting preview for {path} with width={width}, height={height}, crop={crop}, mode={mode}, mimeType={mimeType}', [
+ 'path' => $file->getPath(),
+ 'width' => $width,
+ 'height' => $height,
+ 'crop' => $crop,
+ 'mode' => $mode,
+ 'mimeType' => $mimeType,
+ ]);
+
+
// since we only ask for one preview, and the generate method return the last one it created, it returns the one we want
return $this->generatePreviews($file, [$specification], $mimeType);
}
@@ -100,6 +97,7 @@ class Generator {
public function generatePreviews(File $file, array $specifications, $mimeType = null) {
//Make sure that we can read the file
if (!$file->isReadable()) {
+ $this->logger->warning('Cannot read file: {path}, skipping preview generation.', ['path' => $file->getPath()]);
throw new NotFoundException('Cannot read file');
}
@@ -121,6 +119,7 @@ class Generator {
$maxPreviewImage = null; // only load the image when we need it
if ($maxPreview->getSize() === 0) {
$maxPreview->delete();
+ $this->logger->error("Max preview generated for file {$file->getPath()} has size 0, deleting and throwing exception.");
throw new NotFoundException('Max preview size 0, invalid!');
}
@@ -167,6 +166,7 @@ class Generator {
$maxPreviewImage = $this->helper->getImage($maxPreview);
}
+ $this->logger->warning('Cached preview not found for file {path}, generating a new preview.', ['path' => $file->getPath()]);
$preview = $this->generatePreview($previewFolder, $maxPreviewImage, $width, $height, $crop, $maxWidth, $maxHeight, $previewVersion);
// New file, augment our array
$previewFiles[] = $preview;
@@ -335,6 +335,11 @@ class Generator {
$previewConcurrency = $this->getNumConcurrentPreviews('preview_concurrency_new');
$sem = self::guardWithSemaphore(self::SEMAPHORE_ID_NEW, $previewConcurrency);
try {
+ $this->logger->debug('Calling preview provider for {mimeType} with width={width}, height={height}', [
+ 'mimeType' => $mimeType,
+ 'width' => $width,
+ 'height' => $height,
+ ]);
$preview = $this->helper->getThumbnail($provider, $file, $width, $height);
} finally {
self::unguardWithSemaphore($sem);
@@ -558,6 +563,7 @@ class Generator {
$path = $this->generatePath($width, $height, $crop, false, $mimeType, $prefix);
foreach ($files as $file) {
if ($file->getName() === $path) {
+ $this->logger->debug('Found cached preview: {path}', ['path' => $path]);
return $file;
}
}
diff --git a/lib/private/PreviewManager.php b/lib/private/PreviewManager.php
index 8417554566e..bc77dcfe483 100644
--- a/lib/private/PreviewManager.php
+++ b/lib/private/PreviewManager.php
@@ -21,8 +21,10 @@ use OCP\Files\SimpleFS\ISimpleFile;
use OCP\IBinaryFinder;
use OCP\IConfig;
use OCP\IPreview;
-use OCP\IServerContainer;
use OCP\Preview\IProviderV2;
+use Psr\Container\ContainerInterface;
+use Psr\Log\LoggerInterface;
+
use function array_key_exists;
class PreviewManager implements IPreview {
@@ -47,7 +49,7 @@ class PreviewManager implements IPreview {
* @psalm-var array<string, null>
*/
private array $loadedBootstrapProviders = [];
- private IServerContainer $container;
+ private ContainerInterface $container;
private IBinaryFinder $binaryFinder;
private IMagickSupport $imagickSupport;
private bool $enablePreviews;
@@ -60,7 +62,7 @@ class PreviewManager implements IPreview {
GeneratorHelper $helper,
?string $userId,
Coordinator $bootstrapCoordinator,
- IServerContainer $container,
+ ContainerInterface $container,
IBinaryFinder $binaryFinder,
IMagickSupport $imagickSupport,
) {
@@ -136,7 +138,8 @@ class PreviewManager implements IPreview {
$this->rootFolder,
$this->config
),
- $this->eventDispatcher
+ $this->eventDispatcher,
+ $this->container->get(LoggerInterface::class),
);
}
return $this->generator;
diff --git a/tests/lib/Preview/GeneratorTest.php b/tests/lib/Preview/GeneratorTest.php
index 7bd121250fb..8a08d741909 100644
--- a/tests/lib/Preview/GeneratorTest.php
+++ b/tests/lib/Preview/GeneratorTest.php
@@ -19,6 +19,7 @@ use OCP\IImage;
use OCP\IPreview;
use OCP\Preview\BeforePreviewFetchedEvent;
use OCP\Preview\IProviderV2;
+use Psr\Log\LoggerInterface;
class GeneratorTest extends \Test\TestCase {
/** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
@@ -39,6 +40,8 @@ class GeneratorTest extends \Test\TestCase {
/** @var Generator */
private $generator;
+ private LoggerInterface|\PHPUnit\Framework\MockObject\MockObject $logger;
+
protected function setUp(): void {
parent::setUp();
@@ -47,13 +50,15 @@ class GeneratorTest extends \Test\TestCase {
$this->appData = $this->createMock(IAppData::class);
$this->helper = $this->createMock(GeneratorHelper::class);
$this->eventDispatcher = $this->createMock(IEventDispatcher::class);
+ $this->logger = $this->createMock(LoggerInterface::class);
$this->generator = new Generator(
$this->config,
$this->previewManager,
$this->appData,
$this->helper,
- $this->eventDispatcher
+ $this->eventDispatcher,
+ $this->logger,
);
}