PageRenderTime 58ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/system/application/views/header_admin.php

https://bitbucket.org/themattreid/kontrollbase
PHP | 574 lines | 533 code | 28 blank | 13 comment | 58 complexity | 4c4bcf19c541c53b0ddd3219aedc0336 MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. /**
  3. * Kontrollbase
  4. *
  5. * An open source MySQL monitoring and analytics application
  6. *
  7. * @package Kontrollbase
  8. * ID: $Id: header_admin.php 332 2011-04-28 23:46:06Z themattreid $
  9. * @copyright Copyright (c) 2009 Matt Reid, Kontrollbase LLC
  10. * @license http://kontrollsoft.com/kontrollbase/userguide/general-LICENSE.php
  11. * @link http://kontrollbase.com
  12. */
  13. function head(
  14. $root,
  15. $server_list,
  16. $servers,
  17. $overview,
  18. $summary,
  19. $data_size,
  20. $index_size,
  21. $total_size,
  22. $data,
  23. $news) {
  24. $nroot = substr_replace($root,"",-1);
  25. print<<<HEAD
  26. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  27. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
  28. <head>
  29. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  30. <title>Kontrollbase 2.0.1 - MySQL Monitoring</title>
  31. <link rel="stylesheet" type="text/css" href="$nroot/includes/style.css" />
  32. <link rel="stylesheet" type="text/css" href="$nroot/includes/extjs/resources/css/ext-all.css" />
  33. <link rel="stylesheet" type="text/css" href="$nroot/includes/extjs/resources/css/xtheme-slate.css" />
  34. <link rel="stylesheet" type="text/css" href="$nroot/includes/extjs/resources/css/kb_extras.css" />
  35. <style type="text/css">
  36. .settings {
  37. background-image:url('$nroot/includes/images/folder_wrench.png');
  38. }
  39. .nav {
  40. background-image:url('$nroot/includes/images/folder_go.png');
  41. }
  42. </style>
  43. HEAD;
  44. echo google_analytics();
  45. print<<<HEAD
  46. <script type="text/javascript" src="$nroot/includes/browser_detect.js"></script>
  47. <script type="text/javascript" src="$nroot/includes/extjs/adapter/ext/ext-base.js"></script>
  48. <script type="text/javascript" src="$nroot/includes/extjs/ext-all.js"></script>
  49. <script type="text/javascript" src="$nroot/includes/extjs/miframe.js"></script>
  50. <script type="text/javascript">
  51. Ext.onReady(function() {
  52. Ext.QuickTips.init();
  53. HEAD;
  54. print "
  55. var newsData = [";
  56. $r=0;
  57. $u=count($news);
  58. foreach($news as $key => $value) {
  59. foreach($value as $vKey => $vValue) {
  60. if($vKey == 'date') { $news_date=$vValue; }
  61. if($vKey == 'title') { $news_title=$vValue; }
  62. if($vKey == 'desc') { $news_desc=$vValue; }
  63. if($vKey == 'link') { $news_link=$vValue; }
  64. }
  65. print "['$news_date','$news_title','$news_desc','$news_link']";
  66. $r++;
  67. if($r<$u) { print ",\n";} else { print "\n];\n";}
  68. }
  69. print "
  70. var summaryData = [";
  71. $queries_per_second_c=0;
  72. $num_schema_c=0;
  73. $num_tables_c=0;
  74. $length_data_c=0;
  75. $length_index_c=0;
  76. $total_size_c=0;
  77. $num_connections_c=0;
  78. $engine_count_innodb_c=0;
  79. $engine_count_myisam_c=0;
  80. $engine_myisam_size_total_c=0;
  81. $engine_innodb_size_total_c=0;
  82. $z=0;
  83. $c=count($data);
  84. foreach($data as $key => $value) {
  85. foreach($value as $k => $v) {
  86. if($k == 'server_list_id') { $server_list_id=$v;}
  87. if($k == 'server_hostname') { $server_hostname=$v;}
  88. if($k == 'os_load_15') { $os_load_15=$v;}
  89. if($k == 'mem_perc') { $mem_perc=$v;}
  90. if($k == 'queries_per_second') { $queries_per_second=$v; $queries_per_second_c += $queries_per_second;}
  91. if($k == 'num_schema') { $num_schema=$v; $num_schema_c += $num_schema;}
  92. if($k == 'num_tables') { $num_tables=$v; $num_tables_c += $num_tables;}
  93. if($k == 'num_connections') { $num_connections=$v; $num_connections_c += $num_connections;}
  94. if($k == 'length_data') { $length_data=$v; $length_data_c += $length_data;}
  95. if($k == 'length_index') { $length_index=$v; $length_index_c += $length_index;}
  96. if($k == 'total_size') { $total_size=$v; $total_size_c += $total_size;}
  97. if($k == 'engine_count_innodb') { $engine_count_innodb=round($v,0); $engine_count_innodb_c += $engine_count_innodb;}
  98. if($k == 'engine_count_myisam') { $engine_count_myisam=round($v,0); $engine_count_myisam_c += $engine_count_myisam;}
  99. if($k == 'engine_myisam_size_total') { $engine_myisam_size_total=$v; $engine_myisam_size_total_c += $engine_myisam_size_total;}
  100. if($k == 'engine_innodb_size_total') { $engine_innodb_size_total=$v; $engine_innodb_size_total_c += $engine_innodb_size_total;}
  101. }
  102. print "
  103. ['$server_hostname',
  104. $os_load_15,
  105. $mem_perc,
  106. $queries_per_second,
  107. $num_schema,
  108. $num_tables,
  109. $num_connections,
  110. $total_size,
  111. $engine_count_innodb,
  112. $engine_count_myisam,
  113. $engine_myisam_size_total,
  114. $engine_innodb_size_total],
  115. ";
  116. }
  117. //print the last data line for summary information - totals
  118. //ADDED EMPTY QUOTES TO THE TWO LINES BELOW "Total Values" - might help IE7?
  119. print "
  120. ['Total Values',
  121. ,
  122. ,
  123. $queries_per_second_c,
  124. $num_schema_c,
  125. $num_tables_c,
  126. $num_connections_c,
  127. $total_size_c,
  128. $engine_count_innodb_c,
  129. $engine_count_myisam_c,
  130. $engine_myisam_size_total_c,
  131. $engine_innodb_size_total_c]];
  132. ";
  133. print<<<HEAD
  134. var detailEl;
  135. var contentPanel = {
  136. id: 'content-panel',
  137. region: 'center',
  138. layout: 'card',
  139. margins: '2 5 5 0',
  140. activeItem: 0,
  141. border: false,
  142. items: [
  143. border
  144. ]
  145. };
  146. var refreshTab=function(tab){
  147. tab.getUpdater().refresh();
  148. };
  149. var border = {
  150. id:'border-panel',
  151. title: '<img src="$nroot/includes/images/kontrollbase_logo-trans32.png" align="center">',
  152. layout:'border',
  153. region:'center',
  154. bodyBorder: false,
  155. autoEl: {
  156. tag: 'div',
  157. html:''
  158. },
  159. defaults: {
  160. collapsible: true,
  161. split: true,
  162. animFloat: false,
  163. autoHide: false,
  164. useSplitTips: true,
  165. bodyStyle: 'padding:0px'
  166. },
  167. items: [
  168. {
  169. xtype: 'toolbar',
  170. height: 25,
  171. region: 'north',
  172. items: [{
  173. xtype: 'tbbutton',
  174. text: 'Logout',
  175. handler: function() {
  176. window.location = '$nroot/index.php/login/logout/';}
  177. },
  178. {
  179. xtype: 'tbseparator'
  180. },
  181. {
  182. xtype: 'tbbutton',
  183. text: 'Forums',
  184. handler: function() {
  185. window.location = 'http://kontrollsoft.com/forum';}
  186. },
  187. {
  188. xtype: 'tbseparator'
  189. },
  190. {
  191. xtype: 'tbbutton',
  192. id: this.id + 'AuditButton',
  193. cls: 'x-btn-icon audit-button',
  194. tooltip: 'Contact Support',
  195. handler: function() {
  196. window.location = 'http://kontrollsoft.com/support';},
  197. scope: this,
  198. }
  199. ]},
  200. {
  201. title: 'News and Announcements - This is a BETA product - there may be bugs to fix. Please contact support if you need help.',
  202. region: 'south',
  203. height: 140,
  204. xtype: 'grid',
  205. store: new Ext.data.SimpleStore({
  206. fields: [
  207. {name: 'date'},
  208. {name: 'title'},
  209. {name: 'desc'},
  210. {name: 'link'}
  211. ]}),
  212. columns: [
  213. {
  214. id: 'date',
  215. header: "date",
  216. width: 100,
  217. sortable: true,
  218. renderer: 'undef',
  219. dataIndex: 'date'
  220. },
  221. {
  222. id: 'title',
  223. header: "title",
  224. width: 160,
  225. sortable: true,
  226. renderer: 'undef',
  227. dataIndex: 'title'
  228. },
  229. {
  230. id: 'desc',
  231. header: "desc",
  232. width: 200,
  233. sortable: true,
  234. renderer: 'undef',
  235. dataIndex: 'desc'
  236. },
  237. {
  238. id: 'link',
  239. header: "link",
  240. width: 100,
  241. sortable: true,
  242. renderer: 'undef',
  243. dataIndex: 'link'
  244. }
  245. ],
  246. stripeRows: true,
  247. autoExpandColumn: 'desc',
  248. listeners: { render: function(){this.store.loadData(newsData);}}
  249. },
  250. {
  251. region:'west',
  252. id:'west-panel',
  253. title:'Navigation',
  254. split:true,
  255. width: 200,
  256. minSize: 175,
  257. maxSize: 400,
  258. collapsible: true,
  259. margins:'5 0 0 0',
  260. layout:'accordion',
  261. layoutConfig:{
  262. animate:true
  263. },
  264. items: [{
  265. title: 'Servers List',
  266. html: "$servers",
  267. autoScroll: true,
  268. animScroll: true,
  269. iconCls:'nav'
  270. }]
  271. },
  272. {
  273. xtype: 'tabpanel',
  274. plain: true,
  275. region: 'center',
  276. margins: '5 0 0 0',
  277. activeTab: 0,
  278. autoScroll: true,
  279. animScroll: true,
  280. collapsible: false,
  281. enableTabScroll:true,
  282. bodyStyle: 'padding:5px 0px 0px 5px',
  283. items: [
  284. {
  285. title: 'Overview',
  286. deferredRender: true,
  287. width:440,
  288. height:480,
  289. layout : 'fit',
  290. listeners: {activate: refreshTab},
  291. autoLoad: {url: '$nroot/includes/pages/$overview'},
  292. shim:false,
  293. frame:true,
  294. animCollapse:false,
  295. enableTabScroll:true,
  296. autoScroll:true
  297. },
  298. {
  299. title: 'Summary Graphs',
  300. deferredRender: true,
  301. layout : 'fit',
  302. items: {
  303. xtype : 'iframepanel',
  304. defaultSrc : '$nroot/index.php/main/graphs/0'
  305. },
  306. shim:false,
  307. frame:true,
  308. animCollapse:false,
  309. enableTabScroll:true,
  310. autoScroll:true
  311. },
  312. {
  313. title: 'Summary Data',
  314. xtype: 'grid',
  315. layout: 'fit',
  316. store: new Ext.data.SimpleStore({
  317. fields: [
  318. {name: 'hostname'},
  319. {name: 'load', type: 'float'},
  320. {name: 'mem_used', type: 'float'},
  321. {name: 'QPS', type: 'float'},
  322. {name: 'schema', type: 'float'},
  323. {name: 'tables', type: 'float'},
  324. {name: 'conn', type: 'float'},
  325. {name: 'total_size', type: 'float'},
  326. {name: 'num_innodb', type: 'float'},
  327. {name: 'num_myisam', type: 'float'},
  328. {name: 'myisam_total', type: 'float'},
  329. {name: 'innodb_total', type: 'float'}
  330. ]
  331. }),
  332. columns: [
  333. {id: 'hostname', header: "server hostname", width: 80, sortable: true, renderer: 'lowercase', dataIndex: 'hostname'},
  334. {id: 'load', header: "load", width: 45, sortable: true, renderer: 'undef', dataIndex: 'load'},
  335. {id: 'mem_used', header: "mem%", width: 50, sortable: true, renderer: 'undef', dataIndex: 'mem_used'},
  336. {id: 'QPS', header: "QPS", width: 50, sortable: true, renderer: 'undef', dataIndex: 'QPS'},
  337. {id: 'schema', header: "schema", width: 55, sortable: true, renderer: 'undef', dataIndex: 'schema'},
  338. {id: 'tables', header: "tables", width: 55, sortable: true, renderer: 'undef', dataIndex: 'tables'},
  339. {id: 'conn', header: "#conn", width: 55, sortable: true, renderer: 'undef',dataIndex: 'conn'},
  340. {id: 'total_size', header: "total size", width: 65, sortable: true, renderer: 'fileSize', dataIndex: 'total_size'},
  341. {id: 'num_innodb', header: "#innodb", width: 65, sortable: true, renderer: 'undef', dataIndex: 'num_innodb'},
  342. {id: 'num_myisam', header: "#myisam", width: 65, sortable: true, renderer: 'undef', dataIndex: 'num_myisam'},
  343. {id: 'myisam_total', header: "myisam_total", width: 75, sortable: true, renderer: 'fileSize', dataIndex: 'myisam_total'},
  344. {id: 'innodb_total', header: "innodb_total", width: 75, sortable: true, renderer: 'fileSize', dataIndex: 'innodb_total'}
  345. ],
  346. stripeRows: true,
  347. autoExpandColumn: 'hostname',
  348. listeners: { render: function(){this.store.loadData(summaryData);}}},
  349. {
  350. title: 'Alert Management',
  351. deferredRender: true,
  352. layout : 'fit',
  353. items: [
  354. {
  355. xtype: 'tabpanel',
  356. plain: true,
  357. region: 'center',
  358. margins: '0 5 5 5',
  359. activeTab: 0,
  360. autoScroll: true,
  361. animScroll: true,
  362. enableTabScroll:true,
  363. items: [
  364. {
  365. title: 'Current Alerts',
  366. deferredRender: true,
  367. layout : 'fit',
  368. listeners: {activate: refreshTab},
  369. items: {
  370. xtype : 'iframepanel',
  371. defaultSrc : '$nroot/index.php/alerts/'
  372. },
  373. shim:false,
  374. frame:true,
  375. animCollapse:false,
  376. enableTabScroll:true,
  377. autoScroll:true
  378. },
  379. {
  380. title: 'Acknowledged',
  381. deferredRender: true,
  382. layout : 'fit',
  383. listeners: {activate: refreshTab},
  384. items: {
  385. xtype : 'iframepanel',
  386. defaultSrc : '$nroot/index.php/alerts/response_main/ack/'
  387. },
  388. shim:false,
  389. frame:true,
  390. animCollapse:false,
  391. enableTabScroll:true,
  392. autoScroll:true
  393. },
  394. {
  395. title: 'Ignored',
  396. deferredRender: true,
  397. layout : 'fit',
  398. listeners: {activate: refreshTab},
  399. items: {
  400. xtype : 'iframepanel',
  401. defaultSrc : '$nroot/index.php/alerts/response_main/ign/'
  402. },
  403. shim:false,
  404. frame:true,
  405. animCollapse:false,
  406. enableTabScroll:true,
  407. autoScroll:true
  408. }
  409. ]
  410. }]},
  411. {
  412. title: 'System Management',
  413. deferredRender: true,
  414. layout : 'fit',
  415. items: [
  416. {
  417. xtype: 'tabpanel',
  418. plain: true,
  419. region: 'center',
  420. margins: '0 5 5 5',
  421. activeTab: 0,
  422. autoScroll: true,
  423. animScroll: true,
  424. items: [
  425. {
  426. title: 'Hosts',
  427. deferredRender: true,
  428. layout : 'fit',
  429. listeners: {activate: refreshTab},
  430. items: {
  431. xtype : 'iframepanel',
  432. defaultSrc : '$nroot/index.php/show/hosts/'
  433. },
  434. shim:false,
  435. frame:true,
  436. animCollapse:false,
  437. enableTabScroll:true,
  438. autoScroll:true
  439. },
  440. {
  441. title: 'Users',
  442. deferredRender: true,
  443. layout : 'fit',
  444. listeners: {activate: refreshTab},
  445. items: {
  446. xtype : 'iframepanel',
  447. defaultSrc : '$nroot/index.php/show/users/'
  448. },
  449. shim:false,
  450. frame:true,
  451. animCollapse:false,
  452. enableTabScroll:true,
  453. autoScroll:true
  454. },
  455. {
  456. title: 'Clients',
  457. deferredRender: true,
  458. layout : 'fit',
  459. listeners: {activate: refreshTab},
  460. items: {
  461. xtype : 'iframepanel',
  462. defaultSrc : '$nroot/index.php/show/clients/'
  463. },
  464. shim:false,
  465. frame:true,
  466. animCollapse:false,
  467. enableTabScroll:true,
  468. autoScroll:true
  469. },
  470. {
  471. title: 'System',
  472. deferredRender: true,
  473. layout : 'fit',
  474. listeners: {activate: refreshTab},
  475. items: {
  476. xtype : 'iframepanel',
  477. defaultSrc : '$nroot/index.php/system/'
  478. },
  479. shim:false,
  480. frame:true,
  481. animCollapse:false,
  482. enableTabScroll:true,
  483. autoScroll:true
  484. },
  485. {
  486. title: 'Debug Log',
  487. deferredRender: true,
  488. layout : 'fit',
  489. listeners: {activate: refreshTab},
  490. items: {
  491. xtype : 'iframepanel',
  492. defaultSrc : '$nroot/system/logs/sys_debug.log'
  493. },
  494. shim:false,
  495. frame:true,
  496. animCollapse:false,
  497. enableTabScroll:true,
  498. autoScroll:true
  499. }
  500. ]}]}
  501. ]}]};
  502. new Ext.Viewport({
  503. layout: 'border',
  504. title: 'Ext Layout Browser',
  505. items: [
  506. border
  507. ],
  508. renderTo: Ext.getBody()
  509. });
  510. });
  511. </script>
  512. </head>
  513. HEAD;
  514. }
  515. $nroot = substr_replace($root,"",-1);
  516. $servers='<table>';
  517. foreach($server_list as $key => $value) {
  518. $servers .= "<tr>";
  519. foreach($value as $k => $v) {
  520. if($k == 'id') { $id=$v;}
  521. if($k == 'server_hostname') { $list_hostname=$v;}
  522. if($k == 'active') {$active=$v;}
  523. if($k == 'server_client_name') {$server_client_name=$v;}
  524. if($k == 'server_type') { $server_type=$v;}
  525. }
  526. if($server_type == 0) { $server_type='prod';}
  527. elseif($server_type == 1) { $server_type='stage';}
  528. elseif($server_type == 2) { $server_type='dev';}
  529. if($active == 0) { $active="<img src='$nroot/includes/images/Record-Disabled-16x16.png' width='14px' heigh='14px'>";}
  530. elseif($active == 1) { $active="<img src='$nroot/includes/images/Record-Normal-Green-16x16.png' width='14px' heigh='14px'>";}
  531. elseif($active == 2) { $active="<img src='$nroot/includes/images/Record-Problem-Red-16x16.png' width='14px' heigh='14px'>";}
  532. $servers .= "<td>$active <a href='$nroot/index.php/main/host/$id' target='_self'>$list_hostname</a></td></tr>";
  533. }
  534. $servers .= "</table>";
  535. head(
  536. $root,
  537. $server_list,
  538. $servers,
  539. $overview,
  540. $summary,
  541. $data_size,
  542. $index_size,
  543. $total_size,
  544. $data,
  545. $news);
  546. ?>