Added Bagisto Debugbar

This commit is contained in:
jitendra 2020-11-23 18:42:03 +05:30
parent 770b516338
commit 711beb1786
17 changed files with 590 additions and 14 deletions

View File

@ -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"
}
},

View File

@ -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,
],
];

View File

@ -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,
]
];

View File

@ -0,0 +1,11 @@
<?php
namespace Webkul\API\Providers;
use Konekt\Concord\BaseModuleServiceProvider;
class ModuleServiceProvider extends BaseModuleServiceProvider
{
protected $models = [
];
}

View File

@ -0,0 +1,11 @@
<?php
namespace Webkul\Admin\Providers;
use Konekt\Concord\BaseModuleServiceProvider;
class ModuleServiceProvider extends BaseModuleServiceProvider
{
protected $models = [
];
}

View File

@ -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,
]
];

View File

@ -0,0 +1,234 @@
<?php
namespace Webkul\DebugBar\DataCollector;
use Illuminate\Support\Str;
use DebugBar\DataCollector\DataCollector;
use DebugBar\DataCollector\DataCollectorInterface;
use DebugBar\DataCollector\Renderable;
use DebugBar\DataCollector\AssetProvider;
use Konekt\Concord\Facades\Concord;
use Illuminate\Contracts\Events\Dispatcher;
use DebugBar\DataCollector\PDO\PDOCollector;
use Debugbar;
/**
* Collector for Bagisto's Module Collector
*/
class ModuleCollector extends DataCollector implements DataCollectorInterface, Renderable, AssetProvider
{
public $models = [];
public $views = [];
public $queries = [];
public $count = 0;
/**
* @param Dispatcher $events
* @param PDOCollector $pdoCollector
* @return void
*/
public function __construct(
Dispatcher $events,
PDOCollector $pdoCollector
)
{
$events->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'
];
}
}

View File

@ -0,0 +1,23 @@
<?php
namespace Webkul\DebugBar\Providers;
use Illuminate\Support\ServiceProvider;
use Debugbar;
class DebugBarServiceProvider extends ServiceProvider
{
public function boot()
{
}
/**
* Register services.
*
* @return void
*/
public function register()
{
Debugbar::addCollector(app(\Webkul\DebugBar\DataCollector\ModuleCollector::class));
}
}

View File

@ -0,0 +1,91 @@
div.phpdebugbar-widgets-modules table.phpdebugbar-widgets-params {
display: none;
width: 70%;
margin: 10px;
border: 1px solid #ddd;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
border-collapse: collapse;
}
div.phpdebugbar-widgets-modules table.phpdebugbar-widgets-params td {
border: 1px solid #ddd;
text-align: center;
}
div.phpdebugbar-widgets-modules table.phpdebugbar-widgets-params .phpdebugbar-widgets-name {
width: 20%;
font-weight: bold;
}
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-models,
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-views,
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-queries,
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-duration,
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-database {
float: right;
margin-left: 8px;
color: #888;
}
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-models:before,
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-views:before,
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-queries:before,
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-duration:before,
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-database:before {
font-family: PhpDebugbarFontAwesome;
margin-right: 4px;
font-size: 12px;
}
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-models:before {
content: "\f1b3";
}
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-duration:before {
content: "\f017";
}
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-views:before {
content: "\f06c";
}
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-queries:before {
content: "\f1c0";
}
div.phpdebugbar-widgets-modules span.phpdebugbar-widgets-database:before {
content: "\f1c0";
}
div.phpdebugbar-widgets-modules table.phpdebugbar-widgets-params td.phpdebugbar-widgets-name {
width: auto;
}
div.phpdebugbar-widgets-modules table.phpdebugbar-widgets-params td.phpdebugbar-widgets-name .phpdebugbar-fa {
position: relative;
top: 1px;
margin-left: 3px;
}
div.phpdebugbar-widgets-modules {
line-height: 20px;
}
div.phpdebugbar-widgets-modules table.phpdebugbar-widgets-params th,
div.phpdebugbar-widgets-modules table.phpdebugbar-widgets-params td {
padding: 4px 10px;
}
div.phpdebugbar-widgets-modules table.phpdebugbar-widgets-params th {
background-color: #efefef;
}
div.phpdebugbar-widgets-modules table.phpdebugbar-widgets-params td.phpdebugbar-widgets-name {
text-align: right;
vertical-align: top;
white-space: nowrap;
}
div.phpdebugbar-widgets-modules table.phpdebugbar-widgets-params td.phpdebugbar-widgets-value {
text-align: left;
}

