/install/m/mlog.php

https://github.com/yayv/tinycake · PHP · 369 lines · 306 code · 54 blank · 9 comment · 23 complexity · b58429191b764849a23545762f59237f MD5 · raw file

  1. <?php
  2. class mlog extends model
  3. {
  4. public $_logfile;
  5. public $_badcalls;
  6. public $_url_times;
  7. public $_method_times;
  8. public $_model_times;
  9. public $_controller_times;
  10. public $_action_times;
  11. public function __construct()
  12. {
  13. $this->_badcalls = array();
  14. $this->_url_times = array();
  15. $this->_method_times = array();
  16. $this->_model_times = array();
  17. $this->_controller_times= array();
  18. $this->_action_times = array();
  19. }
  20. public function setLogfile($file)
  21. {
  22. $this->_logfile = $file;
  23. }
  24. public function parseFile($file, $urlpatterns4merge=false)
  25. {
  26. require_once('mlogsection.php');
  27. $log = new mlogsection();
  28. $fp = fopen($file, 'r');
  29. if($fp)
  30. while(!feof($fp))
  31. {
  32. $line = fgets($fp);
  33. $endsection = $log->addLine($line);
  34. if($endsection)
  35. {
  36. $this->appendToAnalyse($log, $urlpatterns4merge);
  37. unset($log);
  38. $log = new mlogsection();
  39. $log->addLine($line);
  40. }
  41. $line = null;
  42. }
  43. fclose($fp);
  44. }
  45. function appendToAnalyse($logobj, $urlpatterns4merge=false)
  46. {
  47. if(!$logobj->_notclearexit)
  48. {
  49. $key = trim($logobj->_url);
  50. if(is_array($urlpatterns4merge))
  51. foreach ($urlpatterns4merge as $urlPattern )
  52. {
  53. if(preg_match($urlPattern,$key))
  54. {
  55. $key = $urlPattern;
  56. }
  57. }
  58. if(!isset($this->_url_times[$key]))
  59. {
  60. $this->_url_times[$key]['times'] = 0;
  61. $this->_url_times[$key]['runtime'] = 0;
  62. }
  63. $this->_url_times[$key]['times'] += 1;
  64. $this->_url_times[$key]['runtime'] += $logobj->_urltime;
  65. // merge logobj's numbers
  66. foreach($logobj->_method_times as $k=>$v)
  67. {
  68. if(!isset($this->_method_times[$k]))
  69. {
  70. $this->_method_times[$k] = $v;
  71. }
  72. else
  73. {
  74. $this->_method_times[$k]['times'] += $v['times'];
  75. $this->_method_times[$k]['runtime'] += $v['runtime'];
  76. }
  77. }
  78. // ----
  79. foreach($logobj->_model_times as $k=>$v)
  80. {
  81. if(!isset($this->_model_times[$k]))
  82. {
  83. $this->_model_times[$k] = $v;
  84. }
  85. else
  86. {
  87. $this->_model_times[$k]['times'] += $v['times'];
  88. $this->_model_times[$k]['runtime'] += $v['runtime'];
  89. }
  90. }
  91. // ----
  92. foreach($logobj->_controller_times as $k=>$v)
  93. {
  94. if(!isset($this->_controller_times[$k]))
  95. {
  96. $this->_controller_times[$k] = $v;
  97. }
  98. else
  99. {
  100. $this->_controller_times[$k]['times'] += $v['times'];
  101. $this->_controller_times[$k]['runtime'] += $v['runtime'];
  102. }
  103. }
  104. // ----
  105. foreach($logobj->_action_times as $k=>$v)
  106. {
  107. if(!isset($this->_action_times[$k]))
  108. {
  109. $this->_action_times[$k] = $v;
  110. }
  111. else
  112. {
  113. $this->_action_times[$k]['times'] += $v['times'];
  114. $this->_action_times[$k]['runtime'] += $v['runtime'];
  115. }
  116. }
  117. }
  118. else
  119. {
  120. // append for badcalls
  121. $dieincall = trim($logobj->_badcall);
  122. if(isset($this->_badcalls[$dieincall]))
  123. {
  124. $this->_badcalls[$dieincall] = array();
  125. }
  126. $url = trim($logobj->_url);
  127. $this->_badcalls[$dieincall][$url] += 1;
  128. }
  129. }
  130. function calcAvgTime()
  131. {
  132. // foreach
  133. foreach($this->_url_times as $k=>$v)
  134. {
  135. if(0==$v['times'])
  136. $this->_url_times[$k]['avgtime'] = 0;
  137. else
  138. $this->_url_times[$k]['avgtime'] = $v['runtime'] / $v['times'];
  139. }
  140. foreach($this->_controller_times as $k=>$v)
  141. {
  142. if(0==$v['times'])
  143. $this->_controller_times[$k]['avgtime'] = 0 ;
  144. else
  145. $this->_controller_times[$k]['avgtime'] = $v['runtime'] / $v['times'];
  146. }
  147. foreach($this->_action_times as $k=>$v)
  148. {
  149. if(0==$v['times'])
  150. $this->_action_times[$k]['avgtime'] = 0;
  151. else
  152. $this->_action_times[$k]['avgtime'] = $v['runtime'] / $v['times'];
  153. }
  154. foreach($this->_model_times as $k=>$v)
  155. {
  156. if(0==$v['times'])
  157. $this->_model_times[$k]['avgtime'] = 0;
  158. else
  159. $this->_model_times[$k]['avgtime'] = $v['runtime'] / $v['times'];
  160. }
  161. foreach($this->_method_times as $k=>$v)
  162. {
  163. if(0==$v['times'])
  164. $this->_method_times[$k]['avgtime'] = 0;
  165. else
  166. $this->_method_times[$k]['avgtime'] = $v['runtime'] / $v['times'];
  167. }
  168. }
  169. function dumpToFile($filename)
  170. {
  171. $fp = fopen($filename, 'w');
  172. fwrite($fp, "<?php\n");
  173. $dump = '$this->_badcalls = ' . var_export($this->_badcalls, true). ";\n";
  174. fwrite($fp, $dump);
  175. $dump = '$this->_url_times = ' . var_export($this->_url_times, true). ";\n";
  176. fwrite($fp, $dump);
  177. $dump = '$this->_controller_times = ' . var_export($this->_controller_times, true). ";\n";
  178. fwrite($fp, $dump);
  179. $dump = '$this->_action_times = ' . var_export($this->_action_times, true). ";\n";
  180. fwrite($fp, $dump);
  181. $dump = '$this->_model_times = ' . var_export($this->_model_times, true). ";\n";
  182. fwrite($fp, $dump);
  183. $dump = '$this->_method_times = ' . var_export($this->_method_times, true). ";\n";
  184. fwrite($fp, $dump);
  185. fclose($fp);
  186. }
  187. function loadFromFile($filename)
  188. {
  189. include($filename);
  190. }
  191. function mergeAnotherFile($file)
  192. {
  193. $fno = new mlog();
  194. $fno->loadFromFile($file);
  195. $this->mergeAnotherLog($fno);
  196. unset($fno);
  197. }
  198. function mergeAnotherLog($mlogobj)
  199. {
  200. foreach($mlogobj->_badcalls as $k=>$v)
  201. {
  202. if(isset($this->_badcalls[$k]))
  203. {
  204. $this->_badcalls[$k]['times'] += $v['times'];
  205. $this->_badcalls[$k]['runtime'] += $v['runtime'];
  206. }
  207. else
  208. $this->_badcalls[$k] = $v;
  209. }
  210. foreach($mlogobj->_url_times as $k=>$v)
  211. {
  212. if(isset($this->_url_times[$k]))
  213. {
  214. $this->_url_times[$k]['times'] += $v['times'];
  215. $this->_url_times[$k]['runtime'] += $v['runtime'];
  216. }
  217. else
  218. $this->_url_times[$k] = $v;
  219. }
  220. foreach($mlogobj->_controller_times as $k=>$v)
  221. {
  222. if(isset($this->_controller_times[$k]))
  223. {
  224. $this->_controller_times[$k]['times'] += $v['times'];
  225. $this->_controller_times[$k]['runtime'] += $v['runtime'];
  226. }
  227. else
  228. $this->_controller_times[$k] = $v;
  229. }
  230. foreach($mlogobj->_action_times as $k=>$v)
  231. {
  232. if(isset($this->_action_times[$k]))
  233. {
  234. $this->_action_times[$k]['times'] += $v['times'];
  235. $this->_action_times[$k]['runtime'] += $v['runtime'];
  236. }
  237. else
  238. $this->_action_times[$k] = $v;
  239. }
  240. foreach($mlogobj->_model_times as $k=>$v)
  241. {
  242. if(isset($this->_model_times[$k]))
  243. {
  244. $this->_model_times[$k]['times'] += $v['times'];
  245. $this->_model_times[$k]['runtime'] += $v['runtime'];
  246. }
  247. else
  248. $this->_model_times[$k] = $v;
  249. }
  250. foreach($mlogobj->_method_times as $k=>$v)
  251. {
  252. if(isset($this->_method_times[$k]))
  253. {
  254. $this->_method_times[$k]['times'] += $v['times'];
  255. $this->_method_times[$k]['runtime'] += $v['runtime'];
  256. }
  257. else
  258. $this->_method_times[$k] = $v;
  259. }
  260. }
  261. function getBadCalls()
  262. {
  263. return $this->_badcalls;
  264. }
  265. function getUrlTimes()
  266. {
  267. return $this->_url_times;
  268. }
  269. function getControllerTimes()
  270. {
  271. return $this->_controller_times;
  272. }
  273. function getActionTimes()
  274. {
  275. return $this->_action_times;
  276. }
  277. function getModelTimes()
  278. {
  279. return $this->_model_times;
  280. }
  281. function getMethodTimes()
  282. {
  283. return $this->_method_times;
  284. }
  285. public function calc()
  286. {
  287. // 计算平均时间 和 最大响应时间
  288. //
  289. }
  290. // TODO: 这个方法比较危险,考虑一个什么方法来提升安全性吧
  291. public function removeFile($filename)
  292. {
  293. $ret = unlink($filename);
  294. if(!$ret)
  295. die($filename);
  296. return ;
  297. }
  298. public function showDetails()
  299. {
  300. echo '<pre>';
  301. print_r($this->_badcalls);
  302. print_r($this->_url_times);
  303. print_r($this->_controller_times);
  304. print_r($this->_action_times);
  305. print_r($this->_model_times);
  306. print_r($this->_method_times);
  307. echo '</pre>';
  308. }
  309. public function loadPhpLog($filename)
  310. {
  311. }
  312. public function mergePhpLog($obj1, $obj2)
  313. {
  314. }
  315. }