Class yii\elasticsearch\DebugPanel

Inheritanceyii\elasticsearch\DebugPanel » yii\debug\Panel
Available since extension's version2.0
Source Code https://github.com/yiisoft/yii2-elasticsearch/blob/master/DebugPanel.php

Debugger panel that collects and displays Elasticsearch queries performed.

Public Properties

Hide inherited properties

Property Type Description Defined By
$db yii\elasticsearch\DebugPanel

Property Details

Hide inherited properties

$db public property
public $db 'elasticsearch'

Method Details

Hide inherited methods

calculateTimings() public method

public void calculateTimings ( )

                public function calculateTimings()
{
    if ($this->_timings !== null) {
        return $this->_timings;
    }
    $messages = isset($this->data['messages']) ? $this->data['messages'] : [];
    $timings = [];
    $stack = [];
    foreach ($messages as $i => $log) {
        list($token, $level, $category, $timestamp) = $log;
        $log[5] = $i;
        if ($level == Logger::LEVEL_PROFILE_BEGIN) {
            $stack[] = $log;
        } elseif ($level == Logger::LEVEL_PROFILE_END) {
            if (($last = array_pop($stack)) !== null && $last[0] === $token) {
                $timings[$last[5]] = [count($stack), $token, $last[3], $timestamp - $last[3], $last[4]];
            }
        }
    }
    $now = microtime(true);
    while (($last = array_pop($stack)) !== null) {
        $delta = $now - $last[3];
        $timings[$last[5]] = [count($stack), $last[0], $last[2], $delta, $last[4]];
    }
    ksort($timings);
    return $this->_timings = $timings;
}

            
getDetail() public method

public void getDetail ( )

                public function getDetail()
{
    //Register YiiAsset in order to inject csrf token in ajax requests
    YiiAsset::register(\Yii::$app->view);
    
    $timings = $this->calculateTimings();
    ArrayHelper::multisort($timings, 3, SORT_DESC);
    $rows = [];
    $i = 0;
    foreach ($timings as $logId => $timing) {
        $duration = sprintf('%.1f ms', $timing[3] * 1000);
        $message = $timing[1];
        $traces = $timing[4];
        if (($pos = mb_strpos($message, "#")) !== false) {
            $url = mb_substr($message, 0, $pos);
            $body = mb_substr($message, $pos + 1);
        } else {
            $url = $message;
            $body = null;
        }
        $traceString = '';
        if (!empty($traces)) {
            $traceString .= Html::ul($traces, [
                'class' => 'trace',
                'item' => function ($trace) {
                    return "<li>{$trace['file']}({$trace['line']})</li>";
                },
            ]);
        }
        $ajaxUrl = Url::to(['elasticsearch-query', 'logId' => $logId, 'tag' => $this->tag]);
        \Yii::$app->view->registerJs(<<<JS
elastic-link-$i').on('click', function () {
var result = $('#elastic-result-$i');
result.html('Sending request...');
result.parent('tr').show();
$.ajax({
    type: "POST",
    url: "$ajaxUrl",
    success: function (data) {
        $('#elastic-time-$i').html(data.time);
        $('#elastic-result-$i').html(data.result);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        $('#elastic-time-$i').html('');
        $('#elastic-result-$i').html('<span style="color: #c00;">Error: ' + errorThrown + ' - ' + textStatus + '</span><br />' + jqXHR.responseText);
    },
    dataType: "json"
});
return false;
ew::POS_READY);
        $runLink = Html::a('run query', '#', ['id' => "elastic-link-$i"]) . '<br/>';
        $rows[] = <<<HTML

<td style="width: 10%;">$duration</td>
<td style="width: 75%;"><div><b>$url</b><br/><p>$body</p>$traceString</div></td>
<td style="width: 15%;">$runLink</td>
>
style="display: none;"><td id="elastic-time-$i"></td><td colspan="3" id="elastic-result-$i"></td></tr>
;
        $i++;
    }
    $rows = implode("\n", $rows);
    return <<<HTML
Elasticsearch Queries</h1>
le class="table table-condensed table-bordered table-striped table-hover" style="table-layout: fixed;">
ad>

<th style="width: 10%;">Time</th>
<th style="width: 75%;">Url / Query</th>
<th style="width: 15%;">Run Query on node</th>
>
ead>
dy>
s
ody>
ble>
;
}

            
getName() public method

public void getName ( )

                public function getName()
{
    return 'Elasticsearch';
}

            
getSummary() public method

public void getSummary ( )

                public function getSummary()
{
    $timings = $this->calculateTimings();
    $queryCount = count($timings);
    $queryTime = 0;
    foreach ($timings as $timing) {
        $queryTime += $timing[3];
    }
    $queryTime = number_format($queryTime * 1000) . ' ms';
    $url = $this->getUrl();
    $output = <<<EOD
 class="yii-debug-toolbar__block">
<a href="$url" title="Executed $queryCount Elasticsearch queries which took $queryTime.">
    ES <span class="yii-debug-toolbar__label yii-debug-toolbar__ajax_counter yii-debug-toolbar__label_info">$queryCount</span> <span class="yii-debug-toolbar__label">$queryTime</span>
</a>
v>

    return $queryCount > 0 ? $output : '';
}

            
init() public method

public void init ( )

                public function init()
{
    $this->actions['elasticsearch-query'] = [
        'class' => 'yii\\elasticsearch\\DebugAction',
        'panel' => $this,
        'db' => $this->db,
    ];
}

            
save() public method

public void save ( )

                public function save()
{
    $target = $this->module->logTarget;
    $messages = $target->filterMessages($target->messages, Logger::LEVEL_PROFILE, ['yii\elasticsearch\Connection::httpRequest']);
    return ['messages' => $messages];
}