This repository has been archived by the owner on Nov 16, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlib.php
118 lines (105 loc) · 5.7 KB
/
lib.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* local plugin archive up
*
* @package local_archiveup
* @author Carson Tam <[email protected]>
* @copyright 2013 University of California, San Francisco {@link http://www.ucsf.edu}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Archive Up plugin cron task
*/
function local_archiveup_cron() {
global $DB, $CFG;
$dbman = $DB->get_manager();
$timenow = time();
mtrace(" ArchiveUp: Running archive tasks (current time: ".date('r',$timenow)."...");
// c.f. Delete old logs in lib/cronlib.php
$loglifetime = get_config('local_archiveup', 'loglifetime');
if (!empty($loglifetime)) { // value in days
$loglifetime = $timenow - ($loglifetime * 3600 * 24);
$lifetimep = array($loglifetime);
$archivetablename = "log_archiveup";
if ($dbman->table_exists($archivetablename)) {
mtrace(" Looking for old record(s) in legacy log table...");
$start = time();
$totalrecords = 0;
while ($min = $DB->get_field_select("log", "MIN(time)", "time < ?", $lifetimep)) {
// Break this down into chunks to avoid transaction for too long and generally thrashing database.
// Experiments suggest deleting one day takes up to a few seconds; probably a reasonable chunk size usually.
// If the cleanup has just been enabled, it might take e.g a month to clean the years of logs.
$params = array(min($min + 3600 * 24, $loglifetime));
$totalrecords += $DB->count_records_select("log", "time < ?", $params);
$transaction = $DB->start_delegated_transaction();
$DB->execute("INSERT INTO {{$archivetablename}} SELECT * FROM {log} WHERE time < ?", $params);
$DB->delete_records_select("log", "time < ?", $params);
$transaction->allow_commit();
if (time() > $start + 300) {
// Do not churn on log deletion for too long each run.
break;
}
}
mtrace(" ... archived $totalrecords old record(s) from legacy log table.");
}
$archivetablename = "logstore_standard_log_au";
if ($dbman->table_exists($archivetablename)) {
mtrace(" Looking for old record(s) in standard logstore...");
$start = time();
$totalrecords = 0;
while ($min = $DB->get_field_select("logstore_standard_log", "MIN(timecreated)", "timecreated < ?", $lifetimep)) {
// Break this down into chunks to avoid transaction for too long and generally thrashing database.
// Experiments suggest deleting one day takes up to a few seconds; probably a reasonable chunk size usually.
// If the cleanup has just been enabled, it might take e.g a month to clean the years of logs.
$params = array(min($min + 3600 * 24, $loglifetime));
$totalrecords += $DB->count_records_select("logstore_standard_log", "timecreated < ?", $params);
$transaction = $DB->start_delegated_transaction();
$DB->execute("INSERT INTO {{$archivetablename}} SELECT * FROM {logstore_standard_log} WHERE timecreated < ?", $params);
$DB->delete_records_select("logstore_standard_log", "timecreated < ?", $params);
$transaction->allow_commit();
if (time() > $start + 300) {
// Do not churn on log deletion for too long each run.
break;
}
}
mtrace(" ... archived $totalrecords old record(s) from standard logstore.");
}
}
// c.f. grade_cron() in lib/gradelib.php
$gradehistorylifetime = get_config('local_archiveup', 'gradehistorylifetime');
if (!empty($gradehistorylifetime)) {
$histlifetime = $timenow - ($gradehistorylifetime * 3600 * 24);
$tables = array('grade_outcomes_history', 'grade_categories_history', 'grade_items_history', 'grade_grades_history', 'scale_history');
foreach ($tables as $table) {
$archivetable = $table . '_au';
if ($dbman->table_exists($archivetable)) {
mtrace(" Looking for old grade history records in '$table'...");
$totalrecords = $DB->count_records_select($table, "timemodified < ?", array($histlifetime));
if ($totalrecords > 0) {
$transaction = $DB->start_delegated_transaction();
$DB->execute("INSERT INTO {{$archivetable}} SELECT * FROM {{$table}} WHERE timemodified < ?", array($histlifetime));
$DB->delete_records_select($table, "timemodified < ?", array($histlifetime));
$transaction->allow_commit();
mtrace(" ... moved $totalrecords old grade history record(s) in '$table' to '$archivetable'.");
} else {
mtrace(" ... nothing to archive.");
}
}
}
}
mtrace(" ... archived old log records.");
}