MDL-68185 report_performance: Refactored into Check API

This commit is contained in:
Brendan Heywood
2020-04-08 14:35:33 +10:00
parent 59a44a5bad
commit 79dbcce8b1
9 changed files with 449 additions and 336 deletions
+30 -1
View File
@@ -40,7 +40,7 @@ class manager {
/**
* The list of valid check types
*/
public const TYPES = ['status', 'security'];
public const TYPES = ['status', 'security', 'performance'];
/**
* Return all status checks
@@ -57,6 +57,35 @@ class manager {
return $checks;
}
/**
* Return all performance checks
*
* @return array of check objects
*/
static public function get_performance_checks() : array {
$checks = [
new performance\designermode(),
new performance\cachejs(),
new performance\debugging(),
new performance\backups(),
new performance\stats(),
];
// Any plugin can add status checks to this report by implementing a callback
// <component>_status_checks() which returns a check object.
$morechecks = get_plugins_with_function('performance_checks', 'lib.php');
foreach ($morechecks as $plugintype => $plugins) {
foreach ($plugins as $plugin => $pluginfunction) {
$result = $pluginfunction();
foreach ($result as $check) {
$check->component = $plugintype . '_' . $plugin;
$checks[] = $check;
}
}
}
return $checks;
}
/**
* Return all status checks
*
+84
View File
@@ -0,0 +1,84 @@
<?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/>.
/**
* Backups check
*
* @package core
* @category check
* @copyright 2020 Brendan Heywood <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core\check\performance;
defined('MOODLE_INTERNAL') || die();
use core\check\check;
use core\check\result;
/**
* Backups check
*
* @copyright 2020 Brendan Heywood <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class backups extends check {
/**
* Get the short check name
*
* @return string
*/
public function get_name(): string {
return get_string('check_backup', 'report_performance');
}
/**
* A link to a place to action this
*
* @return action_link|null
*/
public function get_action_link(): ?\action_link {
return new \action_link(
new \moodle_url('/admin/settings.php', ['section' => 'automated']),
get_string('automatedsetup', 'backup'));
}
/**
* Return result
* @return result
*/
public function get_result(): result {
global $CFG;
require_once($CFG->dirroot . '/backup/util/helper/backup_cron_helper.class.php');
$automatedbackupsenabled = get_config('backup', 'backup_auto_active');
if ($automatedbackupsenabled == \backup_cron_automated_helper::AUTO_BACKUP_ENABLED) {
$status = result::WARNING;
$summary = get_string('check_backup_comment_enable', 'report_performance');
} else {
$status = result::OK;
$summary = get_string('check_backup_comment_disable', 'report_performance');
}
$details = get_string('check_backup_details', 'report_performance');
return new result($status, $summary, $details);
}
}
+81
View File
@@ -0,0 +1,81 @@
<?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/>.
/**
* CacheJS check
*
* @package core
* @category check
* @copyright 2020 Brendan Heywood <[email protected]>
* @copyright 2008 petr Skoda
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core\check\performance;
defined('MOODLE_INTERNAL') || die();
use core\check\check;
use core\check\result;
/**
* CacheJS check
*
* @copyright 2020 Brendan Heywood <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class cachejs extends check {
/**
* Get the short check name
*
* @return string
*/
public function get_name(): string {
return get_string('cachejs', 'admin');
}
/**
* A link to a place to action this
*
* @return action_link|null
*/
public function get_action_link(): ?\action_link {
return new \action_link(
new \moodle_url('/admin/search.php', ['query' => 'cachejs']),
get_string('cachejs', 'admin'));
}
/**
* Return result
* @return result
*/
public function get_result(): result {
global $CFG;
if (empty($CFG->cachejs)) {
$status = result::CRITICAL;
$summary = get_string('check_cachejs_comment_disable', 'report_performance');
} else {
$status = result::OK;
$summary = get_string('check_cachejs_comment_enable', 'report_performance');
}
$details = get_string('check_cachejs_details', 'report_performance');
return new result($status, $summary, $details);
}
}
@@ -0,0 +1,81 @@
<?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/>.
/**
* Debugging check
*
* @package core
* @copyright 2020 Brendan Heywood <[email protected]>
* @copyright 2008 petr Skoda
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core\check\performance;
defined('MOODLE_INTERNAL') || die();
use core\check\check;
use core\check\result;
/**
* Debugging check
*
* @copyright 2020 Brendan Heywood <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class debugging extends check {
/**
* Get the short check name
*
* @return string
*/
public function get_name(): string {
return get_string('debug', 'admin');
}
/**
* A link to a place to action this
*
* @return action_link|null
*/
public function get_action_link(): ?\action_link {
return new \action_link(
new \moodle_url('/admin/settings.php', ['section' => 'debugging']),
get_string('debug', 'admin'));
}
/**
* Return result
* @return result
*/
public function get_result(): result {
global $CFG;
if (!$CFG->debugdeveloper) {
$status = result::OK;
$summary = get_string('check_debugmsg_comment_nodeveloper', 'report_performance');
} else {
$status = result::WARNING;
$summary = get_string('check_debugmsg_comment_developer', 'report_performance');
}
$details = get_string('check_debugmsg_details', 'report_performance');
return new result($status, $summary, $details);
}
}
@@ -0,0 +1,82 @@
<?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/>.
/**
* Designer mode
*
* @package core
* @category check
* @copyright 2020 Brendan Heywood <[email protected]>
* @copyright 2008 petr Skoda
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core\check\performance;
defined('MOODLE_INTERNAL') || die();
use core\check\check;
use core\check\result;
/**
* Designer mode
*
* @copyright 2020 Brendan Heywood <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class designermode extends check {
/**
* Get the short check name
*
* @return string
*/
public function get_name(): string {
return get_string('themedesignermode', 'admin');
}
/**
* A link to a place to action this
*
* @return action_link|null
*/
public function get_action_link(): ?\action_link {
return new \action_link(
new \moodle_url('/admin/search.php', ['query' => 'themedesignermode']),
get_string('themedesignermode', 'admin'));
}
/**
* Return result
* @return result
*/
public function get_result(): result {
global $DB, $CFG;
if (empty($CFG->themedesignermode)) {
$status = result::OK;
$summary = get_string('check_themedesignermode_comment_disable', 'report_performance');
} else {
$status = result::CRITICAL;
$summary = get_string('check_themedesignermode_comment_enable', 'report_performance');
}
$details = get_string('check_themedesignermode_details', 'report_performance');
return new result($status, $summary, $details);
}
}
+81
View File
@@ -0,0 +1,81 @@
<?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/>.
/**
* Stats check
*
* @package core
* @category check
* @copyright 2020 Brendan Heywood <[email protected]>
* @copyright 2008 petr Skoda
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core\check\performance;
defined('MOODLE_INTERNAL') || die();
use core\check\check;
use core\check\result;
/**
* Stats check
*
* @copyright 2020 Brendan Heywood <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class stats extends check {
/**
* Get the short check name
*
* @return string
*/
public function get_name(): string {
return get_string('check_riskadmin_name', 'report_security');
}
/**
* A link to a place to action this
*
* @return action_link|null
*/
public function get_action_link(): ?\action_link {
return new \action_link(
new \moodle_url('/admin/search.php', ['query' => 'enablestats']),
get_string('enablestats', 'admin'));
}
/**
* Return result
* @return result
*/
public function get_result(): result {
global $CFG;
if (!empty($CFG->enablestats)) {
$status = result::WARNING;
$summary = get_string('check_enablestats_comment_enable', 'report_performance');
} else {
$status = result::OK;
$summary = get_string('check_enablestats_comment_disable', 'report_performance');
}
$details = get_string('check_enablestats_details', 'report_performance');
return new result($status, $summary, $details);
}
}
+9 -51
View File
@@ -25,64 +25,22 @@
define('NO_OUTPUT_BUFFERING', true);
require('../../config.php');
require_once($CFG->dirroot.'/report/performance/locallib.php');
require_once($CFG->libdir.'/adminlib.php');
admin_externalpage_setup('reportperformance', '', null, '', array('pagelayout' => 'report'));
// Show detailed info about one issue only.
$issue = optional_param('issue', '', PARAM_ALPHANUMEXT);
$detail = optional_param('detail', '', PARAM_TEXT); // Show detailed info about one check only.
$reportperformance = new report_performance();
$issues = $reportperformance->get_issue_list();
$url = '/report/performance/index.php';
$table = new core\check\table('performance', $url, $detail);
// Test if issue valid string.
if (array_search($issue, $issues, true) === false) {
$issue = '';
if (!empty($table->detail)) {
$PAGE->set_docs_path(new moodle_url($url, ['detail' => $detail]));
$PAGE->navbar->add($table->detail->get_name());
}
// Print the header.
admin_externalpage_setup('reportperformance', '', null, '', array('pagelayout'=>'report'));
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('pluginname', 'report_performance'));
$strissue = get_string('issue', 'report_performance');
$strvalue = get_string('value', 'report_performance');
$strcomments = get_string('comments', 'report_performance');
$stredit = get_string('edit');
$table = new html_table();
$table->head = array($strissue, $strvalue, $strcomments, $stredit);
$table->colclasses = array('mdl-left issue', 'mdl-left value', 'mdl-left comments', 'mdl-left config');
$table->attributes = array('class' => 'admintable performancereport generaltable');
$table->id = 'performanceissuereporttable';
$table->data = array();
// Print details of one issue only.
if ($issue and ($issueresult = $reportperformance::$issue())) {
$reportperformance->add_issue_to_table($table, $issueresult, true);
$PAGE->set_docs_path('report/security/' . $issue);
echo html_writer::table($table);
echo $OUTPUT->box($issueresult->details, 'generalbox boxwidthnormal boxaligncenter');
echo $OUTPUT->continue_button(new moodle_url('/report/performance/index.php'));
} else {
// Add Performance report description on main list page.
$morehelplink = $OUTPUT->doc_link('report/performance', get_string('morehelp', 'report_performance'));
echo $OUTPUT->box(get_string('performancereportdesc', 'report_performance', $morehelplink), 'generalbox mdl-align');
foreach ($issues as $issue) {
$issueresult = $reportperformance::$issue();
if (!$issueresult) {
// Ignore this test.
continue;
}
$reportperformance->add_issue_to_table($table, $issueresult, false);
}
echo html_writer::table($table);
}
echo $table->render($OUTPUT);
echo $OUTPUT->footer();
-283
View File
@@ -1,283 +0,0 @@
<?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/>.
/**
* This file contains classes for report_performance
*
* @package report_performance
* @copyright 2013 Rajesh Taneja
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die;
/**
* Class defining issue result.
*
* @package report_performance
* @copyright 2013 Rajesh Taneja
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class report_performance_issue {
/** @var string issue identifier */
public $issue;
/** @var string issue name */
public $name;
/** @var string shown as status */
public $statusstr;
/** @var string string defines issue status */
public $status;
/** @var string shown as comment */
public $comment;
/** @var string details aboout issue*/
public $details;
/** @var string link pointing to configuration */
public $configlink;
}
/**
* This contains functions to get list of issues and there results.
*
* @package report_performance
* @copyright 2013 Rajesh Taneja
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class report_performance {
/**
* This is used when issue is ok and there is no impact on performance.
*/
const REPORT_PERFORMANCE_OK = 'ok';
/**
* This is used to notify that issue might impact performance.
*/
const REPORT_PERFORMANCE_WARNING = 'warning';
/**
* This is used to notify if issue is serious and will impact performance.
*/
const REPORT_PERFORMANCE_SERIOUS = 'serious';
/**
* This is used to notify if issue is critical and will significantly impact performance.
*/
const REPORT_PERFORMANCE_CRITICAL = 'critical';
/**
* Return list of performance check function list.
*
* @return array list of performance issues.
*/
public function get_issue_list() {
return array(
'report_performance_check_themedesignermode',
'report_performance_check_cachejs',
'report_performance_check_debugmsg',
'report_performance_check_automatic_backup',
'report_performance_check_enablestats'
);
}
/**
* Returns document link for performance issue
*
* @param string $issue string describing issue
* @param string $name name of issue
* @return string issue link pointing to docs page.
*/
public function doc_link($issue, $name) {
global $CFG, $OUTPUT;
if (empty($CFG->docroot)) {
return $name;
}
return $OUTPUT->doc_link('report/performance/'.$issue, $name);
}
/**
* Helper function to add issue details to table.
*
* @param html_table $table table in which issue details should be added
* @param report_performance_issues $issueresult issue result to be added
* @param bool $detail true if issue if displayed in detail.
*/
public function add_issue_to_table(&$table, $issueresult, $detailed = false) {
global $OUTPUT;
$statusarr = array(self::REPORT_PERFORMANCE_OK => 'badge badge-success',
self::REPORT_PERFORMANCE_WARNING => 'badge badge-warning',
self::REPORT_PERFORMANCE_SERIOUS => 'badge badge-danger',
self::REPORT_PERFORMANCE_CRITICAL => 'badge badge-danger');
$row = array();
if ($detailed) {
$row[0] = $this->doc_link($issueresult->issue, $issueresult->name);
} else {
$url = new moodle_url('/report/performance/index.php', array('issue' => $issueresult->issue));
$row[0] = html_writer::link($url, $issueresult->name);
}
$row[1] = html_writer::tag('span', $issueresult->statusstr, array('class' => $statusarr[$issueresult->status]));
$row[2] = $issueresult->comment;
if (!empty($issueresult->configlink)) {
$editicon = $OUTPUT->pix_icon('i/settings', $issueresult->issue);
$row[3] = $OUTPUT->action_link($issueresult->configlink, $editicon);
} else {
$row[3] = '';
}
$table->data[] = $row;
}
/**
* Verifies if theme designer mode is enabled.
*
* @return report_performance_issue result of themedesigner issue.
*/
public static function report_performance_check_themedesignermode() {
global $CFG;
$issueresult = new report_performance_issue();
$issueresult->issue = 'report_performance_check_themedesignermode';
$issueresult->name = get_string('themedesignermode', 'admin');
if (empty($CFG->themedesignermode)) {
$issueresult->statusstr = get_string('disabled', 'report_performance');
$issueresult->status = self::REPORT_PERFORMANCE_OK;
$issueresult->comment = get_string('check_themedesignermode_comment_disable', 'report_performance');
} else {
$issueresult->statusstr = get_string('enabled', 'report_performance');
$issueresult->status = self::REPORT_PERFORMANCE_CRITICAL;
$issueresult->comment = get_string('check_themedesignermode_comment_enable', 'report_performance');
}
$issueresult->details = get_string('check_themedesignermode_details', 'report_performance');
$issueresult->configlink = new moodle_url('/admin/search.php', array('query' => 'themedesignermode'));
return $issueresult;
}
/**
* Checks if javascript is cached.
*
* @return report_performance_issue result of cachejs issue.
*/
public static function report_performance_check_cachejs() {
global $CFG;
$issueresult = new report_performance_issue();
$issueresult->issue = 'report_performance_check_cachejs';
$issueresult->name = get_string('cachejs', 'admin');
if (empty($CFG->cachejs)) {
$issueresult->statusstr = get_string('disabled', 'report_performance');
$issueresult->status = self::REPORT_PERFORMANCE_CRITICAL;
$issueresult->comment = get_string('check_cachejs_comment_disable', 'report_performance');
} else {
$issueresult->statusstr = get_string('enabled', 'report_performance');
$issueresult->status = self::REPORT_PERFORMANCE_OK;
$issueresult->comment = get_string('check_cachejs_comment_enable', 'report_performance');
}
$issueresult->details = get_string('check_cachejs_details', 'report_performance');
$issueresult->configlink = new moodle_url('/admin/search.php', array('query' => 'cachejs'));
return $issueresult;
}
/**
* Checks debug config.
*
* @return report_performance_issue result of debugmsg issue.
*/
public static function report_performance_check_debugmsg() {
global $CFG;
$issueresult = new report_performance_issue();
$issueresult->issue = 'report_performance_check_debugmsg';
$issueresult->name = get_string('debug', 'admin');
$debugchoices = array(DEBUG_NONE => 'debugnone',
DEBUG_MINIMAL => 'debugminimal',
DEBUG_NORMAL => 'debugnormal',
DEBUG_ALL => 'debugall',
DEBUG_DEVELOPER => 'debugdeveloper');
$issueresult->statusstr = get_string($debugchoices[$CFG->debug], 'admin');
if (!$CFG->debugdeveloper) {
$issueresult->status = self::REPORT_PERFORMANCE_OK;
$issueresult->comment = get_string('check_debugmsg_comment_nodeveloper', 'report_performance');
} else {
$issueresult->status = self::REPORT_PERFORMANCE_WARNING;
$issueresult->comment = get_string('check_debugmsg_comment_developer', 'report_performance');
}
$issueresult->details = get_string('check_debugmsg_details', 'report_performance');
$issueresult->configlink = new moodle_url('/admin/settings.php', array('section' => 'debugging'));
return $issueresult;
}
/**
* Checks automatic backup config.
*
* @return report_performance_issue result of automatic backup issue.
*/
public static function report_performance_check_automatic_backup() {
global $CFG;
require_once($CFG->dirroot . '/backup/util/helper/backup_cron_helper.class.php');
$issueresult = new report_performance_issue();
$issueresult->issue = 'report_performance_check_automatic_backup';
$issueresult->name = get_string('check_backup', 'report_performance');
$automatedbackupsenabled = get_config('backup', 'backup_auto_active');
if ($automatedbackupsenabled == backup_cron_automated_helper::AUTO_BACKUP_ENABLED) {
$issueresult->statusstr = get_string('autoactiveenabled', 'backup');
$issueresult->status = self::REPORT_PERFORMANCE_WARNING;
$issueresult->comment = get_string('check_backup_comment_enable', 'report_performance');
} else {
if ($automatedbackupsenabled == backup_cron_automated_helper::AUTO_BACKUP_DISABLED) {
$issueresult->statusstr = get_string('autoactivedisabled', 'backup');
} else {
$issueresult->statusstr = get_string('autoactivemanual', 'backup');
}
$issueresult->status = self::REPORT_PERFORMANCE_OK;
$issueresult->comment = get_string('check_backup_comment_disable', 'report_performance');
}
$issueresult->details = get_string('check_backup_details', 'report_performance');
$issueresult->configlink = new moodle_url('/admin/search.php', array('query' => 'backup_auto_active'));
return $issueresult;
}
/**
* Checks if stats are enabled.
*/
public static function report_performance_check_enablestats() {
global $CFG;
$issueresult = new report_performance_issue();
$issueresult->issue = 'report_performance_check_enablestats';
$issueresult->name = get_string('enablestats', 'admin');
if (!empty($CFG->enablestats)) {
$issueresult->statusstr = get_string('enabled', 'report_performance');
$issueresult->status = self::REPORT_PERFORMANCE_WARNING;
$issueresult->comment = get_string('check_enablestats_comment_enable', 'report_performance');
} else {
$issueresult->statusstr = get_string('disabled', 'report_performance');
$issueresult->status = self::REPORT_PERFORMANCE_OK;
$issueresult->comment = get_string('check_enablestats_comment_disable', 'report_performance');
}
$issueresult->details = get_string('check_enablestats_details', 'report_performance');
$issueresult->configlink = new moodle_url('/admin/search.php', array('query' => 'enablestats'));
return $issueresult;
}
}
+1 -1
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die;
$plugin->version = 2019111800; // The current plugin version (Date: YYYYMMDDXX).
$plugin->version = 2019111801; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2019111200; // Requires this Moodle version.
$plugin->component = 'report_performance'; // Full name of the plugin (used for diagnostics).