MDL-35716 report_performance: Performance report for moodle site

This will report config setting which can affect moodle performance.
Few of them are added in this patch:
1. Theme designer mode
2. Cache Javascript
3. Debug message set to developer
4. Backup - Active
5. Stats enabled.
This commit is contained in:
Rajesh Taneja 2013-02-20 10:07:43 +08:00
parent 8673a98d1d
commit 87f9a3b15e
7 changed files with 523 additions and 3 deletions

View File

@ -0,0 +1,36 @@
<?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/>.
/**
* Capabilities
*
* @package report_performance
* @copyright 2013 Rajesh Taneja
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$capabilities = array(
'report/performance:view' => array(
'riskbitmask' => RISK_CONFIG,
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'archetypes' => array(
'manager' => CAP_ALLOW
),
)
);

View File

@ -0,0 +1,89 @@
<?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/>.
/**
* Performance overview report
*
* @package report_performance
* @copyright 2013 Rajesh Taneja
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('NO_OUTPUT_BUFFERING', true);
require('../../config.php');
require_once($CFG->dirroot.'/report/performance/locallib.php');
require_once($CFG->libdir.'/adminlib.php');
require_login();
// Show detailed info about one issue only.
$issue = optional_param('issue', '', PARAM_ALPHANUMEXT);
$reportperformance = new report_performance();
$issues = $reportperformance->get_issue_list();
// Test if issue valid string.
if (array_search($issue, $issues, true) === false) {
$issue = '';
}
// 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 $OUTPUT->footer();

View File

@ -0,0 +1,50 @@
<?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/>.
/**
* Lang strings
*
* @package report_performance
* @copyright 2013 Rajesh Taneja
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
$string['check_backup'] = 'Automated backup';
$string['check_backup_comment_disable'] = 'Performance may be affected during the backup process. If enabled, backups should be scheduled for off-peak times.';
$string['check_backup_comment_enable'] = 'Performance may be affected during the backup process. Backups should be scheduled for off-peak times.';
$string['check_backup_details'] = 'Enabling automated backup will automatically create archives of all the courses on the server at the time you specified.<p>During this process, it will consume more server resources and may affect performance.</p>';
$string['check_cachejs_comment_disable'] = 'If enabled, page loading performance is improved.';
$string['check_cachejs_comment_enable'] = 'If disabled, page might load slow.';
$string['check_cachejs_details'] = 'Javascript caching and compression greatly improves page loading performance. It is strongly recommended for production sites.';
$string['check_debugmsg_comment_nodeveloper'] = 'If set to DEVELOPER, performance may be affected slightly.';
$string['check_debugmsg_comment_developer'] = 'If set other then DEVELOPER, performance may be improved slightly.';
$string['check_debugmsg_details'] = 'There is rarely any advantage in going to Developer level, unless you are a developer, in which case it is strongly recommended.<p>Once you have got the error message, and copied and pasted it somewhere. HIGHLY RECOMMENDED to turn Debug back to NONE. Debug messages can give clues to a hacker as to the setup of your site and may affect performance.</p>';
$string['check_enablestats_comment_disable'] = 'Performance may be affected by statistics processing. If enabled, statistics settings should be set with caution.';
$string['check_enablestats_comment_enable'] = 'Performance may be affected by statistics processing. Statistics settings should be set with caution.';
$string['check_enablestats_details'] = 'Enabling this will process the logs in cronjob and gather some statistics. Depending on the amount of traffic on your site, this can take awhile.<p>During this process, it will consume more server resources and may affect performance.</p>';
$string['check_themedesignermode_comment_enable'] = 'If disabled, images and style sheets are cached, resulting in significant performance improvements.';
$string['check_themedesignermode_comment_disable'] = 'If enabled, images and style sheets will not be cached, resulting in significant performance degradation.';
$string['check_themedesignermode_details'] = 'This is often the cause of slow Moodle sites. <p>On average it might take at least twice the amount of CPU to run a Moodle site with theme designer mode enabled.</p>';
$string['comments'] = 'Comments';
$string['edit'] = 'Edit';
$string['enabled'] = 'Enabled';
$string['disabled'] = 'Disabled';
$string['issue'] = 'Issue';
$string['morehelp'] = 'more help';
$string['performance:view'] = 'View performance report';
$string['performancereportdesc'] = 'This report lists issues which may affect performance of the site {$a}';
$string['pluginname'] = 'Performance overview';
$string['value'] = 'Value';

View File

@ -0,0 +1,285 @@
<?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 => 'statusok',
self::REPORT_PERFORMANCE_WARNING => 'statuswarning',
self::REPORT_PERFORMANCE_SERIOUS => 'statusserious',
self::REPORT_PERFORMANCE_CRITICAL => 'statuscritical');
$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 = html_writer::empty_tag('img', array('alt' => $issueresult->issue, 'class' => 'icon',
'src' => $OUTPUT->pix_url('i/settings')));
$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');
// If debug is not set then consider it as 0.
if (!isset($CFG->themedesignermode)) {
$CFG->debug = DEBUG_NONE;
}
$issueresult->statusstr = get_string($debugchoices[$CFG->debug], 'admin');
if ($CFG->debug != DEBUG_DEVELOPER) {
$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;
$issueresult = new report_performance_issue();
$issueresult->issue = 'report_performance_check_automatic_backup';
$issueresult->name = get_string('check_backup', 'report_performance');
if (!empty($CFG->backup_auto_active) && ($CFG->backup_auto_active == 1)) {
$issueresult->statusstr = get_string('autoactiveenabled', 'backup');
$issueresult->status = self::REPORT_PERFORMANCE_WARNING;
$issueresult->comment = get_string('check_backup_comment_enable', 'report_performance');
} else {
if (empty($CFG->backup_auto_active)) {
$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;
}
}

View File

@ -0,0 +1,31 @@
<?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/>.
/**
* Settings and links
*
* @package report_performance
* @copyright 2013 Rajesh Taneja
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die;
$ADMIN->add('reports', new admin_externalpage('reportperformance', get_string('pluginname', 'report_performance'),
$CFG->wwwroot."/report/performance/index.php", 'report/performance:view'));
// No report settings.
$settings = null;

View File

@ -0,0 +1,29 @@
<?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/>.
/**
* Version info 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;
$plugin->version = 2013021300; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2012112900; // Requires this Moodle version.
$plugin->component = 'report_performance'; // Full name of the plugin (used for diagnostics).

View File

@ -78,9 +78,9 @@
#page-admin-course-index.dir-rtl .editcourse td[align="right"] {text-align: left;}
#page-admin-report-security-index .timewarninghidden {display:none;}
#page-admin-report-security-index .statuswarning {background-color: #f0e000;}
#page-admin-report-security-index .statusserious {background-color: #f07000;}
#page-admin-report-security-index .statuscritical {background-color: #f00000;}
#page-admin-report-security-index .statuswarning, #page-admin-report-performance-index .statuswarning {background-color: #f0e000;}
#page-admin-report-security-index .statusserious, #page-admin-report-performance-index .statusserious {background-color: #f07000;}
#page-admin-report-security-index .statuscritical, #page-admin-report-performance-index .statuscritical {background-color: #f00000;}
#page-admin-report-capability-index .rolecaps th {text-align: left;}
#page-admin-report-capability-index #settingsform #capabilitysearch {width: 30em;}