diff --git a/lang/en/admin.php b/lang/en/admin.php index d3f95c54946..48f4661d3c5 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -1244,6 +1244,7 @@ $string['taskplagiarismcron'] = 'Background processing for legacy cron in plagia $string['taskportfoliocron'] = 'Background processing for portfolio plugins'; $string['taskprocessing'] = 'Task processing'; $string['taskquestioncron'] = 'Background processing for cleaning up the old question previews'; +$string['taskquestionstatscleanupcron'] = 'Background processing for cleaning up the old question statistics cache'; $string['taskrefreshsystemtokens'] = 'Refresh OAuth tokens for service accounts'; $string['taskregistrationcron'] = 'Site registration'; $string['tasksendfailedloginnotifications'] = 'Send failed login notifications'; diff --git a/lib/classes/task/question_stats_cleanup_task.php b/lib/classes/task/question_stats_cleanup_task.php new file mode 100644 index 00000000000..651cc8dcdbc --- /dev/null +++ b/lib/classes/task/question_stats_cleanup_task.php @@ -0,0 +1,65 @@ +. + +/** + * Task to cleanup old question statistics cache. + * + * @package core + * @copyright 2019 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace core\task; + +defined('MOODLE_INTERNAL') || die(); + +/** + * A task to cleanup old question statistics cache. + * + * @copyright 2019 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class question_stats_cleanup_task extends scheduled_task { + + /** + * Get a descriptive name for this task (shown to admins). + * + * @return string + */ + public function get_name() { + return get_string('taskquestionstatscleanupcron', 'admin'); + } + + /** + * Perform the cleanup task. + */ + public function execute() { + global $DB; + + mtrace("\n Cleaning up old question statistics cache records...", ''); + + $expiretime = time() - 5 * HOURSECS; + $DB->delete_records_select('question_statistics', 'timemodified < ?', [$expiretime]); + $responseanlysisids = $DB->get_records_select_menu('question_response_analysis', + 'timemodified < ?', + [$expiretime], + 'id', + 'id, id AS id2'); + $DB->delete_records_list('question_response_analysis', 'id', $responseanlysisids); + $DB->delete_records_list('question_response_count', 'analysisid', $responseanlysisids); + + mtrace('done.'); + } +} diff --git a/lib/db/tasks.php b/lib/db/tasks.php index 2350af2e663..85381d442e0 100644 --- a/lib/db/tasks.php +++ b/lib/db/tasks.php @@ -221,6 +221,15 @@ $tasks = array( 'dayofweek' => '*', 'month' => '*' ), + array( + 'classname' => 'core\task\question_stats_cleanup_task', + 'blocking' => 0, + 'minute' => '*', + 'hour' => '*', + 'day' => '*', + 'dayofweek' => '*', + 'month' => '*' + ), array( 'classname' => 'core\task\registration_cron_task', 'blocking' => 0, diff --git a/question/engine/statisticslib.php b/question/engine/statisticslib.php deleted file mode 100644 index 9538346b58a..00000000000 --- a/question/engine/statisticslib.php +++ /dev/null @@ -1,51 +0,0 @@ -. - -/** - * Functions common to the question usage statistics code. - * - * @package moodlecore - * @subpackage questionbank - * @copyright 2013 The Open University - * @author Jamie Pratt - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -/** - * Question statistics cron code. Deletes cached stats more than a certain age. - */ -function question_usage_statistics_cron() { - global $DB; - - $expiretime = time() - 5 * HOURSECS; - - mtrace("\n Cleaning up old question statistics cache records...", ''); - - $DB->delete_records_select('question_statistics', 'timemodified < ?', array($expiretime)); - $responseanlysisids = $DB->get_records_select_menu('question_response_analysis', - 'timemodified < ?', - array($expiretime), - 'id', - 'id, id AS id2'); - - $DB->delete_records_list('question_response_analysis', 'id', $responseanlysisids); - $DB->delete_records_list('question_response_count', 'analysisid', $responseanlysisids); - - mtrace('done.'); - return true; -}