trace.class.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. /**
  3. * The trace class file of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  6. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author Lu Fei <lufei@easycorp.ltd>
  8. * @package trace
  9. * @link https://www.zentao.net
  10. */
  11. class trace
  12. {
  13. /**
  14. * @var array
  15. */
  16. public $trace = array();
  17. protected $app;
  18. protected $dao;
  19. public function __construct()
  20. {
  21. global $app, $dao;
  22. $this->app = $app;
  23. $this->dao = $dao;
  24. }
  25. /**
  26. * 获取请求信息。
  27. * Get request info.
  28. *
  29. * @return void
  30. */
  31. public function getRequestInfo()
  32. {
  33. $this->trace['request'] = array(
  34. 'start' => date('Y-m-d H:i:s', (int)$this->app->startTime),
  35. 'url' => $this->app->getURI(true),
  36. 'protocol' => $this->app->server->server_protocol,
  37. 'method' => $this->app->server->request_method,
  38. 'timeUsed' => round(getTime() - $this->app->startTime, 4) * 1000,
  39. 'memory' => round(memory_get_peak_usage() / 1024, 1),
  40. 'querys' => count(dbh::$queries),
  41. 'caches' => 0,
  42. 'files' => count(get_included_files()),
  43. 'session' => session_id(),
  44. 'php' => phpversion()
  45. );
  46. }
  47. /**
  48. * 获取请求加载的文件。
  49. * Get request files.
  50. *
  51. * @return void
  52. */
  53. public function getRequestFiles()
  54. {
  55. $this->trace['files'] = get_included_files();
  56. }
  57. /**
  58. * 获取请求的 SQL 语句。
  59. * Get request SQLs.
  60. *
  61. * @return void
  62. */
  63. public function getRequestSqls()
  64. {
  65. $this->trace['sqlQuery'] = dbh::$queries;
  66. }
  67. /**
  68. * 获取请求的 SQL profiles。
  69. * Get request SQL profiles.
  70. *
  71. * @return array
  72. */
  73. public function getSQLProfiles()
  74. {
  75. $this->trace['profiles'] = $this->dao->getProfiles();
  76. }
  77. /**
  78. * 生成请求 Trace。
  79. * Generate request trace.
  80. *
  81. * @return array
  82. */
  83. public function getTrace()
  84. {
  85. $this->getRequestInfo();
  86. $this->getRequestFiles();
  87. $this->getRequestSqls();
  88. $this->getSQLProfiles();
  89. return $this->trace;
  90. }
  91. public function __toString()
  92. {
  93. return json_encode($this->getTrace());
  94. }
  95. }