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.
124 lines
3.3 KiB
124 lines
3.3 KiB
1 year ago
|
<?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';
|
||
|
}
|
||
|
}
|