BioTorrents.de’s version of Gazelle
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.

service_stats.php 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. <?php
  2. #declare(strict_types = 1);
  3. if (!check_perms('site_debug') || !check_perms('admin_clear_cache')) {
  4. error(403);
  5. }
  6. if (isset($_POST['global_flush'])) {
  7. authorize();
  8. $Cache->flush();
  9. }
  10. $DB->query('SHOW GLOBAL STATUS');
  11. $DBStats = $DB->to_array('Variable_name');
  12. $MemStats = $Cache->getStats();
  13. View::show_header("Service Stats"); ?>
  14. <div class="permissions">
  15. <div class="permission_container">
  16. <table>
  17. <tr class="colhead">
  18. <th colspan="2">Service</th>
  19. </tr>
  20. <tr>
  21. <th colspan="2"><strong>Threads (Active)</strong></th>
  22. </tr>
  23. <tr>
  24. <td>Cache:</td>
  25. <td>
  26. <?=number_format($MemStats['threads'])?>
  27. <span class="float_right">(100.000%)</span>
  28. </td>
  29. </tr>
  30. <tr>
  31. <td<?php if ($DBStats['Threads_connected']['Value'] / $DBStats['Threads_created']['Value']> 0.7) {
  32. echo '
  33. class="invalid" ';
  34. } ?>>Database:</td>
  35. <td>
  36. <?=number_format($DBStats['Threads_created']['Value'])?>
  37. <span class="float_right">(<?=number_format(($DBStats['Threads_connected']['Value'] / $DBStats['Threads_created']['Value']) * 100, 3)?>%)</span>
  38. </td>
  39. </tr>
  40. <tr>
  41. <td colspan="2"></td>
  42. </tr>
  43. <tr>
  44. <th colspan="2"><strong>Connections</strong></th>
  45. </tr>
  46. <tr>
  47. <td>Cache:</td>
  48. <td>
  49. <?=number_format($MemStats['total_connections'])?>
  50. </td>
  51. </tr>
  52. <tr>
  53. <td>Database:</td>
  54. <td>
  55. <?=number_format($DBStats['Connections']['Value'])?>
  56. </td>
  57. </tr>
  58. <tr>
  59. <td colspan="2"></td>
  60. </tr>
  61. <tr>
  62. <th colspan="2"><strong>Special</strong></th>
  63. </tr>
  64. <tr>
  65. <td>Cache Current Index:</td>
  66. <td>
  67. <?=number_format($MemStats['curr_items'])?>
  68. </td>
  69. </tr>
  70. <tr>
  71. <td>Cache Total Index:</td>
  72. <td>
  73. <?=number_format($MemStats['total_items'])?>
  74. </td>
  75. </tr>
  76. <tr>
  77. <td<?php if ($MemStats['bytes'] / $MemStats['limit_maxbytes']> 0.85) {
  78. echo ' class="tooltip invalid"
  79. title="Evictions begin when storage exceeds 85%" ';
  80. } ?>>Cache Storage:</td>
  81. <td>
  82. <?=Format::get_size($MemStats['bytes'])?>
  83. <span class="float_right">(<?=number_format(($MemStats['bytes'] / $MemStats['limit_maxbytes']) * 100, 3);?>%)</span>
  84. </td>
  85. </tr>
  86. <tr>
  87. <td colspan="2"></td>
  88. </tr>
  89. <tr>
  90. <th colspan="2"><strong>Utilities</strong></th>
  91. </tr>
  92. <tr>
  93. <td>Cache:</td>
  94. <td>
  95. <form class="delete_form" name="cache" action="" method="post">
  96. <input type="hidden" name="action" value="service_stats" />
  97. <input type="hidden" name="auth"
  98. value="<?=$LoggedUser['AuthKey']?>" />
  99. <input type="hidden" name="global_flush" value="1" />
  100. <input type="submit" value="Flush" />
  101. </form>
  102. </td>
  103. </tr>
  104. </table>
  105. </div>
  106. <div class="permission_container">
  107. <table>
  108. <tr class="colhead">
  109. <th colspan="2">Activity</th>
  110. </tr>
  111. <tr>
  112. <th colspan="2"><strong>Total Reads</strong></th>
  113. </tr>
  114. <tr>
  115. <td>Cache:</td>
  116. <td>
  117. <?=number_format($MemStats['cmd_get'])?>
  118. </td>
  119. </tr>
  120. <tr>
  121. <td>Database:</td>
  122. <td>
  123. <?=number_format($DBStats['Com_select']['Value'])?>
  124. </td>
  125. </tr>
  126. <tr>
  127. <th colspan="2"><strong>Total Writes</strong></th>
  128. </tr>
  129. <tr>
  130. <td>Cache:</td>
  131. <td>
  132. <?=number_format($MemStats['cmd_set'])?>
  133. </td>
  134. </tr>
  135. <tr>
  136. <td>Database:</td>
  137. <td>
  138. <?=number_format($DBStats['Com_insert']['Value'] + $DBStats['Com_update']['Value'])?>
  139. </td>
  140. </tr>
  141. <tr>
  142. <td colspan="2"></td>
  143. </tr>
  144. <tr>
  145. <th colspan="2"><strong>Get/Select (Success)</strong></th>
  146. </tr>
  147. <tr>
  148. <td<?php if ($MemStats['get_hits'] / $MemStats['cmd_get'] < 0.7) {
  149. echo ' class="invalid" ' ;
  150. } ?>>Cache:</td>
  151. <td>
  152. <?=number_format($MemStats['get_hits'])?>
  153. <span class="float_right">(<?=number_format(($MemStats['get_hits'] / $MemStats['cmd_get']) * 100, 3);?>%)</span>
  154. </td>
  155. </tr>
  156. <tr>
  157. <td>Database:</td>
  158. <td>
  159. <?=number_format($DBStats['Com_select']['Value'])?>
  160. <span class="float_right">(100.000%)</span>
  161. </td>
  162. </tr>
  163. <tr>
  164. <th colspan="2"><strong>Set/Insert (Success)</strong></th>
  165. </tr>
  166. <tr>
  167. <td>Cache:</td>
  168. <td>
  169. <?=number_format($MemStats['cmd_set'])?>
  170. <span class="float_right">(100.000%)</span>
  171. </td>
  172. </tr>
  173. <tr>
  174. <td>Database:</td>
  175. <td>
  176. <?=number_format($DBStats['Com_insert']['Value'])?>
  177. <span class="float_right">(100.000%)</span>
  178. </td>
  179. </tr>
  180. <tr>
  181. <th colspan="2"><strong>Increment/Decrement (Success)</strong></th>
  182. </tr>
  183. <tr>
  184. <td<?php if ($MemStats['incr_hits']/($MemStats['incr_hits'] + $MemStats['incr_misses']) < 0.7) {
  185. echo ' class="invalid" ' ;
  186. } ?>>Cache Increment:</td>
  187. <td>
  188. <?=number_format($MemStats['incr_hits'])?>
  189. <span class="float_right">(<?=number_format(($MemStats['incr_hits'] / ($MemStats['incr_hits'] + $MemStats['incr_misses'])) * 100, 3);?>%)</span>
  190. </td>
  191. </tr>
  192. <tr>
  193. <td<?php if ($MemStats['decr_hits'] / ($MemStats['decr_hits'] + $MemStats['decr_misses']) < 0.7) {
  194. echo ' class="invalid" ' ;
  195. } ?>>Cache Decrement:</td>
  196. <td>
  197. <?=number_format($MemStats['decr_hits'])?>
  198. <span class="float_right">(<?=number_format(($MemStats['decr_hits'] / ($MemStats['decr_hits'] + $MemStats['decr_misses'])) * 100, 3);?>%)</span>
  199. </td>
  200. </tr>
  201. <tr>
  202. <th colspan="2"><strong>CAS/Update (Success)</strong></th>
  203. </tr>
  204. <tr>
  205. <td<?php if ($MemStats['cas_hits']> 0 && $MemStats['cas_hits'] / ($MemStats['cas_hits'] + $MemStats['cas_misses'])
  206. < 0.7) {
  207. echo ' class="tooltip invalid" title="More than 30% of the issued CAS commands were unnecessarily wasting time and resources." '
  208. ;
  209. } elseif ($MemStats['cas_hits']==0) {
  210. echo ' class="tooltip notice" title="Disable CAS with the -C parameter and save resources since it is not used." '
  211. ;
  212. } ?>>Cache:</td>
  213. <td>
  214. <?=number_format($MemStats['cas_hits'])?>
  215. <span class="float_right">(
  216. <?php if ($MemStats['cas_hits'] > 0) {
  217. echo number_format(($MemStats['cas_hits'] / ($MemStats['cas_hits'] + $MemStats['cas_misses'])) * 100, 3);
  218. } else {
  219. echo '0.000';
  220. } ?>%)
  221. </span>
  222. </td>
  223. </tr>
  224. <tr>
  225. <td>Database:</td>
  226. <td>
  227. <?=number_format($DBStats['Com_update']['Value'])?>
  228. <span class="float_right">(100.000%)</span>
  229. </td>
  230. </tr>
  231. <tr>
  232. <th colspan="2"><strong>Deletes (Success)</strong></th>
  233. </tr>
  234. <tr>
  235. <td<?php if ($MemStats['delete_hits'] / ($MemStats['delete_hits']+$MemStats['delete_misses']) < 0.7) {
  236. echo ' class="tooltip invalid" title="More than 30% of the issued delete commands were unnecessary wasting time and resources." '
  237. ;
  238. } ?>>Cache:</td>
  239. <td>
  240. <?=number_format($MemStats['delete_hits'])?>
  241. <span class="float_right">(<?=number_format(($MemStats['delete_hits'] / ($MemStats['delete_hits'] + $MemStats['delete_misses'])) * 100, 3);?>%)</span>
  242. </td>
  243. </tr>
  244. <tr>
  245. <td>Database:</td>
  246. <td>
  247. <?=number_format($DBStats['Com_delete']['Value'])?>
  248. <span class="float_right">(100.000%)</span>
  249. </td>
  250. </tr>
  251. <tr>
  252. <td colspan="2"></td>
  253. </tr>
  254. <tr>
  255. <th colspan="2"><strong>Special</strong></th>
  256. </tr>
  257. <tr>
  258. <td<?php if ($MemStats['cmd_flush']> $MemStats['uptime'] / 7 * 24 * 3600) {
  259. echo ' class="tooltip invalid"
  260. title="Flushing the cache on a regular basis defeats the benefits of it, look into using cache transactions,
  261. or deletes instead of global flushing where possible." ';
  262. } ?>>Cache Flushes:</td>
  263. <td>
  264. <?=number_format($MemStats['cmd_flush'])?>
  265. </td>
  266. </tr>
  267. <tr>
  268. <td<?php if ($MemStats['evictions']> 0) {
  269. echo ' class="invalid" ';
  270. } ?>>Cache Evicted:</td>
  271. <td>
  272. <?=number_format($MemStats['evictions'])?>
  273. </td>
  274. </tr>
  275. <tr>
  276. <td<?php if ($DBStats['Slow_queries']['Value']> $DBStats['Questions']['Value'] / 7500) {
  277. echo ' class="tooltip
  278. invalid" title="1/7500 queries is allowed to be slow to minimize performance impact." ';
  279. } ?>>Database Slow:
  280. </td>
  281. <td>
  282. <?=number_format($DBStats['Slow_queries']['Value'])?>
  283. </td>
  284. </tr>
  285. <tr>
  286. <td colspan="2"></td>
  287. </tr>
  288. <tr>
  289. <th colspan="2"><strong>Data Read</strong></th>
  290. </tr>
  291. <tr>
  292. <td>Cache:</td>
  293. <td>
  294. <?=Format::get_size($MemStats['bytes_read'])?>
  295. </td>
  296. </tr>
  297. <tr>
  298. <td>Database:</td>
  299. <td>
  300. <?=Format::get_size($DBStats['Bytes_received']['Value'])?>
  301. </td>
  302. </tr>
  303. <tr>
  304. <th colspan="2"><strong>Data Write</strong></th>
  305. </tr>
  306. <tr>
  307. <td>Cache:</td>
  308. <td>
  309. <?=Format::get_size($MemStats['bytes_written'])?>
  310. </td>
  311. </tr>
  312. <tr>
  313. <td>Database:</td>
  314. <td>
  315. <?=Format::get_size($DBStats['Bytes_sent']['Value'])?>
  316. </td>
  317. </tr>
  318. </table>
  319. </div>
  320. <div class="permission_container">
  321. <table>
  322. <tr class="colhead">
  323. <th colspan="2">Concurrency</th>
  324. </tr>
  325. <tr>
  326. <th colspan="2"><strong>Total Reads</strong></th>
  327. </tr>
  328. <tr>
  329. <td<?php if (($MemStats['cmd_get'] / $MemStats['uptime']) * 5 < $DBStats['Com_select']['Value'] /
  330. $DBStats['Uptime']['Value']) {
  331. echo ' class="invalid" ' ;
  332. } ?>>Cache:</td>
  333. <td>
  334. <?=number_format($MemStats['cmd_get'] / $MemStats['uptime'], 5)?>/s
  335. </td>
  336. </tr>
  337. <tr>
  338. <td>Database:</td>
  339. <td>
  340. <?=number_format($DBStats['Com_select']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
  341. </td>
  342. </tr>
  343. <tr>
  344. <th colspan="2"><strong>Total Writes</strong></th>
  345. </tr>
  346. <tr>
  347. <td<?php if (($MemStats['cmd_set'] / $MemStats['uptime']) * 5 < ($DBStats['Com_insert']['Value'] +
  348. $DBStats['Com_update']['Value']) / $DBStats['Uptime']['Value']) {
  349. echo ' class="invalid" ' ;
  350. } ?>>Cache:</td>
  351. <td>
  352. <?=number_format($MemStats['cmd_set'] / $MemStats['uptime'], 5)?>/s
  353. </td>
  354. </tr>
  355. <tr>
  356. <td>Database:</td>
  357. <td>
  358. <?=number_format(($DBStats['Com_insert']['Value'] + $DBStats['Com_update']['Value']) / $DBStats['Uptime']['Value'], 5)?>/s
  359. </td>
  360. </tr>
  361. <tr>
  362. <td colspan="2"></td>
  363. </tr>
  364. <tr>
  365. <th colspan="2"><strong>Get/Select</strong></th>
  366. </tr>
  367. <tr>
  368. <td>Cache:</td>
  369. <td>
  370. <?=number_format($MemStats['get_hits'] / $MemStats['uptime'], 5)?>/s
  371. </td>
  372. </tr>
  373. <tr>
  374. <td>Database:</td>
  375. <td>
  376. <?=number_format($DBStats['Com_select']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
  377. </td>
  378. </tr>
  379. <tr>
  380. <th colspan="2"><strong>Set/Insert</strong></th>
  381. </tr>
  382. <tr>
  383. <td>Cache:</td>
  384. <td>
  385. <?=number_format($MemStats['cmd_set'] / $MemStats['uptime'], 5)?>/s
  386. </td>
  387. </tr>
  388. <tr>
  389. <td>Database:</td>
  390. <td>
  391. <?=number_format($DBStats['Com_insert']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
  392. </td>
  393. </tr>
  394. <tr>
  395. <th colspan="2"><strong>Increment/Decrement</strong></th>
  396. </tr>
  397. <tr>
  398. <td>Cache Increment:</td>
  399. <td>
  400. <?=number_format($MemStats['incr_hits'] / $MemStats['uptime'], 5)?>/s
  401. </td>
  402. </tr>
  403. <tr>
  404. <td>Cache Decrement:</td>
  405. <td>
  406. <?=number_format($MemStats['decr_hits'] / $MemStats['uptime'], 5)?>/s
  407. </td>
  408. </tr>
  409. <tr>
  410. <th colspan="2"><strong>CAS/Updates</strong></th>
  411. </tr>
  412. <tr>
  413. <td>Cache:</td>
  414. <td>
  415. <?=number_format($MemStats['cas_hits'] / $MemStats['uptime'], 5)?>/s
  416. </td>
  417. </tr>
  418. <tr>
  419. <td>Database:</td>
  420. <td>
  421. <?=number_format($DBStats['Com_update']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
  422. </td>
  423. </tr>
  424. <tr>
  425. <th colspan="2"><strong>Deletes</strong></th>
  426. </tr>
  427. <tr>
  428. <td>Cache:</td>
  429. <td>
  430. <?=number_format($MemStats['delete_hits'] / $MemStats['uptime'], 5)?>/s
  431. </td>
  432. </tr>
  433. <tr>
  434. <td>Database:</td>
  435. <td>
  436. <?=number_format($DBStats['Com_delete']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
  437. </td>
  438. </tr>
  439. <tr>
  440. <td colspan="2"></td>
  441. </tr>
  442. <tr>
  443. <th colspan="2"><strong>Special</strong></th>
  444. </tr>
  445. <tr>
  446. <td>Cache Flushes:</td>
  447. <td>
  448. <?=number_format($MemStats['cmd_flush'] / $MemStats['uptime'], 5)?>/s
  449. </td>
  450. </tr>
  451. <tr>
  452. <td>Cache Evicted:</td>
  453. <td>
  454. <?=number_format($MemStats['evictions'] / $MemStats['uptime'], 5)?>/s
  455. </td>
  456. </tr>
  457. <tr>
  458. <td>Database Slow:</td>
  459. <td>
  460. <?=number_format($DBStats['Slow_queries']['Value'] / $DBStats['Uptime']['Value'], 5)?>/s
  461. </td>
  462. </tr>
  463. <tr>
  464. <td colspan="2"></td>
  465. </tr>
  466. <tr>
  467. <th colspan="2"><strong>Data Read</strong></th>
  468. </tr>
  469. <tr>
  470. <td>Cache:</td>
  471. <td>
  472. <?=Format::get_size($MemStats['bytes_read'] / $MemStats['uptime'])?>/s
  473. </td>
  474. </tr>
  475. <tr>
  476. <td>Database:</td>
  477. <td>
  478. <?=Format::get_size($DBStats['Bytes_received']['Value'] / $DBStats['Uptime']['Value'])?>/s
  479. </td>
  480. </tr>
  481. <tr>
  482. <th colspan="2"><strong>Data Write</strong></th>
  483. </tr>
  484. <tr>
  485. <td>Cache:</td>
  486. <td>
  487. <?=Format::get_size($MemStats['bytes_written'] / $MemStats['uptime'])?>/s
  488. </td>
  489. </tr>
  490. <tr>
  491. <td>Database:</td>
  492. <td><?=Format::get_size($DBStats['Bytes_sent']['Value'] / $DBStats['Uptime']['Value'])?>/s
  493. </td>
  494. </tr>
  495. </table>
  496. </div>
  497. </div>
  498. <?php View::show_footer();