00001 <?php 00024 require_once 'Zend/Db/Profiler.php'; 00025 00027 require_once 'Zend/Wildfire/Plugin/FirePhp.php'; 00028 00030 require_once 'Zend/Wildfire/Plugin/FirePhp/TableMessage.php'; 00031 00041 class Zend_Db_Profiler_Firebug extends Zend_Db_Profiler 00042 { 00047 protected $_label = null; 00048 00053 protected $_label_template = '%label% (%totalCount% @ %totalDuration% sec)'; 00054 00059 protected $_message = null; 00060 00065 protected $_totalElapsedTime = 0; 00066 00073 public function __construct($label = null) 00074 { 00075 $this->_label = $label; 00076 if(!$this->_label) { 00077 $this->_label = 'Zend_Db_Profiler_Firebug'; 00078 } 00079 } 00080 00088 public function setEnabled($enable) 00089 { 00090 parent::setEnabled($enable); 00091 00092 if ($this->getEnabled()) { 00093 00094 if (!$this->_message) { 00095 $this->_message = new Zend_Wildfire_Plugin_FirePhp_TableMessage($this->_label); 00096 $this->_message->setBuffered(true); 00097 $this->_message->setHeader(array('Time','Event','Parameters')); 00098 $this->_message->setDestroy(true); 00099 $this->_message->setOption('includeLineNumbers', false); 00100 Zend_Wildfire_Plugin_FirePhp::getInstance()->send($this->_message); 00101 } 00102 00103 } else { 00104 00105 if ($this->_message) { 00106 $this->_message->setDestroy(true); 00107 $this->_message = null; 00108 } 00109 00110 } 00111 00112 return $this; 00113 } 00114 00122 public function queryEnd($queryId) 00123 { 00124 parent::queryEnd($queryId); 00125 00126 if (!$this->getEnabled()) { 00127 return; 00128 } 00129 00130 $this->_message->setDestroy(false); 00131 00132 $profile = $this->getQueryProfile($queryId); 00133 00134 $this->_totalElapsedTime += $profile->getElapsedSecs(); 00135 00136 $this->_message->addRow(array((string)round($profile->getElapsedSecs(),5), 00137 $profile->getQuery(), 00138 ($params=$profile->getQueryParams())?$params:null)); 00139 00140 $this->updateMessageLabel(); 00141 } 00142 00148 protected function updateMessageLabel() 00149 { 00150 if (!$this->_message) { 00151 return; 00152 } 00153 $this->_message->setLabel(str_replace(array('%label%', 00154 '%totalCount%', 00155 '%totalDuration%'), 00156 array($this->_label, 00157 $this->getTotalNumQueries(), 00158 (string)round($this->_totalElapsedTime,5)), 00159 $this->_label_template)); 00160 } 00161 }