ecoco/magento_profiler

View on GitHub
app/design/frontend/base/default/template/ecocode_profiler/collector/model/panel.phtml

Summary

Maintainability
Test Coverage
<?php
/** @var Ecocode_Profiler_Model_Collector_ModelDataCollector $collector */
$collector  = $this->getCollector();
$operations = ['save', 'delete', 'load'];

/** @var Ecocode_Profiler_Helper_Renderer $rendererHelper */
$rendererHelper = Mage::helper('ecocode_profiler/renderer');
?>


<h2>Model CRUD metrics</h2>
<p class="help">
    All model <strong>->load</strong> calls. Collection loads are not included
</p>
<div class="metrics">
    <?php foreach ($collector->getMetric() as $name => $value): ?>
        <div class="metric">
            <span class="value"><?php echo $value ?></span>
            <span class="label"><?php echo ucfirst(str_replace('_', ' ', $name)) ?> count</span>
        </div>
    <?php endforeach; ?>
    <div class="metric">
        <span class="value"><?php echo sprintf('%0.2f', $collector->getTotalTime() * 1000) ?> ms</span>
        <span class="label">Total time</span>
    </div>
</div>

<div class="sf-tabs">
    <div class="tab">
        <?php $callLog = $collector->getCallLog(); ?>
        <h3 class="tab-title">
            All
            <span class="badge"><?php echo count($callLog) ?></span>
        </h3>
        <div id="all-crud-operations" class="tab-content">
            <strong>Operation: </strong>
            <?php foreach ($operations as $operation): ?>
                <span data-toggle="crud-operation" data-operation="<?php echo $operation ?>" class="label">
                    <strong><?php echo strtoupper($operation) ?></strong>
                    <span class="count">
                        (<span><?php echo $collector->getMetric($operation) ?></span>)
                    </span>
                </span>
            <?php endforeach; ?>
            <table class="sortable-table">
                <thead>
                <tr>
                    <th>#</th>
                    <th>Action</th>
                    <th data-sort="float">Time</th>
                    <th style="width:100%;">Class</th>
                </tr>
                </thead>
                <tbody>
                <?php $prefix = 'all-'; ?>

                <?php foreach ($callLog as $index => $log): ?>

                    <tr data-operation="<?php echo $log['action'] ?>">
                        <td class="nowrap"><?php echo $index + 1 ?></td>
                        <td><?php echo $log['action'] ?></td>
                        <td class="nowrap"><?php echo sprintf('%0.2f', $log['time'] * 1000) ?> ms</td>
                        <td>
                            <?php echo $log['class'] ?><br>
                            <div class="text-small font-normal">
                                <strong><?php echo $log['class_group'] ?></strong>
                                <?php if (isset($log['trace'])): ?>
                                    <a href="#" class="sf-toggle link-inverse"
                                       data-toggle-selector="#stack-<?php echo $prefix . $index ?>"
                                       data-toggle-alt-content="Hide stack trace">Show trace</a>
                                <?php endif; ?>
                            </div>
                            <?php if (isset($log['trace'])): ?>
                                <?php echo $rendererHelper->renderCallStack($prefix . $index, $log['trace']) ?>
                            <?php endif; ?>
                        </td>
                    </tr>

                <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>
    <div class="tab">
        <?php $loadLoopCalls = $collector->getLoadLoopCalls(); ?>
        <h3 class="tab-title">
            Load calls in loops
            <span class="badge"><?php echo count($loadLoopCalls) ?></span>
        </h3>
        <div class="tab-content">
            <p class="help">
                Calling <strong>->load</strong> within a "loop" is a sign of bad coding style and should be fixed!
            </p>
            <?php if (!$loadLoopCalls): ?>
                <div class="empty">
                    <p>No load calls in loops detected</p>
                </div>
            <?php else: ?>
                <table>
                    <thead>
                    <tr>
                        <th>#</th>
                        <th>Count</th>
                        <th>Total time</th>
                        <th style="width:100%;">Class</th>
                    </tr>
                    </thead>
                    <tbody>
                    <?php $prefix = 'loop-'; ?>

                    <?php foreach ($loadLoopCalls as $index => $log): ?>

                        <tr>
                            <td class="nowrap"><?php echo $index + 1 ?></td>
                            <td class="nowrap"><?php echo $log['count'] ?></td>
                            <td class="nowrap"><?php echo sprintf('%0.2f', $log['total_time'] * 1000) ?> ms</td>
                            <td>
                                <?php echo $log['class'] ?><br>
                                <div class="text-small font-normal">
                                    <strong><?php echo $log['class_group'] ?></strong>
                                    <?php if (isset($log['trace'])): ?>
                                        <a href="#" class="sf-toggle link-inverse"
                                           data-toggle-selector="#stack-<?php echo $prefix . $index ?>"
                                           data-toggle-alt-content="Hide stack trace">Show trace</a>
                                    <?php endif; ?>
                                </div>
                                <?php if (isset($log['trace'])): ?>
                                    <?php echo $rendererHelper->renderCallStack($prefix . $index, $log['trace']) ?>
                                <?php endif; ?>
                            </td>
                        </tr>

                    <?php endforeach; ?>
                    </tbody>
                </table>
            <?php endif; ?>

        </div>
    </div>
</div>
<script>
    $(function () {
        var allOperations  = $('#all-crud-operations'),
            crudOperations = allOperations.find('span[data-toggle="crud-operation"]');


        crudOperations.click(function () {
            var $this      = $(this),
                operation  = $this.data('operation'),
                makeActive = !$this.hasClass('status-success');

            crudOperations.removeClass('status-success');
            allOperations.removeAttr('data-operation');

            if (makeActive) {
                $this.addClass('status-success');
                allOperations.attr('data-operation', operation);
            }
        });
    });
</script>
<style>
    #all-crud-operations span[data-toggle="crud-operation"] {
        cursor: pointer;
    }

    <?php foreach ($operations as $name): ?>
    #all-crud-operations[data-operation="<?php echo $name ?>"] tbody > tr:not([data-operation="<?php echo $name ?>"]) {
        display: none;
    }

    <?php endforeach;?>
</style>