You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.3 KiB
123 lines
3.3 KiB
<?php |
|
|
|
/** |
|
* This file is part of CodeIgniter 4 framework. |
|
* |
|
* (c) CodeIgniter Foundation <admin@codeigniter.com> |
|
* |
|
* For the full copyright and license information, please view |
|
* the LICENSE file that was distributed with this source code. |
|
*/ |
|
|
|
namespace CodeIgniter\Debug\Toolbar\Collectors; |
|
|
|
/** |
|
* Events collector |
|
*/ |
|
class Events extends BaseCollector |
|
{ |
|
/** |
|
* Whether this collector has data that can |
|
* be displayed in the Timeline. |
|
* |
|
* @var bool |
|
*/ |
|
protected $hasTimeline = true; |
|
|
|
/** |
|
* Whether this collector needs to display |
|
* content in a tab or not. |
|
* |
|
* @var bool |
|
*/ |
|
protected $hasTabContent = true; |
|
|
|
/** |
|
* Whether this collector has data that |
|
* should be shown in the Vars tab. |
|
* |
|
* @var bool |
|
*/ |
|
protected $hasVarData = false; |
|
|
|
/** |
|
* The 'title' of this Collector. |
|
* Used to name things in the toolbar HTML. |
|
* |
|
* @var string |
|
*/ |
|
protected $title = 'Events'; |
|
|
|
/** |
|
* Child classes should implement this to return the timeline data |
|
* formatted for correct usage. |
|
*/ |
|
protected function formatTimelineData(): array |
|
{ |
|
$data = []; |
|
|
|
$rows = \CodeIgniter\Events\Events::getPerformanceLogs(); |
|
|
|
foreach ($rows as $info) { |
|
$data[] = [ |
|
'name' => 'Event: ' . $info['event'], |
|
'component' => 'Events', |
|
'start' => $info['start'], |
|
'duration' => $info['end'] - $info['start'], |
|
]; |
|
} |
|
|
|
return $data; |
|
} |
|
|
|
/** |
|
* Returns the data of this collector to be formatted in the toolbar |
|
*/ |
|
public function display(): array |
|
{ |
|
$data = [ |
|
'events' => [], |
|
]; |
|
|
|
foreach (\CodeIgniter\Events\Events::getPerformanceLogs() as $row) { |
|
$key = $row['event']; |
|
|
|
if (! array_key_exists($key, $data['events'])) { |
|
$data['events'][$key] = [ |
|
'event' => $key, |
|
'duration' => ($row['end'] - $row['start']) * 1000, |
|
'count' => 1, |
|
]; |
|
|
|
continue; |
|
} |
|
|
|
$data['events'][$key]['duration'] += ($row['end'] - $row['start']) * 1000; |
|
$data['events'][$key]['count']++; |
|
} |
|
|
|
foreach ($data['events'] as &$row) { |
|
$row['duration'] = number_format($row['duration'], 2); |
|
} |
|
|
|
return $data; |
|
} |
|
|
|
/** |
|
* Gets the "badge" value for the button. |
|
*/ |
|
public function getBadgeValue(): int |
|
{ |
|
return count(\CodeIgniter\Events\Events::getPerformanceLogs()); |
|
} |
|
|
|
/** |
|
* Display the icon. |
|
* |
|
* Icon from https://icons8.com - 1em package |
|
*/ |
|
public function icon(): string |
|
{ |
|
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEASURBVEhL7ZXNDcIwDIVTsRBH1uDQDdquUA6IM1xgCA6MwJUN2hk6AQzAz0vl0ETUxC5VT3zSU5w81/mRMGZysixbFEVR0jSKNt8geQU9aRpFmp/keX6AbjZ5oB74vsaN5lSzA4tLSjpBFxsjeSuRy4d2mDdQTWU7YLbXTNN05mKyovj5KL6B7q3hoy3KwdZxBlT+Ipz+jPHrBqOIynZgcZonoukb/0ckiTHqNvDXtXEAaygRbaB9FvUTjRUHsIYS0QaSp+Dw6wT4hiTmYHOcYZsdLQ2CbXa4ftuuYR4x9vYZgdb4vsFYUdmABMYeukK9/SUme3KMFQ77+Yfzh8eYF8+orDuDWU5LAAAAAElFTkSuQmCC'; |
|
} |
|
}
|
|
|