Skip to content

Commit 705c9bd

Browse files
erikn69barryvdh
andauthored
Collect other eloquent model events (#1781)
* Collect other eloquent model events * Fix JobsCollector tests * Support summary badges on ModelsCollector * remove `eloquent.restored` event * Update ModelsCollectorTest.php * Update JobsCollectorTest.php * Update ModelsCollectorTest.php * Update JobsCollectorTest.php * Update JobsCollectorTest.php --------- Co-authored-by: Barry vd. Heuvel <barryvdh@gmail.com>
1 parent e7a8b8b commit 705c9bd

File tree

5 files changed

+75
-38
lines changed

5 files changed

+75
-38
lines changed

src/LaravelDebugbar.php

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -470,11 +470,16 @@ function (\Illuminate\Database\Events\ConnectionEstablished $event) {
470470
if ($this->shouldCollect('models', true) && $events) {
471471
try {
472472
$this->addCollector(new ObjectCountCollector('models'));
473-
$events->listen('eloquent.retrieved:*', function ($event, $models) {
474-
foreach (array_filter($models) as $model) {
475-
$this['models']->countClass($model);
476-
}
477-
});
473+
$eventList = ['retrieved', 'created', 'updated', 'deleted'];
474+
$this['models']->setKeyMap(array_combine($eventList, array_map('ucfirst', $eventList)));
475+
$this['models']->collectCountSummary(true);
476+
foreach ($eventList as $event) {
477+
$events->listen("eloquent.{$event}: *", function ($event, $models) {
478+
$event = explode(': ', $event);
479+
$count = count(array_filter($models));
480+
$this['models']->countClass($event[1], $count, explode('.', $event[0])[1]);
481+
});
482+
}
478483
} catch (Exception $e) {
479484
$this->addCollectorException('Cannot add Models Collector', $e);
480485
}

src/Resources/laravel-debugbar.css

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,8 @@ div.phpdebugbar .phpdebugbar-header select {
227227
}
228228

229229
dl.phpdebugbar-widgets-kvlist dt,
230-
dl.phpdebugbar-widgets-kvlist dd {
230+
dl.phpdebugbar-widgets-kvlist dd,
231+
table.phpdebugbar-widgets-tablevar td {
231232
min-height: 20px;
232233
line-height: 20px;
233234
padding: 4px 5px 5px;
@@ -239,7 +240,8 @@ dl.phpdebugbar-widgets-kvlist dd.phpdebugbar-widgets-value.phpdebugbar-widgets-p
239240
background: transparent;
240241
}
241242

242-
dl.phpdebugbar-widgets-kvlist dt {
243+
dl.phpdebugbar-widgets-kvlist dt,
244+
table.phpdebugbar-widgets-tablevar td:first-child {
243245
width: calc(25% - 10px);
244246
}
245247

@@ -459,7 +461,8 @@ div.phpdebugbar-widgets-sqlqueries table.phpdebugbar-widgets-params td.phpdebugb
459461
margin-left: 3px;
460462
}
461463

462-
ul.phpdebugbar-widgets-list li.phpdebugbar-widgets-list-item:nth-child(even) {
464+
ul.phpdebugbar-widgets-list li.phpdebugbar-widgets-list-item:nth-child(even),
465+
table.phpdebugbar-widgets-tablevar tr:nth-child(even) {
463466
background-color: var(--debugbar-background-alt);
464467
}
465468

@@ -476,6 +479,10 @@ div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugb
476479
float: left;
477480
}
478481

482+
table.phpdebugbar-widgets-tablevar td {
483+
border: 0;
484+
}
485+
479486
div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-info {
480487
color: #1299DA;
481488
}

src/Support/Clockwork/Converter.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,16 @@ public function convert($data)
117117
$output['modelsCreated'] = [];
118118
$output['modelsUpdated'] = [];
119119
$output['modelsDeleted'] = [];
120-
$output['modelsRetrieved'] = $data['models']['data'];
120+
$output['modelsRetrieved'] = [];
121+
122+
foreach ($data['models']['data'] as $model => $value) {
123+
foreach ($value as $event => $count) {
124+
$eventKey = 'models' . ucfirst($event);
125+
if (isset($output[$eventKey])) {
126+
$output[$eventKey][$model] = $count;
127+
}
128+
}
129+
}
121130
}
122131

123132
if (isset($data['views']['templates'])) {

tests/DataCollector/JobsCollectorTest.php

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,27 +34,28 @@ public function testItCollectsDispatchedJobs()
3434
/** @var \DebugBar\DataCollector\ObjectCountCollector $collector */
3535
$collector = debugbar()->getCollector('jobs');
3636
$collector->setXdebugLinkTemplate('');
37+
$collector->setKeyMap([]);
38+
$data = [];
3739

3840
$this->assertEquals(
3941
[
40-
'data' => [],
42+
'data' => $data,
4143
'count' => 0,
4244
'is_counter' => true,
43-
'key_map' => ['value' => 'Count']
45+
'key_map' => []
4446
],
4547
$collector->collect()
4648
);
4749

4850
OrderShipped::dispatch(1);
4951

52+
$data[OrderShipped::class] = ['value' => 1];
5053
$this->assertEquals(
5154
[
52-
'data' => [
53-
OrderShipped::class => ['value' => 1]
54-
],
55+
'data' => $data,
5556
'count' => 1,
5657
'is_counter' => true,
57-
'key_map' => ['value' => 'Count']
58+
'key_map' => []
5859
],
5960
$collector->collect()
6061
);
@@ -63,15 +64,13 @@ public function testItCollectsDispatchedJobs()
6364
dispatch(new SendNotification());
6465
dispatch(new SendNotification());
6566

67+
$data[SendNotification::class] = ['value' => 3];
6668
$this->assertEquals(
6769
[
68-
'data' => [
69-
OrderShipped::class => ['value' => 1],
70-
SendNotification::class => ['value' => 3]
71-
],
70+
'data' => $data,
7271
'count' => 4,
7372
'is_counter' => true,
74-
'key_map' => ['value' => 'Count']
73+
'key_map' => []
7574
],
7675
$collector->collect()
7776
);

tests/DataCollector/ModelsCollectorTest.php

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,19 @@ class ModelsCollectorTest extends TestCase
1515
public function testItCollectsRetrievedModels()
1616
{
1717
$this->loadLaravelMigrations();
18-
1918
debugbar()->boot();
2019

2120
/** @var \DebugBar\DataCollector\ObjectCountCollector $collector */
2221
$collector = debugbar()->getCollector('models');
2322
$collector->setXdebugLinkTemplate('');
23+
$collector->collectCountSummary(false);
24+
$collector->setKeyMap([]);
25+
$data = [];
26+
27+
$this->assertEquals(
28+
['data' => $data, 'key_map' => [], 'count' => 0, 'is_counter' => true],
29+
$collector->collect()
30+
);
2431

2532
User::create([
2633
'name' => 'John Doe',
@@ -34,46 +41,56 @@ public function testItCollectsRetrievedModels()
3441
'password' => Hash::make('password'),
3542
]);
3643

44+
$data[User::class] = ['created' => 2];
3745
$this->assertEquals(
3846
[
39-
'data' => [],
40-
'count' => 0,
47+
'data' => $data,
48+
'count' => 2,
4149
'is_counter' => true,
4250
'key_map' => [
43-
'value' => 'Count'
4451
],
4552
],
4653
$collector->collect()
4754
);
4855

49-
User::first();
56+
$user = User::first();
57+
58+
$data[User::class]['retrieved'] = 1;
59+
$this->assertEquals(
60+
['data' => $data, 'key_map' => [], 'count' => 3, 'is_counter' => true],
61+
$collector->collect()
62+
);
63+
64+
$user->update(['name' => 'Jane Doe']);
5065

66+
$data[User::class]['updated'] = 1;
5167
$this->assertEquals(
5268
[
53-
'data' => [
54-
User::class => ['value' => 1]
55-
],
56-
'count' => 1,
69+
'data' => $data,
70+
'count' => 4,
5771
'is_counter' => true,
58-
'key_map' => [
59-
'value' => 'Count'
60-
],
72+
'key_map' => [],
6173
],
6274
$collector->collect()
6375
);
6476

6577
Person::all();
6678

79+
$data[Person::class] = ['retrieved' => 2];
80+
$this->assertEquals(
81+
['data' => $data, 'key_map' => [], 'count' => 6, 'is_counter' => true],
82+
$collector->collect()
83+
);
84+
85+
$user->delete();
86+
87+
$data[User::class]['deleted'] = 1;
6788
$this->assertEquals(
6889
[
69-
'data' => [
70-
User::class => ['value' => 1],
71-
Person::class => ['value' => 2]
72-
],
73-
'count' => 3,
90+
'data' => $data,
91+
'count' => 7,
7492
'is_counter' => true,
7593
'key_map' => [
76-
'value' => 'Count'
7794
]
7895
],
7996
$collector->collect()

0 commit comments

Comments
 (0)