init
This commit is contained in:
76
vendor/yiisoft/yii2-debug/models/Router.php
vendored
Normal file
76
vendor/yiisoft/yii2-debug/models/Router.php
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models;
|
||||
|
||||
use yii\base\Model;
|
||||
use yii\log\Logger;
|
||||
|
||||
/**
|
||||
* Router model
|
||||
*
|
||||
* @author Dmitriy Bashkarev <dmitriy@bashkarev.com>
|
||||
* @since 2.0.8
|
||||
*/
|
||||
class Router extends Model
|
||||
{
|
||||
/**
|
||||
* @var array logged messages.
|
||||
*/
|
||||
public $messages = [];
|
||||
/**
|
||||
* @var string|null info message.
|
||||
*/
|
||||
public $message;
|
||||
/**
|
||||
* @var array logged rules.
|
||||
* ```php
|
||||
* [
|
||||
* [
|
||||
* 'rule' => (string),
|
||||
* 'match' => (bool),
|
||||
* 'parent'=> parent class (string)
|
||||
* ]
|
||||
* ]
|
||||
* ```
|
||||
*/
|
||||
public $logs = [];
|
||||
/**
|
||||
* @var int count, before match.
|
||||
*/
|
||||
public $count = 0;
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
public $hasMatch = false;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
parent::init();
|
||||
$last = null;
|
||||
foreach ($this->messages as $message) {
|
||||
if ($message[1] === Logger::LEVEL_TRACE && is_string($message[0])) {
|
||||
$this->message = $message[0];
|
||||
} elseif (isset($message[0]['rule'], $message[0]['match'])) {
|
||||
if (!empty($last['parent']) && $last['parent'] === $message[0]['rule']) {
|
||||
continue;
|
||||
}
|
||||
$this->logs[] = $message[0];
|
||||
++$this->count;
|
||||
if ($message[0]['match']) {
|
||||
$this->hasMatch = true;
|
||||
}
|
||||
$last = $message[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
149
vendor/yiisoft/yii2-debug/models/UserSwitch.php
vendored
Normal file
149
vendor/yiisoft/yii2-debug/models/UserSwitch.php
vendored
Normal file
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models;
|
||||
|
||||
use Yii;
|
||||
use yii\base\Model;
|
||||
use yii\web\IdentityInterface;
|
||||
use yii\web\User;
|
||||
|
||||
/**
|
||||
* UserSwitch is a model used to temporary logging in another user
|
||||
*
|
||||
* @property User $mainUser This property is read-only.
|
||||
* @property null|User $user This property is read-only.
|
||||
*
|
||||
* @author Semen Dubina <yii2debug@sam002.net>
|
||||
* @since 2.0.10
|
||||
*/
|
||||
class UserSwitch extends Model
|
||||
{
|
||||
/**
|
||||
* @var User user which we are currently switched to
|
||||
*/
|
||||
private $_user;
|
||||
/**
|
||||
* @var User the main user who was originally logged in before switching.
|
||||
*/
|
||||
private $_mainUser;
|
||||
|
||||
|
||||
/**
|
||||
* @var string|User ID of the user component or a user object
|
||||
* @since 2.0.13
|
||||
*/
|
||||
public $userComponent = 'user';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
[['user', 'mainUser'], 'safe']
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array customized attribute labels
|
||||
*/
|
||||
public function attributeLabels()
|
||||
{
|
||||
return [
|
||||
'user' => 'Current User',
|
||||
'mainUser' => 'frontend', 'Main User',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current user
|
||||
* @return null|User
|
||||
*/
|
||||
public function getUser()
|
||||
{
|
||||
if ($this->_user === null) {
|
||||
/* @var $user User */
|
||||
$this->_user = is_string($this->userComponent) ? Yii::$app->get($this->userComponent, false) : $this->userComponent;
|
||||
}
|
||||
return $this->_user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get main user
|
||||
* @return User
|
||||
*/
|
||||
public function getMainUser()
|
||||
{
|
||||
$currentUser = $this->getUser();
|
||||
|
||||
if ($this->_mainUser === null && $currentUser->getIsGuest() === false) {
|
||||
$session = Yii::$app->getSession();
|
||||
if ($session->has('main_user')) {
|
||||
$mainUserId = $session->get('main_user');
|
||||
$mainIdentity = call_user_func([$currentUser->identityClass, 'findIdentity'], $mainUserId);
|
||||
} else {
|
||||
$mainIdentity = $currentUser->identity;
|
||||
}
|
||||
|
||||
$mainUser = clone $currentUser;
|
||||
$mainUser->setIdentity($mainIdentity);
|
||||
$this->_mainUser = $mainUser;
|
||||
}
|
||||
|
||||
return $this->_mainUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch user
|
||||
* @param User $user
|
||||
*/
|
||||
public function setUser(User $user)
|
||||
{
|
||||
// Check if user is currently active one
|
||||
$isCurrent = ($user->getId() === $this->getMainUser()->getId());
|
||||
// Switch identity
|
||||
$this->getUser()->switchIdentity($user->identity);
|
||||
if (!$isCurrent) {
|
||||
Yii::$app->getSession()->set('main_user', $this->getMainUser()->getId());
|
||||
} else {
|
||||
Yii::$app->getSession()->remove('main_user');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch to user by identity
|
||||
* @param IdentityInterface $identity
|
||||
*/
|
||||
public function setUserByIdentity(IdentityInterface $identity)
|
||||
{
|
||||
$user = clone $this->getUser();
|
||||
$user->setIdentity($identity);
|
||||
$this->setUser($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset to main user
|
||||
*/
|
||||
public function reset()
|
||||
{
|
||||
$this->setUser($this->getMainUser());
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if current user is main or not.
|
||||
* @return bool
|
||||
*/
|
||||
public function isMainUser()
|
||||
{
|
||||
$user = $this->getUser();
|
||||
if ($user->getIsGuest()) {
|
||||
return true;
|
||||
}
|
||||
return ($user->getId() === $this->getMainUser()->getId());
|
||||
}
|
||||
}
|
||||
44
vendor/yiisoft/yii2-debug/models/search/Base.php
vendored
Normal file
44
vendor/yiisoft/yii2-debug/models/search/Base.php
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\search;
|
||||
|
||||
use yii\base\Model;
|
||||
use yii\debug\components\search\Filter;
|
||||
use yii\debug\components\search\matchers;
|
||||
|
||||
/**
|
||||
* Base search model
|
||||
*
|
||||
* @author Mark Jebri <mark.github@yandex.ru>
|
||||
* @since 2.0
|
||||
*/
|
||||
class Base extends Model
|
||||
{
|
||||
/**
|
||||
* Adds filtering condition for a given attribute
|
||||
*
|
||||
* @param Filter $filter filter instance
|
||||
* @param string $attribute attribute to filter
|
||||
* @param bool $partial if partial match should be used
|
||||
*/
|
||||
public function addCondition(Filter $filter, $attribute, $partial = false)
|
||||
{
|
||||
$value = $this->$attribute;
|
||||
|
||||
if (mb_strpos($value, '>') !== false) {
|
||||
$value = (int) str_replace('>', '', $value);
|
||||
$filter->addMatcher($attribute, new matchers\GreaterThan(['value' => $value]));
|
||||
|
||||
} elseif (mb_strpos($value, '<') !== false) {
|
||||
$value = (int) str_replace('<', '', $value);
|
||||
$filter->addMatcher($attribute, new matchers\LowerThan(['value' => $value]));
|
||||
} else {
|
||||
$filter->addMatcher($attribute, new matchers\SameAs(['value' => $value, 'partial' => $partial]));
|
||||
}
|
||||
}
|
||||
}
|
||||
80
vendor/yiisoft/yii2-debug/models/search/Db.php
vendored
Normal file
80
vendor/yiisoft/yii2-debug/models/search/Db.php
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\search;
|
||||
|
||||
use yii\data\ArrayDataProvider;
|
||||
use yii\debug\components\search\Filter;
|
||||
|
||||
/**
|
||||
* Search model for current request database queries.
|
||||
*
|
||||
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||
* @author Mark Jebri <mark.github@yandex.ru>
|
||||
* @since 2.0
|
||||
*/
|
||||
class Db extends Base
|
||||
{
|
||||
/**
|
||||
* @var string type of the input search value
|
||||
*/
|
||||
public $type;
|
||||
/**
|
||||
* @var integer query attribute input search value
|
||||
*/
|
||||
public $query;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
[['type', 'query'], 'safe'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function attributeLabels()
|
||||
{
|
||||
return [
|
||||
'type' => 'Type',
|
||||
'query' => 'Query',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data provider with filled models. Filter applied if needed.
|
||||
*
|
||||
* @param array $models data to return provider for
|
||||
* @return \yii\data\ArrayDataProvider
|
||||
*/
|
||||
public function search($models)
|
||||
{
|
||||
$dataProvider = new ArrayDataProvider([
|
||||
'allModels' => $models,
|
||||
'pagination' => false,
|
||||
'sort' => [
|
||||
'attributes' => ['duration', 'seq', 'type', 'query', 'duplicate'],
|
||||
],
|
||||
]);
|
||||
|
||||
if (!$this->validate()) {
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
$filter = new Filter();
|
||||
$this->addCondition($filter, 'type', true);
|
||||
$this->addCondition($filter, 'query', true);
|
||||
$dataProvider->allModels = $filter->filter($models);
|
||||
|
||||
return $dataProvider;
|
||||
}
|
||||
}
|
||||
133
vendor/yiisoft/yii2-debug/models/search/Debug.php
vendored
Normal file
133
vendor/yiisoft/yii2-debug/models/search/Debug.php
vendored
Normal file
@@ -0,0 +1,133 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\search;
|
||||
|
||||
use yii\data\ArrayDataProvider;
|
||||
use yii\debug\components\search\Filter;
|
||||
|
||||
/**
|
||||
* Search model for requests manifest data.
|
||||
*
|
||||
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||
* @author Mark Jebri <mark.github@yandex.ru>
|
||||
* @since 2.0
|
||||
*/
|
||||
class Debug extends Base
|
||||
{
|
||||
/**
|
||||
* @var string tag attribute input search value
|
||||
*/
|
||||
public $tag;
|
||||
/**
|
||||
* @var string ip attribute input search value
|
||||
*/
|
||||
public $ip;
|
||||
/**
|
||||
* @var string method attribute input search value
|
||||
*/
|
||||
public $method;
|
||||
/**
|
||||
* @var integer ajax attribute input search value
|
||||
*/
|
||||
public $ajax;
|
||||
/**
|
||||
* @var string url attribute input search value
|
||||
*/
|
||||
public $url;
|
||||
/**
|
||||
* @var string status code attribute input search value
|
||||
*/
|
||||
public $statusCode;
|
||||
/**
|
||||
* @var integer sql count attribute input search value
|
||||
*/
|
||||
public $sqlCount;
|
||||
/**
|
||||
* @var integer total mail count attribute input search value
|
||||
*/
|
||||
public $mailCount;
|
||||
/**
|
||||
* @var array critical codes, used to determine grid row options.
|
||||
*/
|
||||
public $criticalCodes = [400, 404, 500];
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
[['tag', 'ip', 'method', 'ajax', 'url', 'statusCode', 'sqlCount', 'mailCount'], 'safe'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function attributeLabels()
|
||||
{
|
||||
return [
|
||||
'tag' => 'Tag',
|
||||
'ip' => 'Ip',
|
||||
'method' => 'Method',
|
||||
'ajax' => 'Ajax',
|
||||
'url' => 'url',
|
||||
'statusCode' => 'Status code',
|
||||
'sqlCount' => 'Query Count',
|
||||
'mailCount' => 'Mail Count',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data provider with filled models. Filter applied if needed.
|
||||
* @param array $params an array of parameter values indexed by parameter names
|
||||
* @param array $models data to return provider for
|
||||
* @return \yii\data\ArrayDataProvider
|
||||
*/
|
||||
public function search($params, $models)
|
||||
{
|
||||
$dataProvider = new ArrayDataProvider([
|
||||
'allModels' => $models,
|
||||
'sort' => [
|
||||
'attributes' => ['method', 'ip', 'tag', 'time', 'statusCode', 'sqlCount', 'mailCount'],
|
||||
],
|
||||
'pagination' => [
|
||||
'pageSize' => 50,
|
||||
],
|
||||
]);
|
||||
|
||||
if (!($this->load($params) && $this->validate())) {
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
$filter = new Filter();
|
||||
$this->addCondition($filter, 'tag', true);
|
||||
$this->addCondition($filter, 'ip', true);
|
||||
$this->addCondition($filter, 'method');
|
||||
$this->addCondition($filter, 'ajax');
|
||||
$this->addCondition($filter, 'url', true);
|
||||
$this->addCondition($filter, 'statusCode');
|
||||
$this->addCondition($filter, 'sqlCount');
|
||||
$this->addCondition($filter, 'mailCount');
|
||||
$dataProvider->allModels = $filter->filter($models);
|
||||
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if code is critical.
|
||||
*
|
||||
* @param int $code
|
||||
* @return bool
|
||||
*/
|
||||
public function isCodeCritical($code)
|
||||
{
|
||||
return in_array($code, $this->criticalCodes, false);
|
||||
}
|
||||
}
|
||||
90
vendor/yiisoft/yii2-debug/models/search/Log.php
vendored
Normal file
90
vendor/yiisoft/yii2-debug/models/search/Log.php
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\search;
|
||||
|
||||
use yii\data\ArrayDataProvider;
|
||||
use yii\debug\components\search\Filter;
|
||||
|
||||
/**
|
||||
* Search model for current request log.
|
||||
*
|
||||
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||
* @author Mark Jebri <mark.github@yandex.ru>
|
||||
* @since 2.0
|
||||
*/
|
||||
class Log extends Base
|
||||
{
|
||||
/**
|
||||
* @var string ip attribute input search value
|
||||
*/
|
||||
public $level;
|
||||
/**
|
||||
* @var string method attribute input search value
|
||||
*/
|
||||
public $category;
|
||||
/**
|
||||
* @var integer message attribute input search value
|
||||
*/
|
||||
public $message;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
[['level', 'message', 'category'], 'safe'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function attributeLabels()
|
||||
{
|
||||
return [
|
||||
'level' => 'Level',
|
||||
'category' => 'Category',
|
||||
'message' => 'Message',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data provider with filled models. Filter applied if needed.
|
||||
*
|
||||
* @param array $params an array of parameter values indexed by parameter names
|
||||
* @param array $models data to return provider for
|
||||
* @return \yii\data\ArrayDataProvider
|
||||
*/
|
||||
public function search($params, $models)
|
||||
{
|
||||
$dataProvider = new ArrayDataProvider([
|
||||
'allModels' => $models,
|
||||
'pagination' => false,
|
||||
'sort' => [
|
||||
'attributes' => ['time', 'level', 'category', 'message'],
|
||||
'defaultOrder' => [
|
||||
'time' => SORT_ASC,
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
if (!($this->load($params) && $this->validate())) {
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
$filter = new Filter();
|
||||
$this->addCondition($filter, 'level');
|
||||
$this->addCondition($filter, 'category', true);
|
||||
$this->addCondition($filter, 'message', true);
|
||||
$dataProvider->allModels = $filter->filter($models);
|
||||
|
||||
return $dataProvider;
|
||||
}
|
||||
}
|
||||
124
vendor/yiisoft/yii2-debug/models/search/Mail.php
vendored
Normal file
124
vendor/yiisoft/yii2-debug/models/search/Mail.php
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\search;
|
||||
|
||||
use yii\data\ArrayDataProvider;
|
||||
use yii\debug\components\search\Filter;
|
||||
|
||||
/**
|
||||
* Mail represents the model behind the search form about current send emails.
|
||||
*
|
||||
* @author Mark Jebri <mark.github@yandex.ru>
|
||||
* @since 2.0
|
||||
*/
|
||||
class Mail extends Base
|
||||
{
|
||||
/**
|
||||
* @var string from attribute input search value
|
||||
*/
|
||||
public $from;
|
||||
/**
|
||||
* @var string to attribute input search value
|
||||
*/
|
||||
public $to;
|
||||
/**
|
||||
* @var string reply attribute input search value
|
||||
*/
|
||||
public $reply;
|
||||
/**
|
||||
* @var string cc attribute input search value
|
||||
*/
|
||||
public $cc;
|
||||
/**
|
||||
* @var string bcc attribute input search value
|
||||
*/
|
||||
public $bcc;
|
||||
/**
|
||||
* @var string subject attribute input search value
|
||||
*/
|
||||
public $subject;
|
||||
/**
|
||||
* @var string body attribute input search value
|
||||
*/
|
||||
public $body;
|
||||
/**
|
||||
* @var string charset attribute input search value
|
||||
*/
|
||||
public $charset;
|
||||
/**
|
||||
* @var string headers attribute input search value
|
||||
*/
|
||||
public $headers;
|
||||
/**
|
||||
* @var string file attribute input search value
|
||||
*/
|
||||
public $file;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
[['from', 'to', 'reply', 'cc', 'bcc', 'subject', 'body', 'charset'], 'safe'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function attributeLabels()
|
||||
{
|
||||
return [
|
||||
'from' => 'From',
|
||||
'to' => 'To',
|
||||
'reply' => 'Reply',
|
||||
'cc' => 'Copy receiver',
|
||||
'bcc' => 'Hidden copy receiver',
|
||||
'subject' => 'Subject',
|
||||
'charset' => 'Charset'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data provider with filled models. Filter applied if needed.
|
||||
* @param array $params
|
||||
* @param array $models
|
||||
* @return \yii\data\ArrayDataProvider
|
||||
*/
|
||||
public function search($params, $models)
|
||||
{
|
||||
$dataProvider = new ArrayDataProvider([
|
||||
'allModels' => $models,
|
||||
'pagination' => [
|
||||
'pageSize' => 20,
|
||||
],
|
||||
'sort' => [
|
||||
'attributes' => ['from', 'to', 'reply', 'cc', 'bcc', 'subject', 'body', 'charset'],
|
||||
],
|
||||
]);
|
||||
|
||||
if (!($this->load($params) && $this->validate())) {
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
$filter = new Filter();
|
||||
$this->addCondition($filter, 'from', true);
|
||||
$this->addCondition($filter, 'to', true);
|
||||
$this->addCondition($filter, 'reply', true);
|
||||
$this->addCondition($filter, 'cc', true);
|
||||
$this->addCondition($filter, 'bcc', true);
|
||||
$this->addCondition($filter, 'subject', true);
|
||||
$this->addCondition($filter, 'body', true);
|
||||
$this->addCondition($filter, 'charset', true);
|
||||
$dataProvider->allModels = $filter->filter($models);
|
||||
|
||||
return $dataProvider;
|
||||
}
|
||||
}
|
||||
84
vendor/yiisoft/yii2-debug/models/search/Profile.php
vendored
Normal file
84
vendor/yiisoft/yii2-debug/models/search/Profile.php
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\search;
|
||||
|
||||
use yii\data\ArrayDataProvider;
|
||||
use yii\debug\components\search\Filter;
|
||||
|
||||
/**
|
||||
* Search model for current request profiling log.
|
||||
*
|
||||
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||
* @author Mark Jebri <mark.github@yandex.ru>
|
||||
* @since 2.0
|
||||
*/
|
||||
class Profile extends Base
|
||||
{
|
||||
/**
|
||||
* @var string method attribute input search value
|
||||
*/
|
||||
public $category;
|
||||
/**
|
||||
* @var integer info attribute input search value
|
||||
*/
|
||||
public $info;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
[['category', 'info'], 'safe'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function attributeLabels()
|
||||
{
|
||||
return [
|
||||
'category' => 'Category',
|
||||
'info' => 'Info',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data provider with filled models. Filter applied if needed.
|
||||
*
|
||||
* @param array $params an array of parameter values indexed by parameter names
|
||||
* @param array $models data to return provider for
|
||||
* @return \yii\data\ArrayDataProvider
|
||||
*/
|
||||
public function search($params, $models)
|
||||
{
|
||||
$dataProvider = new ArrayDataProvider([
|
||||
'allModels' => $models,
|
||||
'pagination' => false,
|
||||
'sort' => [
|
||||
'attributes' => ['category', 'seq', 'duration', 'info'],
|
||||
'defaultOrder' => [
|
||||
'duration' => SORT_DESC,
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
if (!($this->load($params) && $this->validate())) {
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
$filter = new Filter();
|
||||
$this->addCondition($filter, 'category', true);
|
||||
$this->addCondition($filter, 'info', true);
|
||||
$dataProvider->allModels = $filter->filter($models);
|
||||
|
||||
return $dataProvider;
|
||||
}
|
||||
}
|
||||
116
vendor/yiisoft/yii2-debug/models/search/User.php
vendored
Normal file
116
vendor/yiisoft/yii2-debug/models/search/User.php
vendored
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\search;
|
||||
|
||||
use yii\base\Model;
|
||||
use yii\data\ActiveDataProvider;
|
||||
use yii\db\ActiveRecord;
|
||||
|
||||
/**
|
||||
* Search model for implementation of IdentityInterface
|
||||
*
|
||||
* @author Semen Dubina <yii2debug@sam002.net>
|
||||
* @since 2.0.10
|
||||
*/
|
||||
class User extends Model
|
||||
{
|
||||
/**
|
||||
* @var Model implementation of IdentityInterface
|
||||
*/
|
||||
public $identityImplement = null;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
if (\Yii::$app->user && \Yii::$app->user->identityClass) {
|
||||
$identityImplementation = new \Yii::$app->user->identityClass();
|
||||
if ($identityImplementation instanceof Model) {
|
||||
$this->identityImplement = $identityImplementation;
|
||||
}
|
||||
}
|
||||
parent::init();
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function __get($name)
|
||||
{
|
||||
return $this->identityImplement->__get($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function __set($name, $value)
|
||||
{
|
||||
return $this->identityImplement->__set($name, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [[array_keys($this->identityImplement->getAttributes()), 'safe']];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return $this->identityImplement->attributes();
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function search($params)
|
||||
{
|
||||
if ($this->identityImplement instanceof ActiveRecord) {
|
||||
return $this->serachActiveDataProvider($params);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search method for ActiveRecord
|
||||
* @param array $params the data array to load model.
|
||||
* @return ActiveDataProvider
|
||||
*/
|
||||
private function serachActiveDataProvider($params)
|
||||
{
|
||||
/** @var ActiveRecord $model */
|
||||
$model = $this->identityImplement;
|
||||
$query = $model::find();
|
||||
|
||||
$dataProvider = new ActiveDataProvider([
|
||||
'query' => $query,
|
||||
]);
|
||||
|
||||
if (!($this->load($params) && $this->validate())) {
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
foreach ($model::getTableSchema()->columns as $attribute => $column) {
|
||||
if ($column->phpType === 'string') {
|
||||
$query->andFilterWhere(['like', $attribute, $model->getAttribute($attribute)]);
|
||||
} else {
|
||||
$query->andFilterWhere([$attribute => $model->getAttribute($attribute)]);
|
||||
}
|
||||
}
|
||||
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
}
|
||||
28
vendor/yiisoft/yii2-debug/models/search/UserSearchInterface.php
vendored
Normal file
28
vendor/yiisoft/yii2-debug/models/search/UserSearchInterface.php
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\search;
|
||||
|
||||
use yii\data\DataProviderInterface;
|
||||
use yii\web\IdentityInterface;
|
||||
|
||||
/**
|
||||
* UserSearchInterface is the interface that should be implemented by a class
|
||||
* providing identity information and search method.
|
||||
*
|
||||
* @author Semen Dubina <yii2debug@sam002.net>
|
||||
* @since 2.0.10
|
||||
*/
|
||||
interface UserSearchInterface extends IdentityInterface
|
||||
{
|
||||
/**
|
||||
* Creates data provider instance with search query applied.
|
||||
* @param array $params the data array to load model.
|
||||
* @return DataProviderInterface
|
||||
*/
|
||||
public function search($params);
|
||||
}
|
||||
167
vendor/yiisoft/yii2-debug/models/timeline/DataProvider.php
vendored
Normal file
167
vendor/yiisoft/yii2-debug/models/timeline/DataProvider.php
vendored
Normal file
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\timeline;
|
||||
|
||||
use yii\data\ArrayDataProvider;
|
||||
use yii\debug\panels\TimelinePanel;
|
||||
|
||||
/**
|
||||
* DataProvider implements a data provider based on a data array.
|
||||
*
|
||||
* @property array $rulers This property is read-only.
|
||||
*
|
||||
* @author Dmitriy Bashkarev <dmitriy@bashkarev.com>
|
||||
* @since 2.0.8
|
||||
*/
|
||||
class DataProvider extends ArrayDataProvider
|
||||
{
|
||||
/**
|
||||
* @var TimelinePanel
|
||||
*/
|
||||
protected $panel;
|
||||
|
||||
|
||||
/**
|
||||
* DataProvider constructor.
|
||||
* @param TimelinePanel $panel
|
||||
* @param array $config
|
||||
*/
|
||||
public function __construct(TimelinePanel $panel, $config = [])
|
||||
{
|
||||
$this->panel = $panel;
|
||||
parent::__construct($config);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
protected function prepareModels()
|
||||
{
|
||||
if (($models = $this->allModels) === null) {
|
||||
return [];
|
||||
}
|
||||
$child = [];
|
||||
foreach ($models as $key => &$model) {
|
||||
$model['timestamp'] *= 1000;
|
||||
$model['duration'] *= 1000;
|
||||
$model['child'] = 0;
|
||||
$model['css']['width'] = $this->getWidth($model);
|
||||
$model['css']['left'] = $this->getLeft($model);
|
||||
$model['css']['color'] = $this->getColor($model);
|
||||
foreach ($child as $id => $timestamp) {
|
||||
if ($timestamp > $model['timestamp']) {
|
||||
++$models[$id]['child'];
|
||||
} else {
|
||||
unset($child[$id]);
|
||||
}
|
||||
}
|
||||
$child[$key] = $model['timestamp'] + $model['duration'];
|
||||
}
|
||||
return $models;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getting HEX color based on model duration
|
||||
* @param array $model
|
||||
* @return string
|
||||
*/
|
||||
public function getColor($model)
|
||||
{
|
||||
$width = isset($model['css']['width']) ? $model['css']['width'] : $this->getWidth($model);
|
||||
foreach ($this->panel->colors as $percent => $color) {
|
||||
if ($width >= $percent) {
|
||||
return $color;
|
||||
}
|
||||
}
|
||||
return '#d6e685';
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offset left item, percentage of the total width
|
||||
* @param array $model
|
||||
* @return float
|
||||
*/
|
||||
public function getLeft($model)
|
||||
{
|
||||
return $this->getTime($model) / ($this->panel->duration / 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns item duration, milliseconds
|
||||
* @param array $model
|
||||
* @return float
|
||||
*/
|
||||
public function getTime($model)
|
||||
{
|
||||
return $model['timestamp'] - $this->panel->start;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns item width percent of the total width
|
||||
* @param array $model
|
||||
* @return float
|
||||
*/
|
||||
public function getWidth($model)
|
||||
{
|
||||
return $model['duration'] / ($this->panel->duration / 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns item, css class
|
||||
* @param array $model
|
||||
* @return string
|
||||
*/
|
||||
public function getCssClass($model)
|
||||
{
|
||||
$class = 'time';
|
||||
$class .= (($model['css']['left'] > 15) && ($model['css']['left'] + $model['css']['width'] > 50)) ? ' right' : ' left';
|
||||
return $class;
|
||||
}
|
||||
|
||||
/**
|
||||
* ruler items, key milliseconds, value offset left
|
||||
* @param int $line number of columns
|
||||
* @return array
|
||||
*/
|
||||
public function getRulers($line = 10)
|
||||
{
|
||||
if ($line == 0) {
|
||||
return [];
|
||||
}
|
||||
$data = [0];
|
||||
$percent = ($this->panel->duration / 100);
|
||||
$row = $this->panel->duration / $line;
|
||||
$precision = $row > 100 ? -2 : -1;
|
||||
for ($i = 1; $i < $line; $i++) {
|
||||
$ms = round($i * $row, $precision);
|
||||
$data[$ms] = $ms / $percent;
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* ```php
|
||||
* [
|
||||
* 0 => string, memory usage (MB)
|
||||
* 1 => float, Y position (percent)
|
||||
* ]
|
||||
* @param array $model
|
||||
* @return array|null
|
||||
*/
|
||||
public function getMemory($model)
|
||||
{
|
||||
if (empty($model['memory'])) {
|
||||
return null;
|
||||
}
|
||||
return [
|
||||
sprintf('%.2f MB', $model['memory'] / 1048576),
|
||||
$model['memory'] / ($this->panel->memory / 100)
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
84
vendor/yiisoft/yii2-debug/models/timeline/Search.php
vendored
Normal file
84
vendor/yiisoft/yii2-debug/models/timeline/Search.php
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\timeline;
|
||||
|
||||
use yii\debug\components\search\Filter;
|
||||
use yii\debug\components\search\matchers\GreaterThanOrEqual;
|
||||
use yii\debug\models\search\Base;
|
||||
use yii\debug\panels\TimelinePanel;
|
||||
|
||||
/**
|
||||
* Search model for timeline data.
|
||||
*
|
||||
* @author Dmitriy Bashkarev <dmitriy@bashkarev.com>
|
||||
* @since 2.0.8
|
||||
*/
|
||||
class Search extends Base
|
||||
{
|
||||
/**
|
||||
* @var string attribute search
|
||||
*/
|
||||
public $category;
|
||||
/**
|
||||
* @var integer attribute search
|
||||
*/
|
||||
public $duration = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
[['category', 'duration'], 'safe'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function attributeLabels()
|
||||
{
|
||||
return [
|
||||
'duration' => 'Duration ≥'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data provider with filled models. Filter applied if needed.
|
||||
*
|
||||
* @param array $params $params an array of parameter values indexed by parameter names
|
||||
* @param TimeLinePanel $panel
|
||||
* @return DataProvider
|
||||
*/
|
||||
public function search($params, $panel)
|
||||
{
|
||||
$models = $panel->models;
|
||||
$dataProvider = new DataProvider($panel, [
|
||||
'allModels' => $models,
|
||||
'sort' => [
|
||||
'attributes' => ['category', 'timestamp']
|
||||
],
|
||||
]);
|
||||
|
||||
if (!($this->load($params) && $this->validate())) {
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
$filter = new Filter();
|
||||
$this->addCondition($filter, 'category', true);
|
||||
if ($this->duration > 0) {
|
||||
$filter->addMatcher('duration', new GreaterThanOrEqual(['value' => $this->duration / 1000]));
|
||||
}
|
||||
$dataProvider->allModels = $filter->filter($models);
|
||||
|
||||
return $dataProvider;
|
||||
}
|
||||
|
||||
}
|
||||
180
vendor/yiisoft/yii2-debug/models/timeline/Svg.php
vendored
Normal file
180
vendor/yiisoft/yii2-debug/models/timeline/Svg.php
vendored
Normal file
@@ -0,0 +1,180 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\debug\models\timeline;
|
||||
|
||||
use yii\base\BaseObject;
|
||||
use yii\debug\panels\TimelinePanel;
|
||||
use yii\helpers\StringHelper;
|
||||
|
||||
/**
|
||||
* Svg is used to draw a graph using SVG
|
||||
*
|
||||
* @author Dmitriy Bashkarev <dmitriy@bashkarev.com>
|
||||
* @since 2.0.8
|
||||
*/
|
||||
class Svg extends BaseObject
|
||||
{
|
||||
/**
|
||||
* @var int Max X coordinate
|
||||
*/
|
||||
public $x = 1920;
|
||||
/**
|
||||
* @var int Max Y coordinate
|
||||
*/
|
||||
public $y = 40;
|
||||
/**
|
||||
* @var string Stroke color
|
||||
*/
|
||||
public $stroke = '#1e6823';
|
||||
/**
|
||||
* @var array Listen messages panels
|
||||
*/
|
||||
public $listenMessages = ['log', 'profiling'];
|
||||
/**
|
||||
* @var array Color indicators svg graph.
|
||||
*/
|
||||
public $gradient = [
|
||||
10 => '#d6e685',
|
||||
60 => '#8cc665',
|
||||
90 => '#44a340',
|
||||
100 => '#1e6823'
|
||||
];
|
||||
/**
|
||||
* @var string Svg template
|
||||
*/
|
||||
public $template = '<svg width="{x}" height="{y}" viewBox="0 0 {x} {y}" preserveAspectRatio="none"><defs>{linearGradient}</defs><g><polygon points="{polygon}" fill="url(#gradient)"/><polyline points="{polyline}" fill="none" stroke="{stroke}" stroke-width="1"/></g></svg>';
|
||||
|
||||
/**
|
||||
* ```php
|
||||
* [
|
||||
* [x, y]
|
||||
* ]
|
||||
* ```
|
||||
* @var array Each point is define by a X and a Y coordinate.
|
||||
*/
|
||||
protected $points = [];
|
||||
/**
|
||||
* @var TimelinePanel
|
||||
*/
|
||||
protected $panel;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function __construct(TimelinePanel $panel, $config = [])
|
||||
{
|
||||
parent::__construct($config);
|
||||
$this->panel = $panel;
|
||||
foreach ($this->listenMessages as $panel) {
|
||||
if (isset($this->panel->module->panels[$panel]->data['messages'])) {
|
||||
$this->addPoints($this->panel->module->panels[$panel]->data['messages']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
if ($this->points === []) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return strtr($this->template, [
|
||||
'{x}' => StringHelper::normalizeNumber($this->x),
|
||||
'{y}' => StringHelper::normalizeNumber($this->y),
|
||||
'{stroke}' => $this->stroke,
|
||||
'{polygon}' => $this->polygon(),
|
||||
'{polyline}' => $this->polyline(),
|
||||
'{linearGradient}' => $this->linearGradient()
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool Has points
|
||||
*/
|
||||
public function hasPoints()
|
||||
{
|
||||
return ($this->points !== []);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $messages log messages. See [[Logger::messages]] for the structure
|
||||
* @return int added points
|
||||
*/
|
||||
protected function addPoints($messages)
|
||||
{
|
||||
$hasPoints = $this->hasPoints();
|
||||
|
||||
$memory = $this->panel->memory / 100; // 1 percent memory
|
||||
$yOne = $this->y / 100; // 1 percent Y coordinate
|
||||
$xOne = $this->panel->duration / $this->x; // 1 percent X coordinate
|
||||
|
||||
$i = 0;
|
||||
foreach ($messages as $message) {
|
||||
if (empty($message[5])) {
|
||||
break;
|
||||
}
|
||||
++$i;
|
||||
$this->points[] = [
|
||||
($message[3] * 1000 - $this->panel->start) / $xOne,
|
||||
$this->y - ($message[5] / $memory * $yOne),
|
||||
];
|
||||
}
|
||||
|
||||
if ($hasPoints && $i) {
|
||||
usort($this->points, function ($a, $b) {
|
||||
return ($a[0] < $b[0]) ? -1 : 1;
|
||||
});
|
||||
}
|
||||
return $i;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string Points attribute for polygon path
|
||||
*/
|
||||
protected function polygon()
|
||||
{
|
||||
$str = "0 $this->y ";
|
||||
foreach ($this->points as $point) {
|
||||
list($x, $y) = $point;
|
||||
$str .= "{$x} {$y} ";
|
||||
}
|
||||
$str .= $this->x - 0.001 . " {$y} {$this->x} {$this->y}";
|
||||
return StringHelper::normalizeNumber($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string Points attribute for polyline path
|
||||
*/
|
||||
protected function polyline()
|
||||
{
|
||||
$str = "0 $this->y ";
|
||||
foreach ($this->points as $point) {
|
||||
list($x, $y) = $point;
|
||||
$str .= "{$x} {$y} ";
|
||||
}
|
||||
$str .= "$this->x {$y}";
|
||||
return StringHelper::normalizeNumber($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
protected function linearGradient()
|
||||
{
|
||||
$gradient = '<linearGradient id="gradient" x1="0" x2="0" y1="1" y2="0">';
|
||||
foreach ($this->gradient as $percent => $color) {
|
||||
$gradient .= '<stop offset="' . StringHelper::normalizeNumber($percent) . '%" stop-color="' . $color . '"></stop>';
|
||||
}
|
||||
return $gradient . '</linearGradient>';
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user