From 711beb1786057ebc7f1ec8247d7408ff9c6224bd Mon Sep 17 00:00:00 2001 From: jitendra Date: Mon, 23 Nov 2020 18:42:03 +0530 Subject: [PATCH] Added Bagisto Debugbar --- composer.json | 3 +- config/app.php | 4 +- config/concord.php | 21 +- .../API/Providers/ModuleServiceProvider.php | 11 + .../src/Providers/ModuleServiceProvider.php | 11 + packages/Webkul/Core/src/Config/concord.php | 21 +- .../src/DataCollector/ModuleCollectior.php | 234 ++++++++++++++++++ .../src/Providers/DebugBarServiceProvider.php | 23 ++ .../src/Resources/widgets/modules/widget.css | 91 +++++++ .../src/Resources/widgets/modules/widget.js | 108 ++++++++ .../src/Providers/ModuleServiceProvider.php | 11 + .../src/Providers/ModuleServiceProvider.php | 11 + .../src/Providers/ModuleServiceProvider.php | 11 + .../src/Providers/ModuleServiceProvider.php | 11 + .../src/Providers/ModuleServiceProvider.php | 11 + .../src/Providers/ModuleServiceProvider.php | 11 + .../src/Providers/ModuleServiceProvider.php | 11 + 17 files changed, 590 insertions(+), 14 deletions(-) create mode 100644 packages/Webkul/API/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Admin/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/DebugBar/src/DataCollector/ModuleCollectior.php create mode 100644 packages/Webkul/DebugBar/src/Providers/DebugBarServiceProvider.php create mode 100644 packages/Webkul/DebugBar/src/Resources/widgets/modules/widget.css create mode 100644 packages/Webkul/DebugBar/src/Resources/widgets/modules/widget.js create mode 100644 packages/Webkul/Payment/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Paypal/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Rule/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Shipping/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Shop/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Theme/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Ui/src/Providers/ModuleServiceProvider.php diff --git a/composer.json b/composer.json index 7e84b6a50..916eacc65 100755 --- a/composer.json +++ b/composer.json @@ -108,7 +108,8 @@ "Webkul\\CMS\\": "packages/Webkul/CMS/src", "Webkul\\Velocity\\": "packages/Webkul/Velocity/src", "Webkul\\BookingProduct\\": "packages/Webkul/BookingProduct/src", - "Webkul\\SocialLogin\\": "packages/Webkul/SocialLogin/src" + "Webkul\\SocialLogin\\": "packages/Webkul/SocialLogin/src", + "Webkul\\DebugBar\\": "packages/Webkul/DebugBar/src" } }, diff --git a/config/app.php b/config/app.php index 802e8bb96..c79026ded 100755 --- a/config/app.php +++ b/config/app.php @@ -280,6 +280,7 @@ return [ Webkul\Velocity\Providers\VelocityServiceProvider::class, Webkul\BookingProduct\Providers\BookingProductServiceProvider::class, Webkul\SocialLogin\Providers\SocialLoginServiceProvider::class, + Webkul\DebugBar\Providers\DebugBarServiceProvider::class, ], /* @@ -337,6 +338,7 @@ return [ 'PDF' => Barryvdh\DomPDF\Facade::class, 'Excel' => Maatwebsite\Excel\Facades\Excel::class, 'Concord' => Konekt\Concord\Facades\Concord::class, - 'Helper' => Konekt\Concord\Facades\Helper::class + 'Helper' => Konekt\Concord\Facades\Helper::class, + 'Debugbar' => Barryvdh\Debugbar\Facade::class, ], ]; \ No newline at end of file diff --git a/config/concord.php b/config/concord.php index 3c38cc352..6730e4739 100755 --- a/config/concord.php +++ b/config/concord.php @@ -12,21 +12,30 @@ return [ * */ + \Webkul\Admin\Providers\ModuleServiceProvider::class, + \Webkul\API\Providers\ModuleServiceProvider::class, \Webkul\Attribute\Providers\ModuleServiceProvider::class, \Webkul\BookingProduct\Providers\ModuleServiceProvider::class, + \Webkul\CartRule\Providers\ModuleServiceProvider::class, + \Webkul\CatalogRule\Providers\ModuleServiceProvider::class, \Webkul\Category\Providers\ModuleServiceProvider::class, \Webkul\Checkout\Providers\ModuleServiceProvider::class, \Webkul\Core\Providers\ModuleServiceProvider::class, + \Webkul\CMS\Providers\ModuleServiceProvider::class, \Webkul\Customer\Providers\ModuleServiceProvider::class, \Webkul\Inventory\Providers\ModuleServiceProvider::class, + \Webkul\Payment\Providers\ModuleServiceProvider::class, + \Webkul\Paypal\Providers\ModuleServiceProvider::class, \Webkul\Product\Providers\ModuleServiceProvider::class, + \Webkul\Rule\Providers\ModuleServiceProvider::class, \Webkul\Sales\Providers\ModuleServiceProvider::class, - \Webkul\Tax\Providers\ModuleServiceProvider::class, - \Webkul\User\Providers\ModuleServiceProvider::class, - \Webkul\CatalogRule\Providers\ModuleServiceProvider::class, - \Webkul\CartRule\Providers\ModuleServiceProvider::class, - \Webkul\CMS\Providers\ModuleServiceProvider::class, - \Webkul\Velocity\Providers\ModuleServiceProvider::class, + \Webkul\Shipping\Providers\ModuleServiceProvider::class, + \Webkul\Shop\Providers\ModuleServiceProvider::class, \Webkul\SocialLogin\Providers\ModuleServiceProvider::class, + \Webkul\Tax\Providers\ModuleServiceProvider::class, + \Webkul\Theme\Providers\ModuleServiceProvider::class, + \Webkul\Ui\Providers\ModuleServiceProvider::class, + \Webkul\User\Providers\ModuleServiceProvider::class, + \Webkul\Velocity\Providers\ModuleServiceProvider::class, ] ]; \ No newline at end of file diff --git a/packages/Webkul/API/Providers/ModuleServiceProvider.php b/packages/Webkul/API/Providers/ModuleServiceProvider.php new file mode 100644 index 000000000..015d47c34 --- /dev/null +++ b/packages/Webkul/API/Providers/ModuleServiceProvider.php @@ -0,0 +1,11 @@ +listen('eloquent.*', function ($event, $models) { + if (Str::contains($event, 'eloquent.retrieved')) { + foreach (array_filter($models) as $model) { + // dd($model, $model->getTable()); + $class = get_class($model); + $this->models[$class] = ($this->models[$class] ?? 0) + 1; + $this->count++; + } + } + }); + + $events->listen('composing:*', function ($view, $data = []) { + if ($data) { + $view = $data[0]; + } + + $this->views[] = $this->trimViewName($view->getName(), $view->getPath()); + }); + + + app()['db']->listen( + function ($query, $bindings = null, $time = null, $connectionName = null) use ($pdoCollector) { + $this->queries[] = [ + 'sql' => $query->sql, + 'duration' => $query->time, + "duration_str" => $pdoCollector->formatDuration($query->time), + "connection" => $query->connection->getDatabaseName() + ]; + } + ); + } + + /** + * @param string $name + * @param string $path + * @return string + */ + public function trimViewName($name, $path) + { + if ($path) { + $path = ltrim(str_replace(base_path(), '', realpath($path)), '/'); + } + + return $path ? sprintf('%s (%s)', $name, $path) : $name; + } + + /** + * {@inheritdoc} + */ + public function collect() + { + $modules = []; + + foreach (Concord::getModules() as $moduleId => $module) { + $modules[] = [ + 'name' => $module->getNamespaceRoot(), + 'models' => $this->getModels($module->getNamespaceRoot()), + 'views' => $this->getTemplates($module->getNamespaceRoot()), + 'queries' => $this->getQueries($module->getNamespaceRoot()), + ]; + } + + // dd($modules); + + $data = [ + 'count' => count($modules), + 'modules' => $modules, + ]; + + return $data; + } + + /** + * @param string $classNamespace + * @return array + */ + public function getModels($classNamespace) + { + $models = []; + + foreach ($this->models as $model => $count) { + if (strpos($model, $classNamespace . '\\') !== false) { + $models[] = $model . ' (' . $count . ')'; + } + } + + return $models; + } + + /** + * @param string $classNamespace + * @return array + */ + public function getTemplates($classNamespace) + { + $viewNamespace = Str::lower(class_basename($classNamespace)); + + $classNamespace = str_replace('\\', '/', $classNamespace) . '/'; + + $views = []; + + foreach ($this->views as $view) { + if (strpos($view, $classNamespace) !== false) { + $views[] = $view; + } elseif (strpos($view, 'resources/themes/' . $viewNamespace . '/') !== false) { + $views[] = $view; + } elseif (strpos($view, 'resources/admin-themes/' . $viewNamespace . '/') !== false) { + $views[] = $view; + } elseif (strpos($view, 'resources/vendor/views/' . $viewNamespace . '/') !== false) { + $views[] = $view; + } + } + + return $views; + } + + /** + * @param string $classNamespace + * @return array + */ + public function getQueries($classNamespace) + { + $moduleTables = $this->getDatabaseTables($classNamespace); + + $queries = []; + + foreach ($this->queries as $query) { + $sqlParts = explode(' ', str_replace('`', '', $query['sql'])); + + $tableName = $sqlParts[array_search('from', $sqlParts) + 1]; + + if (in_array($tableName, $moduleTables)) { + $queries[] = $query; + } + } + + return $queries; + } + + /** + * @param string $classNamespace + * @return array + */ + public function getDatabaseTables($classNamespace) + { + $tables = []; + + foreach (Concord::getModelBindings() as $contract => $model) { + if (strpos($model, $classNamespace . '\\') !== false) { + $tables[] = app($model)->getTable(); + } + } + + return $tables; + } + + /** + * {@inheritDoc} + */ + public function getName() + { + return 'modules'; + } + + /** + * {@inheritDoc} + */ + public function getWidgets() + { + return [ + "modules" => [ + "icon" => "cubes", + "widget" => "PhpDebugBar.Widgets.ModulesWidget", + "map" => "modules", + "default" => "[]", + ], + + "modules:badge" => [ + "map" => "modules.count", + "default" => 0, + ], + ]; + } + + /** + * @return array + */ + public function getAssets() + { + return [ + 'base_path' => '/home/jitendra/www/html/laravel/bagisto/packages/Webkul/DebugBar/src/Resources/', + 'base_url' => '/home/jitendra/www/html/laravel/bagisto/packages/Webkul/DebugBar/src/Resources/', + 'css' => 'widgets/modules/widget.css', + 'js' => 'widgets/modules/widget.js' + ]; + } +} \ No newline at end of file diff --git a/packages/Webkul/DebugBar/src/Providers/DebugBarServiceProvider.php b/packages/Webkul/DebugBar/src/Providers/DebugBarServiceProvider.php new file mode 100644 index 000000000..5dbc8ab88 --- /dev/null +++ b/packages/Webkul/DebugBar/src/Providers/DebugBarServiceProvider.php @@ -0,0 +1,23 @@ +').addClass(csscls('module')).addClass(csscls('name')).text(module.name).appendTo(li); + + $('').addClass('phpdebugbar-fa phpdebugbar-widgets-queries').text(module.queries.length).appendTo(li); + + $('').addClass('phpdebugbar-fa phpdebugbar-widgets-views').text(module.views.length).appendTo(li); + + $('').addClass('phpdebugbar-fa phpdebugbar-widgets-models').text(module.models.length).appendTo(li); + + var table = $('
Details
').addClass(csscls('params')).appendTo(li); + + if (module.models && module.models.length) { + table.append(function () { + var $name = $('').addClass(csscls('name')).html('Models'); + var $value = $('').addClass(csscls('value')); + var $span = $('').addClass('phpdebugbar-text-muted'); + + var index = 0; + var $models = new PhpDebugBar.Widgets.ListWidget({ itemRenderer: function(li, binding) { + var $index = $span.clone().text(index++ + '.'); + li.append($index, ' ', binding).removeClass(csscls('list-item')).addClass(csscls('table-list-item')); + }}); + + $models.set('data', module.models); + + $models.$el + .removeClass(csscls('list')) + .addClass(csscls('table-list')) + .appendTo($value); + + return $('').append($name, $value); + }); + } + + if (module.views && module.views.length) { + table.append(function () { + var $name = $('').addClass(csscls('name')).html('Views'); + var $value = $('').addClass(csscls('value')); + + var $views = new PhpDebugBar.Widgets.ListWidget({ itemRenderer: function(li, view) { + li.append(view).removeClass(csscls('list-item')).addClass(csscls('table-list-item')); + }}); + + $views.set('data', module.views); + $views.$el + .removeClass(csscls('list')) + .addClass(csscls('table-list')) + .appendTo($value); + + return $('').append($name, $value); + }); + } + + if (module.queries && module.queries.length) { + table.append(function () { + var $name = $('').addClass(csscls('name')).html('Queries'); + var $value = $('').addClass(csscls('value')); + + var $queries = new PhpDebugBar.Widgets.ListWidget({ itemRenderer: function(li, query) { + $('').addClass(csscls('sql')).html(PhpDebugBar.Widgets.highlight(query.sql, 'sql')).appendTo(li); + + $('').addClass(csscls('database')).text(query.connection).appendTo(li); + + $('').addClass(csscls('duration')).text(query.duration_str).appendTo(li); + + }}); + + $queries.set('data', module.queries); + $queries.$el + .removeClass(csscls('list')) + .addClass(csscls('table-list')) + .appendTo($value); + + return $('').append($name, $value); + }); + } + + li.css('cursor', 'pointer').click(function() { + if (table.is(':visible')) { + table.hide(); + } else { + table.show(); + } + }); + }}); + + this.$list.$el.appendTo(this.$el); + + this.bindAttr('data', function(data) { + this.$list.set('data', data.modules); + }); + } + }); +})(PhpDebugBar.$); \ No newline at end of file diff --git a/packages/Webkul/Payment/src/Providers/ModuleServiceProvider.php b/packages/Webkul/Payment/src/Providers/ModuleServiceProvider.php new file mode 100644 index 000000000..5dd1dc590 --- /dev/null +++ b/packages/Webkul/Payment/src/Providers/ModuleServiceProvider.php @@ -0,0 +1,11 @@ +