Browse Source

dev 2020-11

Max F 5 years ago
parent
commit
ee62b2e2c8

+ 14 - 8
src/App/Middlewares/DebugBar.php

@@ -12,6 +12,7 @@ use \KarmaFW\Http\Response;
 use \KarmaFW\App\Middlewares\DebugBar\KarmaFwCollector;
 use \KarmaFW\App\Middlewares\DebugBar\SEOCollector;
 use \KarmaFW\App\Middlewares\DebugBar\SqlDbCollector;
+use \KarmaFW\App\Middlewares\DebugBar\SqlDbTimelineCollector;
 use \KarmaFW\App\Middlewares\DebugBar\KarmaMessagesCollector;
 //use \KarmaFW\App\Middlewares\DebugBar\PhpTemplateCollector;
 
@@ -31,6 +32,7 @@ class DebugBar
 			$debugbar->addCollector(new KarmaFwCollector);
 			$debugbar->addCollector(new ConfigCollector);
 			$debugbar->addCollector(new SqlDbCollector);
+			$debugbar->addCollector(new SqlDbTimelineCollector);
 			$debugbar->addCollector(new KarmaMessagesCollector('templates'));
 			$debugbar->addCollector(new SEOCollector);
 
@@ -51,17 +53,21 @@ class DebugBar
 
 			
 			// KarmaFW
-			$data = [
-				'app' => App::getData('app'),
-				'request' => $request,
-				'response' => $response,
-			];
-			$debugbar['KarmaFW']->setData($data);
+			if (isset($debugbar['KarmaFW'])) {
+				$data = [
+					'app' => App::getData('app'),
+					'request' => $request,
+					'response' => $response,
+				];
+				$debugbar['KarmaFW']->setData($data);
+			}
 
 
 			// SEO
-			$seo_data = $this->seoParseContent($response);
-			$debugbar['SEO']->setData($seo_data);
+			if (isset($debugbar['SEO'])) {
+				$seo_data = $this->seoParseContent($response);
+				$debugbar['SEO']->setData($seo_data);
+			}
 
 
 			$response->append( $debugbarRenderer->renderHead() );

+ 37 - 0
src/App/Middlewares/DebugBar/SqlDbTimelineCollector.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace KarmaFW\App\Middlewares\DebugBar;
+
+use \DebugBar\DataCollector\TimeDataCollector;
+use \DebugBar\DataCollector\Renderable;
+
+
+/* USE THIS WITH DEBUGBAR (see http://phpdebugbar.com/ or https://github.com/maximebf/php-debugbar ) */
+
+class SqlDbTimelineCollector extends TimeDataCollector implements Renderable
+{
+	
+    public function getName()
+    {
+        return 'sql_time';
+    }
+
+    public function getWidgets()
+    {
+        return array(
+            "sql_time" => array(
+                "icon" => "clock-o",
+                "tooltip" => "Request Duration",
+                "map" => "sql_time.duration_str",
+                "default" => "'0ms'"
+            ),
+            "SQL timeline" => array(
+                "icon" => "tasks",
+                "widget" => "PhpDebugBar.Widgets.TimelineWidget",
+                "map" => "sql_time",
+                "default" => "{}"
+            )
+        );
+    }
+}
+

+ 2 - 1
src/App/Pipe.php

@@ -3,6 +3,7 @@
 namespace KarmaFW\App;
 
 use \KarmaFW\App;
+use \KarmaFW\App\Tools;
 use \KarmaFW\Http\Request;
 use \KarmaFW\Http\Response;
 
@@ -40,7 +41,7 @@ class Pipe
         $debugbar = App::getData('debugbar');
         if ($debugbar) {
             if (isset($debugbar['time'])) {
-                $debugbar['time']->startMeasure($service_name, $service_name);
+                $debugbar['time']->startMeasure($service_name, [], Tools::getCaller([__FILE__]));
             }
         }
 

+ 30 - 0
src/App/Tools.php

