From 15f5c9c6293007ce4a708a4c97e51f5c8e6d3e27 Mon Sep 17 00:00:00 2001 From: zukucker Date: Thu, 15 Jan 2026 10:47:34 +0100 Subject: [PATCH 01/11] feat: added new snippet for done --- .../app/administration/src/module/frosh-tools/snippet/de-DE.json | 1 + .../app/administration/src/module/frosh-tools/snippet/en-GB.json | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Resources/app/administration/src/module/frosh-tools/snippet/de-DE.json b/src/Resources/app/administration/src/module/frosh-tools/snippet/de-DE.json index 077e294d..facb9757 100644 --- a/src/Resources/app/administration/src/module/frosh-tools/snippet/de-DE.json +++ b/src/Resources/app/administration/src/module/frosh-tools/snippet/de-DE.json @@ -129,6 +129,7 @@ "status": "Status", "name": "Name", "good": "Gut", + "done": "Erledigt", "warning": "Warnung", "error": "Fehler", "info": "Info", diff --git a/src/Resources/app/administration/src/module/frosh-tools/snippet/en-GB.json b/src/Resources/app/administration/src/module/frosh-tools/snippet/en-GB.json index a3f5d869..da66174e 100644 --- a/src/Resources/app/administration/src/module/frosh-tools/snippet/en-GB.json +++ b/src/Resources/app/administration/src/module/frosh-tools/snippet/en-GB.json @@ -129,6 +129,7 @@ "status": "Status", "name": "Name", "good": "Good", + "done": "Done", "warning": "Warning", "error": "Error", "info": "Info", From 33ab1384918ed480fa7fa9314268c3c6d447ce86 Mon Sep 17 00:00:00 2001 From: zukucker Date: Thu, 15 Jan 2026 10:48:29 +0100 Subject: [PATCH 02/11] feat: added return SettingsResult:ok to performancechecks --- .../PerformanceChecker/AdminWorkerChecker.php | 10 +++++ .../CompressionMethodChecker.php | 10 +++++ .../DisableAppUrlExternalCheckChecker.php | 10 +++++ .../DisableSymfonySecretsChecker.php | 10 +++++ .../DisabledMailUpdatesChecker.php | 10 ++++- .../Checker/PerformanceChecker/EsChecker.php | 10 +++++ .../FineGrainedCachingChecker.php | 11 +++++ .../FixCacheIdSetChecker.php | 10 +++++ .../IncrementStorageChecker.php | 10 +++++ .../PerformanceChecker/LoggerLevelChecker.php | 8 ++++ .../MailOverQueueChecker.php | 10 +++++ .../MessengerAutoSetupChecker.php | 10 +++++ .../MysqlSettingsChecker.php | 43 +++++++++++++++++++ .../PerformanceChecker/PhpSettingsChecker.php | 11 +++++ .../ProductStreamIndexingChecker.php | 10 +++++ .../QueueConnectionChecker.php | 13 ++++++ .../RedisTagAwareChecker.php | 35 +++++++++------ 17 files changed, 218 insertions(+), 13 deletions(-) diff --git a/src/Components/Health/Checker/PerformanceChecker/AdminWorkerChecker.php b/src/Components/Health/Checker/PerformanceChecker/AdminWorkerChecker.php index a1b43a5f..82702ccb 100644 --- a/src/Components/Health/Checker/PerformanceChecker/AdminWorkerChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/AdminWorkerChecker.php @@ -29,6 +29,16 @@ public function collect(HealthCollection $collection): void 'https://developer.shopware.com/docs/guides/plugins/plugins/framework/message-queue/add-message-handler#the-admin-worker', ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'admin-watcher', + 'Admin-Worker', + 'disabled', + 'disabled', + 'https://developer.shopware.com/docs/guides/plugins/plugins/framework/message-queue/add-message-handler#the-admin-worker', + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/CompressionMethodChecker.php b/src/Components/Health/Checker/PerformanceChecker/CompressionMethodChecker.php index b9306913..c7a22f53 100644 --- a/src/Components/Health/Checker/PerformanceChecker/CompressionMethodChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/CompressionMethodChecker.php @@ -65,6 +65,16 @@ private function checkCompression(HealthCollection $collection, string $function self::DOCUMENTATION_URL, ), ); + }else{ + $collection->add( + SettingsResult::ok( + strtolower($functionality) . '-compression-method-extension-zstd', + 'PHP extension zstd for ' . $functionality . ' compression method', + \extension_loaded('zstd'), + 'enabled', + self::DOCUMENTATION_URL, + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/DisableAppUrlExternalCheckChecker.php b/src/Components/Health/Checker/PerformanceChecker/DisableAppUrlExternalCheckChecker.php index a91cfa95..81a11de7 100644 --- a/src/Components/Health/Checker/PerformanceChecker/DisableAppUrlExternalCheckChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/DisableAppUrlExternalCheckChecker.php @@ -24,6 +24,16 @@ public function collect(HealthCollection $collection): void 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks.html#disable-app-url-external-check', ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'app-url-check-disabled', + 'App URL external check', + 'enabled', + 'disabled', + 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks.html#disable-app-url-external-check', + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/DisableSymfonySecretsChecker.php b/src/Components/Health/Checker/PerformanceChecker/DisableSymfonySecretsChecker.php index 422c03fe..9e1ebd2b 100644 --- a/src/Components/Health/Checker/PerformanceChecker/DisableSymfonySecretsChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/DisableSymfonySecretsChecker.php @@ -30,6 +30,16 @@ public function collect(HealthCollection $collection): void 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks.html#disable-symfony-secrets', ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'symfony-secrets', + 'Disable Symfony Secrets', + 'disabled', + 'disabled', + 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks.html#disable-symfony-secrets', + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/DisabledMailUpdatesChecker.php b/src/Components/Health/Checker/PerformanceChecker/DisabledMailUpdatesChecker.php index a6f86ce0..9965562a 100644 --- a/src/Components/Health/Checker/PerformanceChecker/DisabledMailUpdatesChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/DisabledMailUpdatesChecker.php @@ -24,11 +24,19 @@ public function collect(HealthCollection $collection): void $setting = $this->params->get('shopware.mail.update_mail_variables_on_send'); if (!$setting) { + $collection->add( + SettingsResult::ok( + 'mail_variables', + 'MailVariables updates', + 'disabled', + 'disabled', + 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks#prevent-mail-data-updates' + ) + ); return; } $result = SettingsResult::warning('mail_variables', 'MailVariables updates', 'enabled', 'disabled'); - $result->url = 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks#prevent-mail-data-updates'; $collection->add($result); } diff --git a/src/Components/Health/Checker/PerformanceChecker/EsChecker.php b/src/Components/Health/Checker/PerformanceChecker/EsChecker.php index f40963e6..ce7a07d0 100644 --- a/src/Components/Health/Checker/PerformanceChecker/EsChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/EsChecker.php @@ -30,6 +30,16 @@ public function collect(HealthCollection $collection): void 'https://developer.shopware.com/docs/guides/hosting/infrastructure/elasticsearch/elasticsearch-setup', ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'elasticsearch', + 'Elasticsearch', + 'enabled', + 'enabled', + 'https://developer.shopware.com/docs/guides/hosting/infrastructure/elasticsearch/elasticsearch-setup', + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/FineGrainedCachingChecker.php b/src/Components/Health/Checker/PerformanceChecker/FineGrainedCachingChecker.php index a7346efc..d6e3794f 100644 --- a/src/Components/Health/Checker/PerformanceChecker/FineGrainedCachingChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/FineGrainedCachingChecker.php @@ -45,6 +45,17 @@ public function collect(HealthCollection $collection): void self::DOCUMENTATION_URL, ), ); + }else{ + $collection->add( + // only info, because it only affects redis, varnish etc. + SettingsResult::ok( + 'fine-grained-caching', + 'Fine-grained caching on Redis, Varnish etc.', + 'disabled', + 'disabled', + self::DOCUMENTATION_URL, + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/FixCacheIdSetChecker.php b/src/Components/Health/Checker/PerformanceChecker/FixCacheIdSetChecker.php index ff881c47..8ef1df3e 100644 --- a/src/Components/Health/Checker/PerformanceChecker/FixCacheIdSetChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/FixCacheIdSetChecker.php @@ -40,6 +40,16 @@ public function collect(HealthCollection $collection): void 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks#cache-id', ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'cache-id', + 'Fixed cache id', + 'set', + 'set', + 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks#cache-id', + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/IncrementStorageChecker.php b/src/Components/Health/Checker/PerformanceChecker/IncrementStorageChecker.php index 7895e94b..bc3e00ed 100644 --- a/src/Components/Health/Checker/PerformanceChecker/IncrementStorageChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/IncrementStorageChecker.php @@ -33,6 +33,16 @@ public function collect(HealthCollection $collection): void 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks#increment-storage', ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'increment-storage', + 'Increment storage', + $this->userActivity, + $recommended, + 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks#increment-storage', + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/LoggerLevelChecker.php b/src/Components/Health/Checker/PerformanceChecker/LoggerLevelChecker.php index d531e463..7db8ae1f 100644 --- a/src/Components/Health/Checker/PerformanceChecker/LoggerLevelChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/LoggerLevelChecker.php @@ -35,6 +35,14 @@ public function collect(HealthCollection $collection): void 'min WARNING', $this->url, )); + }else{ + $collection->add(SettingsResult::ok( + 'business_logger', + 'BusinessEventHandler logging', + Logger::toMonologLevel($this->businessEventHandlerLevel)->getName(), + 'min WARNING', + $this->url, + )); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/MailOverQueueChecker.php b/src/Components/Health/Checker/PerformanceChecker/MailOverQueueChecker.php index 54801d2d..85a98f6d 100644 --- a/src/Components/Health/Checker/PerformanceChecker/MailOverQueueChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/MailOverQueueChecker.php @@ -29,6 +29,16 @@ public function collect(HealthCollection $collection): void 'https://developer.shopware.com/docs/guides/hosting/infrastructure/message-queue#sending-mails-over-the-message-queue', ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'mail', + 'Sending mails over queue', + 'enabled', + 'enabled', + 'https://developer.shopware.com/docs/guides/hosting/infrastructure/message-queue#sending-mails-over-the-message-queue', + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/MessengerAutoSetupChecker.php b/src/Components/Health/Checker/PerformanceChecker/MessengerAutoSetupChecker.php index 406a36ca..cf6d7737 100644 --- a/src/Components/Health/Checker/PerformanceChecker/MessengerAutoSetupChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/MessengerAutoSetupChecker.php @@ -33,6 +33,16 @@ public function collect(HealthCollection $collection): void 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks.html#disable-auto-setup', ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'messenger-auto-setup', + 'Messenger auto_setup', + 'disabled', + 'disabled', + 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks.html#disable-auto-setup', + ), + ); } } diff --git a/src/Components/Health/Checker/PerformanceChecker/MysqlSettingsChecker.php b/src/Components/Health/Checker/PerformanceChecker/MysqlSettingsChecker.php index 0462f2db..e6253815 100644 --- a/src/Components/Health/Checker/PerformanceChecker/MysqlSettingsChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/MysqlSettingsChecker.php @@ -53,6 +53,17 @@ private function checkGroupConcatMaxLen(HealthCollection $collection): void self::DOCUMENTATION_URL, ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'sql_group_concat_max_len', + 'MySQL value group_concat_max_len', + (string) $groupConcatMaxLen, + 'min ' . self::MYSQL_GROUP_CONCAT_MAX_LEN, + self::DOCUMENTATION_URL, + ), + ); + } } @@ -69,6 +80,17 @@ private function checkSqlMode(HealthCollection $collection): void self::DOCUMENTATION_URL, ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'sql_mode', + 'MySQL value sql_mode', + $sqlMode, + 'No ' . self::MYSQL_SQL_MODE_PART, + self::DOCUMENTATION_URL, + ), + ); + } } @@ -85,6 +107,17 @@ private function checkTimeZone(HealthCollection $collection): void self::DOCUMENTATION_URL, ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'sql_time_zone', + 'MySQL value time_zone', + $timeZone, + implode(', ', self::MYSQL_TIME_ZONES), + self::DOCUMENTATION_URL, + ), + ); + } } @@ -106,6 +139,16 @@ private function checkCheckDefaultEnvironmentSessionVariables(HealthCollection $ self::DOCUMENTATION_URL, ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'sql_set_default_session_variables', + 'MySQL session vars are set on each connect', + 'disabled', + 'disabled', + self::DOCUMENTATION_URL, + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/PhpSettingsChecker.php b/src/Components/Health/Checker/PerformanceChecker/PhpSettingsChecker.php index 7c477ffc..a7d709ef 100644 --- a/src/Components/Health/Checker/PerformanceChecker/PhpSettingsChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/PhpSettingsChecker.php @@ -49,6 +49,17 @@ private function checkEnableFileOverride(HealthCollection $collection, string $u $url, ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'php.opcache.enable_file_override', + 'PHP value opcache.enable_file_override', + $currentValue, + '1', + $url, + ), + ); + } } diff --git a/src/Components/Health/Checker/PerformanceChecker/ProductStreamIndexingChecker.php b/src/Components/Health/Checker/PerformanceChecker/ProductStreamIndexingChecker.php index 71115317..1c033166 100644 --- a/src/Components/Health/Checker/PerformanceChecker/ProductStreamIndexingChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/ProductStreamIndexingChecker.php @@ -36,6 +36,16 @@ public function collect(HealthCollection $collection): void 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks.html#disable-product-stream-indexer', ), ); + }else{ + $collection->add( + SettingsResult::ok( + 'product-stream-indexing', + 'Product Stream Indexing', + 'disabled', + 'disabled', + 'https://developer.shopware.com/docs/guides/hosting/performance/performance-tweaks.html#disable-product-stream-indexer', + ), + ); } } } diff --git a/src/Components/Health/Checker/PerformanceChecker/QueueConnectionChecker.php b/src/Components/Health/Checker/PerformanceChecker/QueueConnectionChecker.php index 241d07cf..0a876814 100644 --- a/src/Components/Health/Checker/PerformanceChecker/QueueConnectionChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/QueueConnectionChecker.php @@ -49,6 +49,19 @@ public function collect(HealthCollection $collection): void ), ); } + + if($schema === 'redis' || $schema === 'rabiitmq'){ + $collection->add( + SettingsResult::ok( + $id, + '', + $schema, + 'redis or rabbitmq', + $url, + ), + ); + + } } private function getSchema(): string diff --git a/src/Components/Health/Checker/PerformanceChecker/RedisTagAwareChecker.php b/src/Components/Health/Checker/PerformanceChecker/RedisTagAwareChecker.php index 53208b94..03ccd1ef 100644 --- a/src/Components/Health/Checker/PerformanceChecker/RedisTagAwareChecker.php +++ b/src/Components/Health/Checker/PerformanceChecker/RedisTagAwareChecker.php @@ -21,19 +21,30 @@ public function collect(HealthCollection $collection): void { $httpCacheType = $this->cacheRegistry->get('cache.http')->getType(); - if (!\str_starts_with($httpCacheType, CacheAdapter::TYPE_REDIS) - || \str_starts_with($httpCacheType, CacheAdapter::TYPE_REDIS_TAG_AWARE)) { + // no redis + if (!\str_starts_with($httpCacheType, CacheAdapter::TYPE_REDIS)) { return; } - - $collection->add( - SettingsResult::warning( - 'redis-tag-aware', - 'Redis adapter should be TagAware', - CacheAdapter::TYPE_REDIS, - CacheAdapter::TYPE_REDIS_TAG_AWARE, - 'https://developer.shopware.com/docs/guides/hosting/performance/caches.html#example-replace-some-cache-with-redis', - ), - ); + if(!\str_starts_with($httpCacheType, CacheAdapter::TYPE_REDIS_TAG_AWARE)){ + $collection->add( + SettingsResult::warning( + 'redis-tag-aware', + 'Redis adapter should be TagAware', + CacheAdapter::TYPE_REDIS, + CacheAdapter::TYPE_REDIS_TAG_AWARE, + 'https://developer.shopware.com/docs/guides/hosting/performance/caches.html#example-replace-some-cache-with-redis', + ), + ); + }else{ + $collection->add( + SettingsResult::ok( + 'redis-tag-aware', + 'Redis adapter is TagAware', + CacheAdapter::TYPE_REDIS, + CacheAdapter::TYPE_REDIS_TAG_AWARE, + 'https://developer.shopware.com/docs/guides/hosting/performance/caches.html#example-replace-some-cache-with-redis', + ), + ); + } } } From 1a0c6bce6816cf5492bfc440c5294ee372c22a05 Mon Sep 17 00:00:00 2001 From: zukucker Date: Thu, 15 Jan 2026 10:49:20 +0100 Subject: [PATCH 03/11] feat: added green success pill to performance table if status ok --- .../component/frosh-tools-tab-index/template.twig | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Resources/app/administration/src/module/frosh-tools/component/frosh-tools-tab-index/template.twig b/src/Resources/app/administration/src/module/frosh-tools/component/frosh-tools-tab-index/template.twig index acc365e4..eb52fb9f 100644 --- a/src/Resources/app/administration/src/module/frosh-tools/component/frosh-tools-tab-index/template.twig +++ b/src/Resources/app/administration/src/module/frosh-tools/component/frosh-tools-tab-index/template.twig @@ -103,6 +103,13 @@ >