123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599 |
- <?php
- #declare(strict_types = 1);
-
- if (!check_perms('site_debug') || !check_perms('admin_clear_cache')) {
- error(403);
- }
-
- if (isset($_POST['global_flush'])) {
- authorize();
- $Cache->flush();
- }
-
- $DB->query('SHOW GLOBAL STATUS');
- $DBStats = $DB->to_array('Variable_name');
- $MemStats = $Cache->getStats();
-
- View::show_header("Service Stats"); ?>
-
- <div class="permissions">
- <div class="permission_container">
- <table>
- <tr class="colhead">
- <th colspan="2">Service</th>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Threads (Active)</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=number_format($MemStats['threads'])?>
- <span class="float_right">(100.000%)</span>
- </td>
- </tr>
-
- <tr>
- <td<?php if ($DBStats['Threads_connected']['Value'] / $DBStats['Threads_created']['Value']> 0.7) {
- echo '
- class="invalid" ';
- } ?>>Database:</td>
-
- <td>
- <?=number_format($DBStats['Threads_created']['Value'])?>
- <span class="float_right">(<?=number_format(($DBStats['Threads_connected']['Value'] / $DBStats['Threads_created']['Value']) * 100, 3)?>%)</span>
- </td>
- </tr>
-
- <tr>
- <td colspan="2"></td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Connections</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=number_format($MemStats['total_connections'])?>
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Connections']['Value'])?>
- </td>
- </tr>
-
- <tr>
- <td colspan="2"></td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Special</strong></th>
- </tr>
-
- <tr>
- <td>Cache Current Index:</td>
- <td>
- <?=number_format($MemStats['curr_items'])?>
- </td>
- </tr>
-
- <tr>
- <td>Cache Total Index:</td>
- <td>
- <?=number_format($MemStats['total_items'])?>
- </td>
- </tr>
-
- <tr>
- <td<?php if ($MemStats['bytes'] / $MemStats['limit_maxbytes']> 0.85) {
- echo ' class="tooltip invalid"
- title="Evictions begin when storage exceeds 85%" ';
- } ?>>Cache Storage:</td>
-
- <td>
- <?=Format::get_size($MemStats['bytes'])?>
- <span class="float_right">(<?=number_format(($MemStats['bytes'] / $MemStats['limit_maxbytes']) * 100, 3);?>%)</span>
- </td>
- </tr>
-
- <tr>
- <td colspan="2"></td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Utilities</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <form class="delete_form" name="cache" action="" method="post">
- <input type="hidden" name="action" value="service_stats" />
- <input type="hidden" name="auth"
- value="<?=$LoggedUser['AuthKey']?>" />
- <input type="hidden" name="global_flush" value="1" />
- <input type="submit" value="Flush" />
- </form>
- </td>
- </tr>
- </table>
- </div>
-
- <div class="permission_container">
- <table>
- <tr class="colhead">
- <th colspan="2">Activity</th>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Total Reads</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=number_format($MemStats['cmd_get'])?>
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_select']['Value'])?>
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Total Writes</strong></th>
- </tr>
- <tr>
- <td>Cache:</td>
- <td>
- <?=number_format($MemStats['cmd_set'])?>
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_insert']['Value'] + $DBStats['Com_update']['Value'])?>
- </td>
- </tr>
-
- <tr>
- <td colspan="2"></td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Get/Select (Success)</strong></th>
- </tr>
-
- <tr>
- <td<?php if ($MemStats['get_hits'] / $MemStats['cmd_get'] < 0.7) {
- echo ' class="invalid" ' ;
- } ?>>Cache:</td>
-
- <td>
- <?=number_format($MemStats['get_hits'])?>
- <span class="float_right">(<?=number_format(($MemStats['get_hits'] / $MemStats['cmd_get']) * 100, 3);?>%)</span>
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_select']['Value'])?>
- <span class="float_right">(100.000%)</span>
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Set/Insert (Success)</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=number_format($MemStats['cmd_set'])?>
- <span class="float_right">(100.000%)</span>
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_insert']['Value'])?>
- <span class="float_right">(100.000%)</span>
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Increment/Decrement (Success)</strong></th>
- </tr>
-
- <tr>
- <td<?php if ($MemStats['incr_hits']/($MemStats['incr_hits'] + $MemStats['incr_misses']) < 0.7) {
- echo ' class="invalid" ' ;
- } ?>>Cache Increment:</td>
-
- <td>
- <?=number_format($MemStats['incr_hits'])?>
- <span class="float_right">(<?=number_format(($MemStats['incr_hits'] / ($MemStats['incr_hits'] + $MemStats['incr_misses'])) * 100, 3);?>%)</span>
- </td>
- </tr>
-
- <tr>
- <td<?php if ($MemStats['decr_hits'] / ($MemStats['decr_hits'] + $MemStats['decr_misses']) < 0.7) {
- echo ' class="invalid" ' ;
- } ?>>Cache Decrement:</td>
-
- <td>
- <?=number_format($MemStats['decr_hits'])?>
- <span class="float_right">(<?=number_format(($MemStats['decr_hits'] / ($MemStats['decr_hits'] + $MemStats['decr_misses'])) * 100, 3);?>%)</span>
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>CAS/Update (Success)</strong></th>
- </tr>
-
- <tr>
- <td<?php if ($MemStats['cas_hits']> 0 && $MemStats['cas_hits'] / ($MemStats['cas_hits'] + $MemStats['cas_misses'])
- < 0.7) {
- echo ' class="tooltip invalid" title="More than 30% of the issued CAS commands were unnecessarily wasting time and resources." '
- ;
- } elseif ($MemStats['cas_hits']==0) {
- echo ' class="tooltip notice" title="Disable CAS with the -C parameter and save resources since it is not used." '
- ;
- } ?>>Cache:</td>
-
- <td>
- <?=number_format($MemStats['cas_hits'])?>
- <span class="float_right">(
- <?php if ($MemStats['cas_hits'] > 0) {
- echo number_format(($MemStats['cas_hits'] / ($MemStats['cas_hits'] + $MemStats['cas_misses'])) * 100, 3);
- } else {
- echo '0.000';
- } ?>%)
- </span>
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_update']['Value'])?>
- <span class="float_right">(100.000%)</span>
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Deletes (Success)</strong></th>
- </tr>
-
- <tr>
- <td<?php if ($MemStats['delete_hits'] / ($MemStats['delete_hits']+$MemStats['delete_misses']) < 0.7) {
- echo ' class="tooltip invalid" title="More than 30% of the issued delete commands were unnecessary wasting time and resources." '
- ;
- } ?>>Cache:</td>
-
- <td>
- <?=number_format($MemStats['delete_hits'])?>
- <span class="float_right">(<?=number_format(($MemStats['delete_hits'] / ($MemStats['delete_hits'] + $MemStats['delete_misses'])) * 100, 3);?>%)</span>
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_delete']['Value'])?>
- <span class="float_right">(100.000%)</span>
- </td>
- </tr>
-
- <tr>
- <td colspan="2"></td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Special</strong></th>
- </tr>
-
- <tr>
- <td<?php if ($MemStats['cmd_flush']> $MemStats['uptime'] / 7 * 24 * 3600) {
- echo ' class="tooltip invalid"
- title="Flushing the cache on a regular basis defeats the benefits of it, look into using cache transactions,
- or deletes instead of global flushing where possible." ';
- } ?>>Cache Flushes:</td>
-
- <td>
- <?=number_format($MemStats['cmd_flush'])?>
- </td>
- </tr>
-
- <tr>
- <td<?php if ($MemStats['evictions']> 0) {
- echo ' class="invalid" ';
- } ?>>Cache Evicted:</td>
-
- <td>
- <?=number_format($MemStats['evictions'])?>
- </td>
- </tr>
-
- <tr>
- <td<?php if ($DBStats['Slow_queries']['Value']> $DBStats['Questions']['Value'] / 7500) {
- echo ' class="tooltip
- invalid" title="1/7500 queries is allowed to be slow to minimize performance impact." ';
- } ?>>Database Slow:
- </td>
-
- <td>
- <?=number_format($DBStats['Slow_queries']['Value'])?>
- </td>
- </tr>
-
- <tr>
- <td colspan="2"></td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Data Read</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=Format::get_size($MemStats['bytes_read'])?>
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=Format::get_size($DBStats['Bytes_received']['Value'])?>
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Data Write</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=Format::get_size($MemStats['bytes_written'])?>
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=Format::get_size($DBStats['Bytes_sent']['Value'])?>
- </td>
- </tr>
- </table>
- </div>
-
- <div class="permission_container">
- <table>
- <tr class="colhead">
- <th colspan="2">Concurrency</th>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Total Reads</strong></th>
- </tr>
-
- <tr>
- <td<?php if (($MemStats['cmd_get'] / $MemStats['uptime']) * 5 < $DBStats['Com_select']['Value'] /
- $DBStats['Uptime']['Value']) {
- echo ' class="invalid" ' ;
- } ?>>Cache:</td>
-
- <td>
- <?=number_format($MemStats['cmd_get'] / $MemStats['uptime'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_select']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Total Writes</strong></th>
- </tr>
-
- <tr>
- <td<?php if (($MemStats['cmd_set'] / $MemStats['uptime']) * 5 < ($DBStats['Com_insert']['Value'] +
- $DBStats['Com_update']['Value']) / $DBStats['Uptime']['Value']) {
- echo ' class="invalid" ' ;
- } ?>>Cache:</td>
-
- <td>
- <?=number_format($MemStats['cmd_set'] / $MemStats['uptime'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format(($DBStats['Com_insert']['Value'] + $DBStats['Com_update']['Value']) / $DBStats['Uptime']['Value'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td colspan="2"></td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Get/Select</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=number_format($MemStats['get_hits'] / $MemStats['uptime'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_select']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Set/Insert</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=number_format($MemStats['cmd_set'] / $MemStats['uptime'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_insert']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Increment/Decrement</strong></th>
- </tr>
-
- <tr>
- <td>Cache Increment:</td>
- <td>
- <?=number_format($MemStats['incr_hits'] / $MemStats['uptime'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td>Cache Decrement:</td>
- <td>
- <?=number_format($MemStats['decr_hits'] / $MemStats['uptime'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>CAS/Updates</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=number_format($MemStats['cas_hits'] / $MemStats['uptime'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_update']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Deletes</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=number_format($MemStats['delete_hits'] / $MemStats['uptime'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=number_format($DBStats['Com_delete']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td colspan="2"></td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Special</strong></th>
- </tr>
-
- <tr>
- <td>Cache Flushes:</td>
- <td>
- <?=number_format($MemStats['cmd_flush'] / $MemStats['uptime'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td>Cache Evicted:</td>
- <td>
- <?=number_format($MemStats['evictions'] / $MemStats['uptime'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td>Database Slow:</td>
- <td>
- <?=number_format($DBStats['Slow_queries']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
- </td>
- </tr>
-
- <tr>
- <td colspan="2"></td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Data Read</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=Format::get_size($MemStats['bytes_read'] / $MemStats['uptime'])?>/s
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td>
- <?=Format::get_size($DBStats['Bytes_received']['Value'] / $DBStats['Uptime']['Value'])?>/s
- </td>
- </tr>
-
- <tr>
- <th colspan="2"><strong>Data Write</strong></th>
- </tr>
-
- <tr>
- <td>Cache:</td>
- <td>
- <?=Format::get_size($MemStats['bytes_written'] / $MemStats['uptime'])?>/s
- </td>
- </tr>
-
- <tr>
- <td>Database:</td>
- <td><?=Format::get_size($DBStats['Bytes_sent']['Value'] / $DBStats['Uptime']['Value'])?>/s
- </td>
- </tr>
- </table>
- </div>
- </div>
- <?php View::show_footer();
|