diff --git a/apps/settings/composer/composer/autoload_classmap.php b/apps/settings/composer/composer/autoload_classmap.php index 8c90376d79c..41cfcd4339d 100644 --- a/apps/settings/composer/composer/autoload_classmap.php +++ b/apps/settings/composer/composer/autoload_classmap.php @@ -135,6 +135,7 @@ return array( 'OCA\\Settings\\SetupChecks\\SupportedDatabase' => $baseDir . '/../lib/SetupChecks/SupportedDatabase.php', 'OCA\\Settings\\SetupChecks\\SystemIs64bit' => $baseDir . '/../lib/SetupChecks/SystemIs64bit.php', 'OCA\\Settings\\SetupChecks\\TaskProcessingPickupSpeed' => $baseDir . '/../lib/SetupChecks/TaskProcessingPickupSpeed.php', + 'OCA\\Settings\\SetupChecks\\TaskProcessingSuccessRate' => $baseDir . '/../lib/SetupChecks/TaskProcessingSuccessRate.php', 'OCA\\Settings\\SetupChecks\\TempSpaceAvailable' => $baseDir . '/../lib/SetupChecks/TempSpaceAvailable.php', 'OCA\\Settings\\SetupChecks\\TransactionIsolation' => $baseDir . '/../lib/SetupChecks/TransactionIsolation.php', 'OCA\\Settings\\SetupChecks\\WellKnownUrls' => $baseDir . '/../lib/SetupChecks/WellKnownUrls.php', diff --git a/apps/settings/composer/composer/autoload_static.php b/apps/settings/composer/composer/autoload_static.php index cf6ebfacba8..edda60d4e82 100644 --- a/apps/settings/composer/composer/autoload_static.php +++ b/apps/settings/composer/composer/autoload_static.php @@ -150,6 +150,7 @@ class ComposerStaticInitSettings 'OCA\\Settings\\SetupChecks\\SupportedDatabase' => __DIR__ . '/..' . '/../lib/SetupChecks/SupportedDatabase.php', 'OCA\\Settings\\SetupChecks\\SystemIs64bit' => __DIR__ . '/..' . '/../lib/SetupChecks/SystemIs64bit.php', 'OCA\\Settings\\SetupChecks\\TaskProcessingPickupSpeed' => __DIR__ . '/..' . '/../lib/SetupChecks/TaskProcessingPickupSpeed.php', + 'OCA\\Settings\\SetupChecks\\TaskProcessingSuccessRate' => __DIR__ . '/..' . '/../lib/SetupChecks/TaskProcessingSuccessRate.php', 'OCA\\Settings\\SetupChecks\\TempSpaceAvailable' => __DIR__ . '/..' . '/../lib/SetupChecks/TempSpaceAvailable.php', 'OCA\\Settings\\SetupChecks\\TransactionIsolation' => __DIR__ . '/..' . '/../lib/SetupChecks/TransactionIsolation.php', 'OCA\\Settings\\SetupChecks\\WellKnownUrls' => __DIR__ . '/..' . '/../lib/SetupChecks/WellKnownUrls.php', diff --git a/apps/settings/lib/SetupChecks/TaskProcessingSuccessRate.php b/apps/settings/lib/SetupChecks/TaskProcessingSuccessRate.php new file mode 100644 index 00000000000..fc6b9c425b0 --- /dev/null +++ b/apps/settings/lib/SetupChecks/TaskProcessingSuccessRate.php @@ -0,0 +1,86 @@ +l10n->t('Task Processing pickup speed'); + } + + public function run(): SetupResult { + $taskCount = 0; + $lastNDays = 1; + while ($taskCount === 0 && $lastNDays < self::MAX_DAYS) { + $lastNDays++; + $tasks = $this->taskProcessingManager->getTasks(userId: '', scheduleAfter: $this->timeFactory->now()->getTimestamp() - 60 * 60 * 24 * $lastNDays); // userId: '' means no filter, whereas null would mean guest + $taskCount = count($tasks); + } + if ($taskCount === 0) { + return SetupResult::success( + $this->l10n->n( + 'No scheduled tasks in the last %n hour.', + 'No scheduled tasks in the last %n hours.', + 24 * $lastNDays + ) + ); + } + $failedCount = 0; + foreach ($tasks as $task) { + if ($task->getEndedAt() !== null) { + continue; // task was not picked up yet + } + $status = $task->getStatus(); + if ($status === Task::STATUS_FAILED) { + $failedCount++; // task pickup took longer than 4 minutes + } + } + + if ($failedCount / $taskCount < self::MAX_FAILURE_PERCENTAGE) { + return SetupResult::success( + $this->l10n->n( + 'Most tasks were successful in the last %n hour.', + 'Most tasks were successful in the last %n hours.', + 24 * $lastNDays + ) + ); + } else { + return SetupResult::warning( + $this->l10n->n( + 'A lot of tasks failed in the last %n hour. Consider checking the nextcloud log for errors and investigating whether the AI provider apps have been set up correctly.', + 'A lot of tasks failed in the last %n hours. Consider checking the nextcloud log for errors and investigating whether the AI provider apps have been set up correctly.', + 24 * $lastNDays + ), + 'https://docs.nextcloud.com/server/latest/admin_manual/ai/insight_and_debugging.html' + ); + } + } +}