WecomCenterView.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php declare(strict_types = 0);
  2. /*
  3. ** WeCom Center - GET controller. Gathers current state and renders the page.
  4. */
  5. namespace Modules\WecomCenter\Actions;
  6. use CController;
  7. use CControllerResponseData;
  8. use CWebUser;
  9. use Modules\WecomCenter\Lib\Helper;
  10. use Modules\WecomCenter\Lib\I18n;
  11. class WecomCenterView extends CController {
  12. protected function init() {
  13. $this->disableCsrfValidation();
  14. }
  15. protected function checkInput() {
  16. return true;
  17. }
  18. protected function checkPermissions() {
  19. return CWebUser::getType() == USER_TYPE_SUPER_ADMIN;
  20. }
  21. protected function doAction() {
  22. $module_dir = dirname(__DIR__);
  23. $mediatypes = Helper::webhookMediatypes();
  24. $mediatypeid = (string) ($_REQUEST['mediatypeid'] ?? '');
  25. if ($mediatypeid === '' && $mediatypes) {
  26. foreach ($mediatypes as $mt) {
  27. if (stripos($mt['name'], 'wecom') !== false) {
  28. $mediatypeid = (string) $mt['mediatypeid'];
  29. break;
  30. }
  31. }
  32. if ($mediatypeid === '') {
  33. $mediatypeid = (string) $mediatypes[0]['mediatypeid'];
  34. }
  35. }
  36. $mediatype = null;
  37. $webhook_url = '';
  38. $media = null;
  39. if ($mediatypeid !== '') {
  40. $mediatype = Helper::getMediatype($mediatypeid);
  41. if ($mediatype) {
  42. $webhook_url = Helper::webhookKey($mediatype);
  43. }
  44. $robot = Helper::robotUser('wecomrobot');
  45. $media = Helper::currentMedia($robot, $mediatypeid);
  46. }
  47. // ---- alert strategy ----
  48. $template_hostid = Helper::templateHostid();
  49. $current_strategy = Helper::currentStrategy();
  50. $preview = null;
  51. $preview_key = (string) ($_REQUEST['preview_preset'] ?? '');
  52. if ($preview_key !== '' && isset(Helper::STRATEGY_PRESETS[$preview_key]) && $template_hostid !== null) {
  53. $preview = Helper::previewStrategy($template_hostid,
  54. Helper::STRATEGY_PRESETS[$preview_key]['targets']);
  55. }
  56. // ---- server tuning generator ----
  57. $tuning_profile = (string) ($_REQUEST['tuning_profile'] ?? 'medium');
  58. if (!isset(Helper::TUNING_PROFILES[$tuning_profile])) {
  59. $tuning_profile = 'medium';
  60. }
  61. $tuning = Helper::tuningSnippet($tuning_profile);
  62. // ---- map: single marker = Zabbix server host ----
  63. $server_host = null;
  64. $server_loc = ['location_lat' => '', 'location_lon' => ''];
  65. try {
  66. $sh = \API::Host()->get([
  67. 'output' => ['hostid', 'name'],
  68. 'filter' => ['host' => 'Zabbix server'],
  69. 'selectInventory' => ['location_lat', 'location_lon'],
  70. 'limit' => 1
  71. ]);
  72. if ($sh) {
  73. $server_host = $sh[0];
  74. $server_loc = [
  75. 'location_lat' => $sh[0]['inventory']['location_lat'] ?? '',
  76. 'location_lon' => $sh[0]['inventory']['location_lon'] ?? ''
  77. ];
  78. }
  79. }
  80. catch (\Throwable $e) { /* ignore */ }
  81. // ---- maintenance: per-trigger alerting switch ----
  82. $trig_search = trim((string) ($_REQUEST['trig_search'] ?? ''));
  83. $triggers = Helper::triggers($trig_search);
  84. $trigger_count = Helper::triggerCount();
  85. $data = [
  86. 'title' => I18n::t('page.title'),
  87. 'mediatypes' => $mediatypes,
  88. 'mediatypeid' => $mediatypeid,
  89. 'mediatype' => $mediatype,
  90. 'webhook_url' => $webhook_url,
  91. 'media' => $media,
  92. 'severity' => $media['severity'] ?? 48,
  93. 'active' => $media['active'] ?? 0,
  94. 'presets' => Helper::STRATEGY_PRESETS,
  95. 'classes' => Helper::CLASSES,
  96. 'current_strategy'=> $current_strategy,
  97. 'template_hostid' => $template_hostid,
  98. 'preview_key' => $preview_key,
  99. 'preview' => $preview,
  100. 'tuning_profile' => $tuning_profile,
  101. 'tuning' => $tuning,
  102. 'tuning_profiles' => Helper::TUNING_PROFILES,
  103. 'templates' => Helper::bundledTemplates($module_dir),
  104. 'server_host' => $server_host,
  105. 'server_loc' => $server_loc,
  106. 'trig_search' => $trig_search,
  107. 'triggers' => $triggers,
  108. 'trigger_count' => $trigger_count,
  109. 'lang' => I18n::lang()
  110. ];
  111. $response = new CControllerResponseData($data);
  112. $response->setTitle(I18n::t('page.title'));
  113. $this->setResponse($response);
  114. }
  115. }