@@ -21,4 +21,34 @@ class Tools
 		return (php_sapi_name() == 'cli');
 	}
 
+
+    public static function getCaller($excludeFiles = [], $formatted = true, $traceOffset = 2)
+    {
+        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 4);
+        $backtrace = array_slice($backtrace, $traceOffset);
+
+        $excludeFiles[] = VENDOR_DIR . '/karmasolutions/karmafw/src/App/Pipe.php';
+        $excludeFiles[] = VENDOR_DIR . '/karmasolutions/karmafw/src/Database/Sql/SqlTable.php';
+        $excludeFiles[] = VENDOR_DIR . '/karmasolutions/karmafw/src/Database/Sql/SqlTableModel.php';
+        $excludeFiles[] = VENDOR_DIR . '/karmasolutions/karmafw/src/Database/Sql/SqlQuery.php';
+
+        foreach ($backtrace as $index => $context) {
+        	if (isset($context['file'])) {
+        		//pre($context['file']); exit;
+        	}
+            if (isset($context['file']) && in_array($context['file'], $excludeFiles)) {
+                continue;
+            }
+        }
+
+        if (!isset($context)) {
+            return null;
+        }
+
+        if ($formatted) {
+            return isset($context) && array_key_exists('file', $context) ? $context['file'] . ':' . $context['line'] : null;
+        }
+
+        return $context;
+    }
 }

+ 8 - 2
src/Database/Sql/SqlQuery.php

@@ -3,6 +3,7 @@
 namespace KarmaFW\Database\Sql;
 
 use \KarmaFW\App;
+use \KarmaFW\App\Tools;
 use \KarmaFW\Database\Sql\SqlResultSetError;
 
 
@@ -149,6 +150,11 @@ class SqlQuery
 		$debugbar = App::getData('debugbar');
 		if ($debugbar) {
 			//$debugbar['sql']->addMessage( preg_replace('/\s+/', ' ', $query) );
+			$query_escaped = preg_replace('/\s+/', ' ', $query);
+
+            if (isset($debugbar['sql_time'])) {
+                $debugbar['sql_time']->startMeasure($query_escaped, [], Tools::getCaller([__FILE__]));
+            }
 			
 			if (isset($debugbar['sql_queries'])) {
 				$error_code = 0;
@@ -160,9 +166,8 @@ class SqlQuery
 					$error_msg = $rs->getErrorMessage();
 				}
 
-
 				$debugbar['sql_queries']->addQuery([
-					'sql' => preg_replace('/\s+/', ' ', $query),
+					'sql' => $query_escaped,
 					'duration' => $this->duration,
 					'duration_str' => formatDuration($this->duration),
 					'row_count' => $rs->getRowsCount(),
@@ -174,6 +179,7 @@ class SqlQuery
 					'is_success' => $is_success,
 					'error_code' => $error_code,
 					'error_message' => $error_msg,
+					//'label' => Tools::getCaller([__FILE__]),
 				]);
 			}
 			

+ 3 - 2
src/Routing/Router.php

@@ -3,6 +3,7 @@
 namespace KarmaFW\Routing;
 
 use \KarmaFW\App;
+use \KarmaFW\App\Tools;
 use \KarmaFW\WebApp;
 use \KarmaFW\App\Pipe;
 use \KarmaFW\Http\Request;
@@ -212,7 +213,7 @@ class Router
         $debugbar = App::getData('debugbar');
         if ($debugbar) {
             if (isset($debugbar['time'])) {
-                $debugbar['time']->startMeasure($service_name, $service_name);
+                $debugbar['time']->startMeasure($service_name, [], Tools::getCaller([__FILE__]));
             }
         }
 
@@ -332,7 +333,7 @@ class Router
         $debugbar = App::getData('debugbar');
         if ($debugbar) {
             if (isset($debugbar['time'])) {
-                $debugbar['time']->startMeasure($service_name, $service_name);
+                $debugbar['time']->startMeasure($service_name, [], Tools::getCaller([__FILE__]));
             }
         }