DolQueryCollector.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. use DebugBar\DataCollector\AssetProvider;
  3. use DebugBar\DataCollector\DataCollector;
  4. use DebugBar\DataCollector\Renderable;
  5. use DebugBar\DebugBarException;
  6. dol_include_once('/debugbar/class/TraceableDB.php');
  7. /**
  8. * DolQueryCollector class
  9. */
  10. class DolQueryCollector extends DataCollector implements Renderable, AssetProvider
  11. {
  12. /**
  13. * @var object Database handler
  14. */
  15. protected $db;
  16. /**
  17. * Constructor
  18. */
  19. public function __construct()
  20. {
  21. global $db;
  22. // Replace $db handler with new handler override by TraceableDB
  23. $db = new TraceableDB($db);
  24. $this->db = $db;
  25. }
  26. /**
  27. * Return collected data
  28. *
  29. * @return array Array
  30. */
  31. public function collect()
  32. {
  33. $queries = array();
  34. $totalExecTime = 0;
  35. $totalMemoryUsage = 0;
  36. $totalFailed = 0;
  37. foreach ($this->db->queries as $query) {
  38. $queries[] = array(
  39. 'sql' => $query['sql'],
  40. 'duration' => $query['duration'],
  41. 'duration_str' => round($query['duration'] * 1000, 2),
  42. 'memory' => $query['memory_usage'],
  43. 'is_success' => $query['is_success'],
  44. 'error_code' => $query['error_code'],
  45. 'error_message' => $query['error_message']
  46. );
  47. $totalExecTime += $query['duration'];
  48. $totalMemoryUsage += $query['memory_usage'];
  49. if (!$query['is_success']) {
  50. $totalFailed += 1;
  51. }
  52. }
  53. return array(
  54. 'nb_statements' => count($queries),
  55. 'nb_failed_statements' => $totalFailed,
  56. 'accumulated_duration' => $totalExecTime,
  57. 'memory_usage' => $totalMemoryUsage,
  58. 'statements' => $queries
  59. );
  60. }
  61. /**
  62. * Return collector name
  63. *
  64. * @return string Name
  65. */
  66. public function getName()
  67. {
  68. return 'query';
  69. }
  70. /**
  71. * Return widget settings
  72. *
  73. * @return array Array
  74. */
  75. public function getWidgets()
  76. {
  77. global $langs;
  78. $title = $langs->transnoentities('Database');
  79. return array(
  80. "$title" => array(
  81. "icon" => "arrow-right",
  82. "widget" => "PhpDebugBar.Widgets.SQLQueriesWidget",
  83. "map" => "query",
  84. "default" => "[]"
  85. ),
  86. "$title:badge" => array(
  87. "map" => "query.nb_statements",
  88. "default" => 0
  89. )
  90. );
  91. }
  92. /**
  93. * Return assets
  94. *
  95. * @return array Array
  96. */
  97. public function getAssets()
  98. {
  99. return array(
  100. 'css' => 'widgets/sqlqueries/widget.css',
  101. 'js' => 'widgets/sqlqueries/widget.js'
  102. );
  103. }
  104. }