PageRenderTime 40ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/zabbix-2.0.1/frontends/php/srv_status.php

#
PHP | 192 lines | 150 code | 14 blank | 28 comment | 19 complexity | c7c375bf84835bec754a6df3dc8003cc MD5 | raw file
Possible License(s): GPL-2.0, AGPL-1.0
  1. <?php
  2. /*
  3. ** Zabbix
  4. ** Copyright (C) 2001-2011 Zabbix SIA
  5. **
  6. ** This program is free software; you can redistribute it and/or modify
  7. ** it under the terms of the GNU General Public License as published by
  8. ** the Free Software Foundation; either version 2 of the License, or
  9. ** (at your option) any later version.
  10. **
  11. ** This program is distributed in the hope that it will be useful,
  12. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. ** GNU General Public License for more details.
  15. **
  16. ** You should have received a copy of the GNU General Public License
  17. ** along with this program; if not, write to the Free Software
  18. ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. **/
  20. ?>
  21. <?php
  22. require_once dirname(__FILE__).'/include/config.inc.php';
  23. require_once dirname(__FILE__).'/include/triggers.inc.php';
  24. require_once dirname(__FILE__).'/include/services.inc.php';
  25. $page['title'] = _('IT services');
  26. $page['file'] = 'srv_status.php';
  27. $page['scripts'] = array();
  28. $page['hist_arg'] = array();
  29. define('ZBX_PAGE_DO_REFRESH', 1);
  30. include_once('include/page_header.php');
  31. ?>
  32. <?php
  33. // VAR TYPE OPTIONAL FLAGS VALIDATION EXCEPTION
  34. $fields = array(
  35. 'serviceid' => array(T_ZBX_INT, O_OPT, P_SYS|P_NZERO, DB_ID, null),
  36. 'showgraph' => array(T_ZBX_INT, O_OPT, P_SYS, IN('1'), 'isset({serviceid})'),
  37. 'period' => array(T_ZBX_STR, O_OPT, P_SYS, null, null),
  38. 'fullscreen' => array(T_ZBX_INT, O_OPT, P_SYS, IN('0,1'), null),
  39. // ajax
  40. 'favobj' => array(T_ZBX_STR, O_OPT, P_ACT, IN('"hat"'), null),
  41. 'favref' => array(T_ZBX_STR, O_OPT, P_ACT, NOT_EMPTY, 'isset({favobj})'),
  42. 'favstate' => array(T_ZBX_INT, O_OPT, P_ACT, NOT_EMPTY, 'isset({favobj})')
  43. );
  44. check_fields($fields);
  45. /*
  46. * Ajax
  47. */
  48. if (isset($_REQUEST['favobj'])) {
  49. if ($_REQUEST['favobj'] == 'hat') {
  50. CProfile::update('web.srv_status.hats.'.$_REQUEST['favref'].'.state', $_REQUEST['favstate'], PROFILE_TYPE_INT);
  51. }
  52. }
  53. if ($page['type'] == PAGE_TYPE_JS || $page['type'] == PAGE_TYPE_HTML_BLOCK) {
  54. include_once('include/page_footer.php');
  55. exit();
  56. }
  57. $available_triggers = get_accessible_triggers(PERM_READ_ONLY, array());
  58. if (isset($_REQUEST['serviceid'])) {
  59. if ($service = DBfetch(DBselect('SELECT DISTINCT s.serviceid,s.triggerid FROM services s WHERE s.serviceid='.$_REQUEST['serviceid']))) {
  60. if ($service['triggerid'] && !isset($available_triggers[$service['triggerid']])) {
  61. access_deny();
  62. }
  63. }
  64. else {
  65. unset($service);
  66. }
  67. }
  68. unset($_REQUEST['serviceid']);
  69. if (isset($service) && isset($_REQUEST['showgraph'])) {
  70. $table = new CTable(null, 'chart');
  71. $table->addRow(new CImg('chart5.php?serviceid='.$service['serviceid'].url_param('path')));
  72. $table->show();
  73. }
  74. else {
  75. $periods = array(
  76. 'today' => _('Today'),
  77. 'week' => _('This week'),
  78. 'month' => _('This month'),
  79. 'year' => _('This year'),
  80. 24 => _('Last 24 hours'),
  81. 24 * 7 => _('Last 7 days'),
  82. 24 * 30 => _('Last 30 days'),
  83. 24 * DAY_IN_YEAR => _('Last 365 days')
  84. );
  85. $period = get_request('period', 7 * 24);
  86. $period_end = time();
  87. switch ($period) {
  88. case 'today':
  89. $period_start = mktime(0, 0, 0, date('n'), date('j'), date('Y'));
  90. break;
  91. case 'week':
  92. $period_start = strtotime('last sunday');
  93. break;
  94. case 'month':
  95. $period_start = mktime(0, 0, 0, date('n'), 1, date('Y'));
  96. break;
  97. case 'year':
  98. $period_start = mktime(0, 0, 0, 1, 1, date('Y'));
  99. break;
  100. case 24:
  101. case 24 * 7:
  102. case 24 * 30:
  103. case 24 * DAY_IN_YEAR:
  104. $period_start = $period_end - ($period * 3600);
  105. break;
  106. }
  107. // fetch services
  108. $services = API::Service()->get(array(
  109. 'output' => array('name', 'serviceid', 'showsla', 'goodsla', 'algorithm'),
  110. 'selectParent' => API_OUTPUT_EXTEND,
  111. 'selectDependencies' => array('servicedownid', 'soft', 'linkid'),
  112. 'selectTrigger' => array('description', 'triggerid'),
  113. 'preservekeys' => true,
  114. 'sortfield' => 'sortorder',
  115. 'sortorder' => ZBX_SORT_UP
  116. ));
  117. // expand trigger descriptions
  118. $triggers = zbx_objectValues($services, 'trigger');
  119. $triggers = expandTriggerDescriptions(zbx_toHash($triggers, 'triggerid'));
  120. foreach ($services as &$service) {
  121. if ($service['trigger']) {
  122. $service['trigger'] = $triggers[$service['trigger']['triggerid']];
  123. }
  124. }
  125. unset($service);
  126. // fetch sla
  127. $slaData = API::Service()->getSla(array(
  128. 'serviceids' => zbx_objectValues($services, 'serviceid'),
  129. 'intervals' => array(array(
  130. 'from' => $period_start,
  131. 'to' => $period_end
  132. ))
  133. ));
  134. // expand problem trigger descriptions
  135. foreach ($slaData as &$serviceSla) {
  136. foreach ($serviceSla['problems'] as &$problemTrigger) {
  137. $problemTrigger['description'] = $triggers[$problemTrigger['triggerid']]['description'];
  138. }
  139. unset($problemTrigger);
  140. }
  141. unset($serviceSla);
  142. $treeData = array();
  143. createServiceMonitoringTree($services, $slaData, $period, $treeData);
  144. $tree = new CServiceTree('service_status_tree',
  145. $treeData,
  146. array(
  147. 'caption' => _('Service'),
  148. 'status' => _('Status'),
  149. 'reason' => _('Reason'),
  150. 'sla' => _('Problem time'),
  151. 'sla2' => nbsp(_('SLA').' / '._('Acceptable SLA'))
  152. )
  153. );
  154. if ($tree) {
  155. // creates form for choosing a preset interval
  156. $r_form = new CForm();
  157. $r_form->setAttribute('class', 'nowrap');
  158. $r_form->setMethod('get');
  159. $r_form->setAttribute('name', 'period_choice');
  160. $r_form->addVar('fullscreen', $_REQUEST['fullscreen']);
  161. $period_combo = new CComboBox('period', $period, 'javascript: submit();');
  162. foreach ($periods as $key => $val) {
  163. $period_combo->addItem($key, $val);
  164. }
  165. $r_form->addItem(array(_('Period').SPACE, $period_combo));
  166. $srv_wdgt = new CWidget('hat_services', 'service-list service-mon');
  167. $srv_wdgt->addPageHeader(_('IT SERVICES'), get_icon('fullscreen', array('fullscreen' => $_REQUEST['fullscreen'])));
  168. $srv_wdgt->addHeader(_('IT services'), $r_form);
  169. $srv_wdgt->addItem(BR());
  170. $srv_wdgt->addItem($tree->getHTML());
  171. $srv_wdgt->show();
  172. }
  173. else {
  174. error(_('Cannot format Tree. Check logic structure in service links.'));
  175. }
  176. }
  177. include_once('include/page_footer.php');
  178. ?>