From 2d935948ea1a2baaa4ebd0a12d7afab362cb4ba7 Mon Sep 17 00:00:00 2001 From: Brendan Heywood Date: Tue, 15 Dec 2020 10:51:59 +1100 Subject: [PATCH] MDL-68768 tool_tasks: Check for failing adhoc tasks --- .../tool/task/classes/check/maxfaildelay.php | 13 ++++++++++++ lib/classes/task/manager.php | 21 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/admin/tool/task/classes/check/maxfaildelay.php b/admin/tool/task/classes/check/maxfaildelay.php index 019aa75edf1..d6be005a46f 100644 --- a/admin/tool/task/classes/check/maxfaildelay.php +++ b/admin/tool/task/classes/check/maxfaildelay.php @@ -79,6 +79,19 @@ class maxfaildelay extends check { } } + $tasks = \core\task\manager::get_failed_adhoc_tasks(); + foreach ($tasks as $task) { + $faildelay = $task->get_fail_delay(); + if ($faildelay > $maxdelay) { + $maxdelay = $faildelay; + } + if ($faildelay > 0) { + $failures++; + $details .= get_string('faildelay', 'tool_task') . ': ' . format_time($faildelay); + $details .= ' - ' .get_class($task) . " ID = " . $task->get_id() ."
"; + } + } + if ($failures > 0) { // Intermittent failures are not yet a warning. $status = result::INFO; diff --git a/lib/classes/task/manager.php b/lib/classes/task/manager.php index 559c68f7676..7ce7695a7bb 100644 --- a/lib/classes/task/manager.php +++ b/lib/classes/task/manager.php @@ -511,6 +511,27 @@ class manager { return $tasks; } + /** + * This function will return a list of all adhoc tasks that have a faildelay + * + * @param int $delay filter how long the task has been delayed + * @return \core\task\adhoc_task[] + */ + public static function get_failed_adhoc_tasks(int $delay = 0): array { + global $DB; + + $tasks = []; + $records = $DB->get_records_sql('SELECT * from {task_adhoc} WHERE faildelay > ?', [$delay]); + + foreach ($records as $record) { + $task = self::adhoc_task_from_record($record); + if ($task) { + $tasks[] = $task; + } + } + return $tasks; + } + /** * Ensure quality of service for the ad hoc task queue. *