View File

@ -0,0 +1,108 @@
(function($) {
var csscls = PhpDebugBar.utils.makecsscls('phpdebugbar-widgets-');
/**
* Widget for the displaying all modules
*
* Options:
* - data
*/
var ModulesWidget = PhpDebugBar.Widgets.ModulesWidget = PhpDebugBar.Widget.extend({
className: csscls('modules'),
render: function() {
this.$list = new PhpDebugBar.Widgets.ListWidget({ itemRenderer: function(li, module) {
$('<strong />').addClass(csscls('module')).addClass(csscls('name')).text(module.name).appendTo(li);
$('<span title="Queries" />').addClass('phpdebugbar-fa phpdebugbar-widgets-queries').text(module.queries.length).appendTo(li);
$('<span title="Views" />').addClass('phpdebugbar-fa phpdebugbar-widgets-views').text(module.views.length).appendTo(li);
$('<span title="Models" />').addClass('phpdebugbar-fa phpdebugbar-widgets-models').text(module.models.length).appendTo(li);
var table = $('<table><tr><th colspan="2">Details</th></tr></table>').addClass(csscls('params')).appendTo(li);
if (module.models && module.models.length) {
table.append(function () {
var $name = $('<td />').addClass(csscls('name')).html('Models');
var $value = $('<td />').addClass(csscls('value'));
var $span = $('<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, '&nbsp;', 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 $('<tr />').append($name, $value);
});
}
if (module.views && module.views.length) {
table.append(function () {
var $name = $('<td />').addClass(csscls('name')).html('Views');
var $value = $('<td />').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 $('<tr />').append($name, $value);
});
}
if (module.queries && module.queries.length) {
table.append(function () {
var $name = $('<td />').addClass(csscls('name')).html('Queries');
var $value = $('<td />').addClass(csscls('value'));
var $queries = new PhpDebugBar.Widgets.ListWidget({ itemRenderer: function(li, query) {
$('<code />').addClass(csscls('sql')).html(PhpDebugBar.Widgets.highlight(query.sql, 'sql')).appendTo(li);
$('<span title="Connection" />').addClass(csscls('database')).text(query.connection).appendTo(li);
$('<span title="Duration" />').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 $('<tr />').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.$);

View File

@ -0,0 +1,11 @@
<?php
namespace Webkul\Payment\Providers;
use Konekt\Concord\BaseModuleServiceProvider;
class ModuleServiceProvider extends BaseModuleServiceProvider
{
protected $models = [
];
}

View File

@ -0,0 +1,11 @@
<?php
namespace Webkul\Paypal\Providers;
use Konekt\Concord\BaseModuleServiceProvider;
class ModuleServiceProvider extends BaseModuleServiceProvider
{
protected $models = [
];
}

View File

@ -0,0 +1,11 @@
<?php
namespace Webkul\Rule\Providers;
use Konekt\Concord\BaseModuleServiceProvider;
class ModuleServiceProvider extends BaseModuleServiceProvider
{
protected $models = [
];
}

View File

@ -0,0 +1,11 @@
<?php
namespace Webkul\Shipping\Providers;
use Konekt\Concord\BaseModuleServiceProvider;
class ModuleServiceProvider extends BaseModuleServiceProvider
{
protected $models = [
];
}

View File

@ -0,0 +1,11 @@
<?php
namespace Webkul\Shop\Providers;
use Konekt\Concord\BaseModuleServiceProvider;
class ModuleServiceProvider extends BaseModuleServiceProvider
{
protected $models = [
];
}

View File

@ -0,0 +1,11 @@
<?php
namespace Webkul\Theme\Providers;
use Konekt\Concord\BaseModuleServiceProvider;
class ModuleServiceProvider extends BaseModuleServiceProvider
{
protected $models = [
];
}

View File

@ -0,0 +1,11 @@
<?php
namespace Webkul\Ui\Providers;
use Konekt\Concord\BaseModuleServiceProvider;
class ModuleServiceProvider extends BaseModuleServiceProvider
{
protected $models = [
];
}