diff options
author | Derek Jones <derek.jones@ellislab.com> | 2010-03-10 17:05:05 +0100 |
---|---|---|
committer | Derek Jones <derek.jones@ellislab.com> | 2010-03-10 17:05:05 +0100 |
commit | ee71c80dd20bcfc60169af3eb1f628229ca30d67 (patch) | |
tree | a8cfc4369123b0227a8fc75254f88d97718aec7e | |
parent | cc64e97e502ce60491811b27e50b768f2517ba9b (diff) |
added ability to enable/disable individual sections of the Profiler
-rw-r--r-- | system/application/config/profiler.php | 17 | ||||
-rw-r--r-- | system/core/Output.php | 28 | ||||
-rw-r--r-- | system/language/english/profiler_lang.php | 1 | ||||
-rw-r--r-- | system/libraries/Profiler.php | 74 | ||||
-rw-r--r-- | user_guide/changelog.html | 1 | ||||
-rw-r--r-- | user_guide/general/profiling.html | 90 | ||||
-rw-r--r-- | user_guide/libraries/output.html | 3 |
7 files changed, 193 insertions, 21 deletions
diff --git a/system/application/config/profiler.php b/system/application/config/profiler.php new file mode 100644 index 000000000..f30432d9a --- /dev/null +++ b/system/application/config/profiler.php @@ -0,0 +1,17 @@ +<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); +/* +| ------------------------------------------------------------------------- +| Profiler Sections +| ------------------------------------------------------------------------- +| This file lets you determine whether or not various sections of Profiler +| data are displayed when the Profiler is enabled. +| Please see the user guide for info: +| +| http://codeigniter.com/user_guide/general/profiling.html +| +*/ + + + +/* End of file profiler.php */ +/* Location: ./system/application/config/profiler.php */
\ No newline at end of file diff --git a/system/core/Output.php b/system/core/Output.php index ad92accd6..0dcf2e46f 100644 --- a/system/core/Output.php +++ b/system/core/Output.php @@ -34,6 +34,8 @@ class CI_Output { var $enable_profiler = FALSE; var $parse_exec_vars = TRUE; // whether or not to parse variables like {elapsed_time} and {memory_usage} + var $_profiler_sections = array(); + function CI_Output() { log_message('debug', "Output Class Initialized"); @@ -143,6 +145,25 @@ class CI_Output { } // -------------------------------------------------------------------- + + /** + * Set Profiler Sections + * + * Allows override of default / config settings for Profiler section display + * + * @access public + * @param array + * @return void + */ + function set_profiler_sections($sections) + { + foreach ($sections as $section => $enable) + { + $this->_profiler_sections[$section] = ($enable !== FALSE) ? TRUE : FALSE; + } + } + + // -------------------------------------------------------------------- /** * Set Cache @@ -258,7 +279,12 @@ class CI_Output { if ($this->enable_profiler == TRUE) { $CI->load->library('profiler'); - + + if ( ! empty($this->_profiler_sections)) + { + $CI->profiler->set_sections($this->_profiler_sections); + } + // If the output data contains closing </body> and </html> tags // we will remove them and add them back after we insert the profile data if (preg_match("|</body>.*?</html>|is", $output)) diff --git a/system/language/english/profiler_lang.php b/system/language/english/profiler_lang.php index bf2183004..7876331f9 100644 --- a/system/language/english/profiler_lang.php +++ b/system/language/english/profiler_lang.php @@ -16,6 +16,7 @@ $lang['profiler_no_post'] = 'No POST data exists'; $lang['profiler_no_get'] = 'No GET data exists'; $lang['profiler_no_uri'] = 'No URI data exists'; $lang['profiler_no_memory'] = 'Memory Usage Unavailable'; +$lang['profiler_no_profiles'] = 'No Profile data - all Profiler sections have been disabled.'; /* End of file profiler_lang.php */ /* Location: ./system/language/english/profiler_lang.php */
\ No newline at end of file diff --git a/system/libraries/Profiler.php b/system/libraries/Profiler.php index bf20f1722..b2c008fc0 100644 --- a/system/libraries/Profiler.php +++ b/system/libraries/Profiler.php @@ -34,22 +34,67 @@ class CI_Profiler { var $CI; - function CI_Profiler() + var $_available_sections = array( + 'benchmarks', + 'config', + 'controller_info', + 'get', + 'http_headers', + 'memory_usage', + 'post', + 'queries', + 'uri_string' + ); + + function CI_Profiler($config = array()) { $this->CI =& get_instance(); $this->CI->load->language('profiler'); + + // default all sections to display + foreach ($this->_available_sections as $section) + { + if ( ! isset($config[$section])) + { + $this->_compile_{$section} = TRUE; + } + } + + $this->set_sections($config); } // -------------------------------------------------------------------- /** + * Set Sections + * + * Sets the private _compile_* properties to enable/disable Profiler sections + * + * @access public + * @param mixed + * @return void + */ + function set_sections($config) + { + foreach ($config as $method => $enable) + { + if (in_array($method, $this->_available_sections)) + { + $this->_compile_{$method} = ($enable !== FALSE) ? TRUE : FALSE; + } + } + } + + // -------------------------------------------------------------------- + + /** * Auto Profiler * * This function cycles through the entire array of mark points and * matches any two points that are named identically (ending in "_start" * and "_end" respectively). It then compiles the execution times for * all points and returns it as an array - * + * @PHP4 - all methods should be declared private * @access private * @return array */ @@ -438,16 +483,23 @@ class CI_Profiler { function run() { $output = "<div id='codeigniter_profiler' style='clear:both;background-color:#fff;padding:10px;'>"; + $fields_displayed = 0; + + foreach ($this->_available_sections as $section) + { + if ($this->_compile_{$section} !== FALSE) + { + $func = "_compile_{$section}"; + $output .= $this->{$func}(); + $fields_displayed++; + } + } - $output .= $this->_compile_uri_string(); - $output .= $this->_compile_controller_info(); - $output .= $this->_compile_memory_usage(); - $output .= $this->_compile_benchmarks(); - $output .= $this->_compile_get(); - $output .= $this->_compile_post(); - $output .= $this->_compile_queries(); - $output .= $this->_compile_config(); - $output .= $this->_compile_http_headers(); + if ($fields_displayed == 0) + { + $output .= '<p style="border:1px solid #5a0099;padding:10px;margin:20px 0;background-color:#eee">'.$this->CI->lang->line('profiler_no_profiles').'</p>'; + } + $output .= '</div>'; return $output; diff --git a/user_guide/changelog.html b/user_guide/changelog.html index b196acf42..ac421286b 100644 --- a/user_guide/changelog.html +++ b/user_guide/changelog.html @@ -72,6 +72,7 @@ Hg Tag: </p> </ul> <li>Libraries <ul> + <li>Added ability to enable / disable individual sections of the <a href="general/profiling.html">Profiler</a></li> <li>Added "is_object" into the list of unit tests capable of being run.</li> <li>Table library will generate an empty cell with a blank string, or NULL value.</li> <li>Added a <kbd>parse_string()</kbd> method to the <a href="libraries/parser.html">Parser Class</a>.</li> diff --git a/user_guide/general/profiling.html b/user_guide/general/profiling.html index ec71278b1..8622edeb9 100644 --- a/user_guide/general/profiling.html +++ b/user_guide/general/profiling.html @@ -69,20 +69,92 @@ This information can be useful during development in order to help with debuggin <h2>Enabling the Profiler</h2> -<p>To enable the profiler place the following function anywhere within your <a href="controllers.html">Controller</a> functions:</p> -<code>$this->output->enable_profiler(TRUE);</code> + <p>To enable the profiler place the following function anywhere within your <a href="controllers.html">Controller</a> functions:</p> + <code>$this->output->enable_profiler(TRUE);</code> -<p>When enabled a report will be generated and inserted at the bottom of your pages.</p> + <p>When enabled a report will be generated and inserted at the bottom of your pages.</p> -<p>To disable the profiler you will use:</p> -<code>$this->output->enable_profiler(FALSE);</code> + <p>To disable the profiler you will use:</p> + <code>$this->output->enable_profiler(FALSE);</code> -<h2>Setting Benchmark Points</h2> - -<p>In order for the Profiler to compile and display your benchmark data you must name your mark points using specific syntax.</p> -<p>Please read the information on setting Benchmark points in <a href="../libraries/benchmark.html">Benchmark Class</a> page.</p> +<h2>Setting Benchmark Points</h2> + <p>In order for the Profiler to compile and display your benchmark data you must name your mark points using specific syntax.</p> + + <p>Please read the information on setting Benchmark points in <a href="../libraries/benchmark.html">Benchmark Class</a> page.</p> + + +<h2>Enabling and Disabling Profiler Sections</h2> + + <p>Each section of Profiler data can be enabled or disabled by setting a corresponding config variable to <var>TRUE</var> or <var>FALSE</var>. This can be done one of two ways. First, you can set application wide defaults with the <dfn>system/application/config/profiler.php</dfn> config file.</p> + + <code>$config['config'] = FALSE;<br /> + $config['queries'] = FALSE;<br /></code> + + <p>In your controllers, you can override the defaults and config file values by calling the <kbd>set_profiler_sections()</kbd> method of the <a href="../libraries/output.html">Output class</a>:</p> + + <code>$sections = array(<br /> + 'config' => TRUE,<br /> + 'queries' => TRUE<br /> + );<br /> + <br /> + $this->output->set_profiler_sections($sections);</code> + + <p>Available sections and the array key used to access them are described in the table below.</p> + + <table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder"> + <tr> + <th>Key</th> + <th>Description</th> + <th>Default</th> + </tr><tr> + + <td class="td"><strong>benchmarks</strong></td> + <td class="td">Elapsed time of Benchmark points and total execution time</td> + <td class="td">TRUE</td> + </tr><tr> + + <td class="td"><strong>config</strong></td> + <td class="td">CodeIgniter Config variables</td> + <td class="td">TRUE</td> + </tr><tr> + + <td class="td"><strong>controller_info</strong></td> + <td class="td">The Controller class and method requested</td> + <td class="td">TRUE</td> + </tr><tr> + + <td class="td"><strong>get</strong></td> + <td class="td">Any GET data passed in the request</td> + <td class="td">TRUE</td> + </tr><tr> + + <td class="td"><strong>http_headers</strong></td> + <td class="td">The HTTP headers for the current request</td> + <td class="td">TRUE</td> + </tr><tr> + + <td class="td"><strong>memory_usage</strong></td> + <td class="td">Amount of memory consumed by the current request, in bytes</td> + <td class="td">TRUE</td> + </tr><tr> + + <td class="td"><strong>post</strong></td> + <td class="td">Any POST data passed in the request</td> + <td class="td">TRUE</td> + </tr><tr> + + <td class="td"><strong>queries</strong></td> + <td class="td">Listing of all database queries executed, including execution time</td> + <td class="td">TRUE</td> + </tr><tr> + + <td class="td"><strong>uri_string</strong></td> + <td class="td">The URI of the current request</td> + <td class="td">TRUE</td> + </tr><tr> + </table> </div> diff --git a/user_guide/libraries/output.html b/user_guide/libraries/output.html index de22fbe28..70f0c1f7b 100644 --- a/user_guide/libraries/output.html +++ b/user_guide/libraries/output.html @@ -130,6 +130,9 @@ at the bottom of your pages for debugging and optimization purposes.</p> <p>To disable the profiler you will use:</p> <code>$this->output->enable_profiler(FALSE);</code> +<h2>$this->output->set_profiler_sections();</h2> + +<p>Permits you to enable/disable specific sections of the Profiler when enabled. Please refer to the <a href="../general/profiling.html">Profiler</a> documentation for further information.</p> <h2>$this->output->cache();</h2> <p>The CodeIgniter output library also controls caching. For more information, please see the <a href="../general/caching.html">caching documentation</a>.</p> |