Инструменты пользователя

Инструменты сайта


faq:monitoring-trunks

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
faq:monitoring-trunks [2022/11/08 09:52]
Портнов Алексей
faq:monitoring-trunks [2024/01/30 12:42] (текущий)
Портнов Алексей
Строка 4: Строка 4:
 При работе с поставщиками услуг связи периодически могут возникать проблемы. К примеру сервер поставщика не отвечает / не доступен. В рамках данной статьи будет предложен механизм оповещения на email системного администратора. ​ При работе с поставщиками услуг связи периодически могут возникать проблемы. К примеру сервер поставщика не отвечает / не доступен. В рамках данной статьи будет предложен механизм оповещения на email системного администратора. ​
  
-  - Подключитесь к АТС ​[[faq:putty| с помощью SSH-клиента]] +  - Создайте новое "[[:dialplan-applications|Приложение диалплан]]" 
-  - Создадим каталог для ​хранения ​скриптов <​code>​mkdir -p  /​storage/​usbdisk1/​mikopbx/​custom_modules/​monitoring</​code>​ +  - Укажите произвольное название,​ к примеру **Blacklist** 
-  - Создадим новый файл nano <​code>/​storage/​usbdisk1/​mikopbx/​custom_modules/​monitoring/​prodiders.php</​code>​ +  - Выберите "​**Тип ​кода**" - "**PHP AGI Скрипт**"  
-  - Вставьте содержимое: <​code>​#​!/​usr/​bin/​php+  - Укажите короткий номер ​для ​приложенияк примеру 99 
 +  - На вкладке "​**Программный ​код**"​ вставьте:​ <​code>​
 <?php <?php
 +use MikoPBX\Common\Models\PbxSettings;​
 use MikoPBX\Common\Models\LanInterfaces;​ use MikoPBX\Common\Models\LanInterfaces;​
-use MikoPBX\PBXCoreREST\Lib\SIPStackProcessor;​ 
 use MikoPBX\Core\System\Notifications;​ use MikoPBX\Core\System\Notifications;​
-use MikoPBX\Common\Models\PbxSettings;+use MikoPBX\PBXCoreREST\Lib\SIPStackProcessor; 
 require_once '​Globals.php';​ require_once '​Globals.php';​
  
-$date = SIPStackProcessor::​getRegistry();+$result ​= SIPStackProcessor::​callBack(['​action'​ => '​getRegistry'​]);
 $adminMail = null; $adminMail = null;
-$localIP ​  ​= '';​ +$localIP = '';​ 
-$message ​  ​= '';​ +$message = '';​ 
-foreach ($date->data as $provider){ +foreach ($result->data as $provider) { 
-    if($provider['​state'​] !== '​OFF'​ && $provider['​state'​] !== '​REGISTERED'​){ +    if ($provider['​state'​] !== '​OFF'​ && $provider['​state'​] !== '​REGISTERED'​) { 
-        if($adminMail === null){+        if ($adminMail === null) {
             $adminMail = PbxSettings::​getValueByKey('​SystemNotificationsEmail'​);​             $adminMail = PbxSettings::​getValueByKey('​SystemNotificationsEmail'​);​
             $interfaces = LanInterfaces::​find("​disabled='​0'"​);​             $interfaces = LanInterfaces::​find("​disabled='​0'"​);​
-            foreach ($interfaces as $interface){ +            foreach ($interfaces as $interface) { 
-                if(!empty($interface->​ipaddr)){+                if (!empty($interface->​ipaddr)) {
                     $localIP = $interface->​ipaddr;​                     $localIP = $interface->​ipaddr;​
                     break;                     break;
Строка 31: Строка 33:
             }             }
         }         }
-        $message.= ​ "​Provider state: {$provider['​state'​]}<​br>"​. +        $message .= "​Provider state: {$provider['​state'​]}<​br>"​ . "Url (local): http://​{$localIP}/​admin-cabinet/​providers/​modifysip/​{$provider['​id'​]} <​br><​br>";​
-                    ​"Url (local): http://​{$localIP}/​admin-cabinet/​providers/​modifysip/​{$provider['​id'​]} <​br><​br>";​+
     }     }
 } }
  
-if(!empty($message) && !empty($adminMail)){ +if (!empty($message) && !empty($adminMail)) { 
-    $notify ​ = new Notifications();​+    $notify = new Notifications();​
     try {     try {
         $notify->​sendMail($adminMail,​ '​Provider invalid state...',​ $message);         $notify->​sendMail($adminMail,​ '​Provider invalid state...',​ $message);
-    }catch (\Throwable $e){+    } catch (\Throwable $e) {
     }     }
 }</​code>​ }</​code>​
-  - Сохраните ​файл, ​используйте ​комбинацию клавишь **CTRL + X**, введите **Y**, ​и нажмите **ENTER** +  - Сохраните ​изменения ​и скопируйте идентификатор приложения из адресной строки ​браузераон имеет ​вид "​**DIALPLAN-APP-A13D9FEC**"​ 
-  - Добавьте право на исполнение скрипта <​code>​ chmod +x  /​storage/​usbdisk1/​mikopbx/​custom_modules/​monitoring/​prodiders.php</​code>​ +  - Перейдите в раздел **Система** ​-> **Кастомизация системных файлов**, откройте для редактирования ​файл ​**/​var/​spool/​cron/​crontabs/​root** 
-  - Перейдите в меню "​[[:​custom-files| ​Кастомизация системных файлов]]"  +  - Выберите ​режим **"Добавлять в конец ​файла"**, внизу в черное поле для редактирования вставьте следующие строки:<​code>​ 
-  - Откройте для редактирования **/​var/​spool/​cron/​crontabs/​root** +*/5 * * * * /usr/bin/php -f /var/lib/asterisk/​agi-bin/​DIALPLAN-APP-A13D9FEC.php start > /dev/null 2> /dev/null </​code>​  
-  - Выберите ​действие **Добавить к файлу**  +  - Скорректируйте имя файла согласно вашему идентификатору ​приложения "​**DIALPLAN-APP-A13D9FEC**"​ 
-  - Добавьте следующее содержимое  ​<​code>​*/​5 * * * * /storage/usbdisk1/mikopbx/custom_modules/monitoring/prodiders.php > /dev/null 2> /​dev/​null</​code>​ +<note important>​Для работы оповещений потребуется настроить SMTP клиент. Сминструкции в разделе "​[[:​mail-settings|Почта и уведомления]]"</​note>​
-  - Каждые **5 минут** скрипт будет проверять статус провайдера и если есть ​проблемы **будет отправлен ​email администратору** MikoPBX+
  
 [[:​faq|Обратно к перечню инструкций]]\\ \\  [[:​faq|Обратно к перечню инструкций]]\\ \\ 
faq/monitoring-trunks.1667901126.txt.gz · Последние изменения: 2022/11/08 09:52 — Портнов Алексей