summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--system/libraries/Profiler.php130
1 files changed, 122 insertions, 8 deletions
diff --git a/system/libraries/Profiler.php b/system/libraries/Profiler.php
index 026bfac60..265aaf031 100644
--- a/system/libraries/Profiler.php
+++ b/system/libraries/Profiler.php
@@ -29,6 +29,13 @@
*/
class CI_Profiler {
+ var $obj;
+
+ function CI_Profiler()
+ {
+ $this->obj =& get_instance();
+ $this->obj->load->language('profiler');
+ }
// --------------------------------------------------------------------
@@ -45,27 +52,134 @@ class CI_Profiler {
*/
function _compile_benchmarks()
{
- $obj =& get_instance();
-
- $times = array();
- foreach ($obj->benchmark->marker as $key => $val)
+ $profile = array();
+ foreach ($this->obj->benchmark->marker as $key => $val)
{
// We match the "end" marker so that the list ends
// up in the order that it was defined
if (preg_match("/(.+?)_end/i", $key, $match))
{
- if (isset($obj->benchmark->marker[$match[1].'_end']))
+ if (isset($this->obj->benchmark->marker[$match[1].'_end']))
{
- $times[$match[1]] = $obj->benchmark->elapsed_time($match[1].'_start', $key);
+ $profile[$match[1]] = $this->obj->benchmark->elapsed_time($match[1].'_start', $key);
}
}
}
-
- return $times;
+
+ // Build a table containing the profile data.
+ // Note: At some point we should turn this into a template that can
+ // be modified. We also might want to make this data available to be logged
+
+ $output = "\n\n";
+ $output .= '<fieldset style="border:1px solid #990000;padding:6px 0 10px 10px;margin:0 0 20px 0;background-color:#efefef">';
+ $output .= "\n";
+ $output .= '<legend style="color:#990000;">&nbsp;&nbsp;'.$this->obj->lang->line('profiler_benchmarks').'&nbsp;&nbsp;</legend>';
+ $output .= "\n";
+ $output .= "\n\n<table cellpadding='4' cellspacing='1' border='0'>\n";
+
+ foreach ($profile as $key => $val)
+ {
+ $key = ucwords(str_replace(array('_', '-'), ' ', $key));
+ $output .= "<tr><td style='color:#0000;font-weight:bold;'>".$key."&nbsp;&nbsp;</td><td style='color:#990000;font-weight:normal;'>".$val."</td></tr>\n";
+ }
+
+ $output .= "</table>\n";
+ $output .= "</fieldset>\n\n";
+
+ return $output;
}
// --------------------------------------------------------------------
+
+ function _compile_queries()
+ {
+ $output = "\n\n";
+ $output .= '<fieldset style="border:1px solid #0000FF;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#efefef">';
+ $output .= "\n";
+ $output .= '<legend style="color:#0000FF;">&nbsp;&nbsp;'.$this->obj->lang->line('profiler_queries').'&nbsp;&nbsp;</legend>';
+ $output .= "\n";
+
+ if ( ! class_exists('CI_DB_driver'))
+ {
+ $output .= "<div style='color:#0000FF;font-weight:normal;padding:4px 0 0 0;'>".$this->obj->lang->line('profiler_no_db')."</div>";
+ }
+ else
+ {
+ if (count($this->obj->db->queries) == 0)
+ {
+ $output .= "<div style='color:#0000FF;font-weight:normal;padding:4px 0 4px 0;'>".$this->obj->lang->line('profiler_no_queries')."</div>";
+ }
+ else
+ {
+ foreach ($this->obj->db->queries as $val)
+ {
+ $output .= '<div style="padding:0;margin:12px 0 12px 0;background-color:#efefef;color:#000">';
+ $output .= $val;
+ $output .= "</div>\n";
+ }
+ }
+ }
+
+ $output .= "</fieldset>\n\n";
+
+ return $output;
+ }
+
+ // --------------------------------------------------------------------
+
+ function _compile_post()
+ {
+ $output = "\n\n";
+ $output .= '<fieldset style="border:1px solid #009900;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#efefef">';
+ $output .= "\n";
+ $output .= '<legend style="color:#009900;">&nbsp;&nbsp;'.$this->obj->lang->line('profiler_post_data').'&nbsp;&nbsp;</legend>';
+ $output .= "\n";
+
+ if (count($_POST) == 0)
+ {
+ $output .= "<div style='color:#009900;font-weight:normal;padding:4px 0 4px 0'>".$this->obj->lang->line('profiler_no_post')."</div>";
+ }
+ else
+ {
+ $output .= "\n\n<table cellpadding='4' cellspacing='1' border='0'>\n";
+
+ foreach ($_POST as $key => $val)
+ {
+ if ( ! is_numeric($key))
+ {
+ $key = "'".$key."'";
+ }
+
+ $output .= "<tr><td style='color:#0000;'>&#36;_POST[".$key."]&nbsp;&nbsp;</td><td style='color:#009900;font-weight:normal;'>".htmlspecialchars(stripslashes($val))."</td></tr>\n";
+ }
+
+ $output .= "</table>\n";
+ }
+ $output .= "</fieldset>\n\n";
+
+ return $output;
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
+ * Run the Auto-profiler
+ *
+ * @access private
+ * @return string
+ */
+ function run($output = '')
+ {
+ $output = '<br style="margin:0;padding:0;clear:both;" />';
+
+ $output .= $this->_compile_benchmarks();
+ $output .= $this->_compile_post();
+ $output .= $this->_compile_queries();
+
+ return $output;
+ }
+
}
// END CI_Profiler class