Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00017 final class DebugCachePeer extends SelectivePeer
00018 {
00019 private $peer = null;
00020 private $logger = null;
00021 private $isWeb = true;
00022 private $whiteListActions = array();
00023 private $blackListActions = array();
00024 private $actionFilter = false;
00025
00026
00030 public static function create(
00031 CachePeer $peer, $logfile, $isWeb = true, $appendFile = true
00032 )
00033 {
00034 return new self($peer, $logfile, $isWeb, $appendFile);
00035 }
00036
00037 public function __construct(
00038 CachePeer $peer, $logfile, $isWeb = true, $appendFile = true
00039 )
00040 {
00041 $this->peer = $peer;
00042 $this->isWeb = $isWeb;
00043 $this->logger =
00044 StreamLogger::create()->
00045 setOutputStream(FileOutputStream::create($logfile, $appendFile));
00046 }
00047
00048 public function setBlackListActions($actions)
00049 {
00050 if (!empty($this->whiteListActions))
00051 throw new WrongStateException('You already setup black list!');
00052
00053 $this->blackListActions = $actions;
00054
00055 $this->actionFilter = true;
00056
00057 return $this;
00058 }
00059
00060 public function dropBlackListActions()
00061 {
00062 $this->blackListActions = array();
00063
00064 $this->actionFilter = false;
00065
00066 return $this;
00067 }
00068
00069 public function setWhiteListActions($actions)
00070 {
00071 if (!empty($this->blackListActions))
00072 throw new WrongStateException('You already setup white list!');
00073
00074 $this->whiteListActions = $actions;
00075
00076 $this->actionFilter = true;
00077
00078 return $this;
00079 }
00080
00081 public function dropWhiteListActions()
00082 {
00083 $this->whiteListActions = array();
00084
00085 $this->actionFilter = false;
00086
00087 return $this;
00088 }
00089
00093 public function mark($className)
00094 {
00095 return $this;
00096 }
00097
00098 public function increment($key, $value)
00099 {
00100 $beginTime = microtime(true);
00101 $value = $this->peer->increment($key, $value);
00102 $totalTime = microtime(true) - $beginTime;
00103
00104 $this->log('increment', $totalTime, $key);
00105
00106 return $value;
00107 }
00108
00109 public function decrement($key, $value)
00110 {
00111 $beginTime = microtime(true);
00112 $value = $this->peer->decrement($key, $value);
00113 $totalTime = microtime(true) - $beginTime;
00114
00115 $this->log('decrement', $totalTime, $key);
00116
00117 return $value;
00118 }
00119
00120 public function getList($indexes)
00121 {
00122 $beginTime = microtime(true);
00123 $value = $this->peer->getList($indexes);
00124 $totalTime = microtime(true) - $beginTime;
00125
00126 $this->log('getList', $totalTime, implode(',', $indexes));
00127
00128 return $value;
00129 }
00130
00131 public function get($key)
00132 {
00133 $beginTime = microtime(true);
00134 $value = $this->peer->get($key);
00135 $totalTime = microtime(true) - $beginTime;
00136
00137 $this->log('get', $totalTime, $key);
00138
00139 return $value;
00140 }
00141
00142 public function delete($key)
00143 {
00144 $beginTime = microtime(true);
00145 $value = $this->peer->delete($key);
00146 $totalTime = microtime(true) - $beginTime;
00147
00148 $this->log('delete', $totalTime, $key);
00149
00150 return $value;
00151 }
00152
00156 public function clean()
00157 {
00158 $beginTime = microtime(true);
00159 $value = $this->peer->clean();
00160 $totalTime = microtime(true) - $beginTime;
00161
00162 $this->log('clean', $totalTime);
00163
00164 return $value;
00165 }
00166
00167 public function isAlive()
00168 {
00169 $beginTime = microtime(true);
00170 $value = $this->peer->isAlive();
00171 $totalTime = microtime(true) - $beginTime;
00172
00173 $this->log('isAlive', $totalTime);
00174
00175 return $value;
00176 }
00177
00178 public function append($key, $data)
00179 {
00180 $beginTime = microtime(true);
00181 $value = $this->peer->append($key, $data);
00182 $totalTime = microtime(true) - $beginTime;
00183
00184 $this->log('append', $totalTime, $key);
00185
00186 return $value;
00187 }
00188
00189 protected function store(
00190 $action, $key, $value, $expires = Cache::EXPIRES_MEDIUM
00191 )
00192 {
00193 $beginTime = microtime(true);
00194 $value = $this->peer->store($action, $key, $value, $expires);
00195 $totalTime = microtime(true) - $beginTime;
00196
00197 $this->log('store + '.$action, $totalTime, $key);
00198
00199 return $value;
00200 }
00201
00202 private function log($action, $totalTime, $key = null)
00203 {
00204 if ($this->actionFilter) {
00205 if (
00206 !empty($this->blackListActions)
00207 && in_array($action, $this->blackListActions)
00208 )
00209 return $this;
00210
00211 if (
00212 !empty($this->whiteListActions)
00213 && !in_array($action, $this->whiteListActions)
00214 )
00215 return $this;
00216 }
00217
00218 $record = null;
00219
00220 if ($this->isWeb)
00221 $record .= (
00222 (isset($_SERVER['SSI_REQUEST_URI']))
00223 ? $_SERVER['SSI_REQUEST_URI']
00224 : $_SERVER['REQUEST_URI']
00225 )."\t";
00226
00227 $record .= $action."\t".$key."\t".$totalTime;
00228
00229 $this->logger->info($record);
00230
00231 return $this;
00232 }
00233 }
00234 ?>