From 90a7b9db21316122816e01d5e6459a4424940d1f Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 3 Oct 2006 04:48:39 +0000 Subject: --- system/libraries/Profiler.php | 130 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 122 insertions(+), 8 deletions(-) (limited to 'system/libraries/Profiler.php') 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 .= '
'; + $output .= "\n"; + $output .= '  '.$this->obj->lang->line('profiler_benchmarks').'  '; + $output .= "\n"; + $output .= "\n\n\n"; + + foreach ($profile as $key => $val) + { + $key = ucwords(str_replace(array('_', '-'), ' ', $key)); + $output .= "\n"; + } + + $output .= "
".$key."  ".$val."
\n"; + $output .= "
\n\n"; + + return $output; } // -------------------------------------------------------------------- + + function _compile_queries() + { + $output = "\n\n"; + $output .= '
'; + $output .= "\n"; + $output .= '  '.$this->obj->lang->line('profiler_queries').'  '; + $output .= "\n"; + + if ( ! class_exists('CI_DB_driver')) + { + $output .= "
".$this->obj->lang->line('profiler_no_db')."
"; + } + else + { + if (count($this->obj->db->queries) == 0) + { + $output .= "
".$this->obj->lang->line('profiler_no_queries')."
"; + } + else + { + foreach ($this->obj->db->queries as $val) + { + $output .= '
'; + $output .= $val; + $output .= "
\n"; + } + } + } + + $output .= "
\n\n"; + + return $output; + } + + // -------------------------------------------------------------------- + + function _compile_post() + { + $output = "\n\n"; + $output .= '
'; + $output .= "\n"; + $output .= '  '.$this->obj->lang->line('profiler_post_data').'  '; + $output .= "\n"; + + if (count($_POST) == 0) + { + $output .= "
".$this->obj->lang->line('profiler_no_post')."
"; + } + else + { + $output .= "\n\n\n"; + + foreach ($_POST as $key => $val) + { + if ( ! is_numeric($key)) + { + $key = "'".$key."'"; + } + + $output .= "\n"; + } + + $output .= "
$_POST[".$key."]  ".htmlspecialchars(stripslashes($val))."
\n"; + } + $output .= "
\n\n"; + + return $output; + } + + // -------------------------------------------------------------------- + + /** + * Run the Auto-profiler + * + * @access private + * @return string + */ + function run($output = '') + { + $output = '
'; + + $output .= $this->_compile_benchmarks(); + $output .= $this->_compile_post(); + $output .= $this->_compile_queries(); + + return $output; + } + } // END CI_Profiler class -- cgit v1.2.3-24-g4f1b