Ошибки/проблемы/неисправности системы

Новые релизы, обновления и т.п.

Модератор: immortal

Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Ошибки/проблемы/неисправности системы

Сообщение Vovix » Ср апр 19, 2017 5:54 pm

lanket писал(а):Простите что влезаю, но не могу молчать об своих тараканах.

Опять дополнительные доказательства для обязательном применении публичных функций для ООП.

Если бы модуль GPS-трекер имел такие функции то не было бы данной проблемы с модулем FindMyiPhone пользуясь такой функцией.

А так FindMyiPhone пишет напрямую в базу другому модулю GPS-трекер. В какой то момент GPS-трекер обновился, вштырило FindMyiPhone.


Отправлено с моего Redmi Note 3 через Tapatalk
мысли правильные, но причина оказалась другая!!! вот -
viewtopic.php?f=4&t=1528&p=50926#p50926
модуль FindMyiPhone исправен
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Ошибки/проблемы/неисправности системы

Сообщение Vovix » Пт апр 21, 2017 4:32 pm

проблема:
в Debug вижу периодически строчку (число 7354036 меняется):

Код: Выделить всё

16:12:28 0.27704800 Warning: geturl to http://127.0.0.1:80/objects/?job=7354036 is pretty slow (25.92s)  
как по ней найти виновного в долгом выполнении?
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
ILGAS
Сообщения: 366
Зарегистрирован: Пт июл 26, 2013 4:11 pm
Благодарил (а): 71 раз
Поблагодарили: 18 раз

Re: Ошибки/проблемы/неисправности системы

Сообщение ILGAS » Пт апр 21, 2017 7:48 pm

Vovix писал(а):проблема:
в Debug вижу периодически строчку (число 7354036 меняется):

Код: Выделить всё

16:12:28 0.27704800 Warning: geturl to http://127.0.0.1:80/objects/?job=7354036 is pretty slow (25.92s)   
как по ней найти виновного в долгом выполнении?
У мета тоже самое. У меня это появляется с пкреодичеостью 5 мин. С такой пкреодичеостью опрашивает бродлинк. Думаю это он.

Отправлено с моего SM-G7508Q через Tapatalk
dfrozen
Сообщения: 35
Зарегистрирован: Ср апр 12, 2017 11:42 am
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 5 раз

Re: Ошибки/проблемы/неисправности системы

Сообщение dfrozen » Пт апр 21, 2017 11:33 pm

Код: Выделить всё

апр 21 23:29:14 orangepiplus php[7433]: Starting ./scripts/cycle_execs.php ... OK
апр 21 23:29:14 orangepiplus php[7433]: PHP Notice:  Undefined index: SERVER_NAME in /var/www/config.php on line 54
При этом модуль Шедула не установлен (точнее был поставлен, повесил систему и был удален)
Вложения
Снимок экрана 2017-04-21 в 23.30.53.png
Снимок экрана 2017-04-21 в 23.30.53.png (70.28 КБ) 7916 просмотров
MDM Orange Pi Plus2
ARMBIAN 5.25 stable Ubuntu 16.04.2 LTS 3.4.113-sun8i
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Ошибки/проблемы/неисправности системы

Сообщение Vovix » Сб апр 22, 2017 12:05 am

dfrozen писал(а):...
При этом модуль Шедула не установлен (точнее был поставлен, повесил систему и был удален)
ну дак уберите проверку на него из метода checkState

Объекты -> systemStates -> System -> его Методы -> checkState (Настроить)

найдите строку:

Код: Выделить всё

$cycles=array('states'=>'цикл проверки состояния','main'=>'главный цикл','execs'=>'цикл запуска команд','scheduler'=>'цикл планировщика');
и сделайте ее такой:

Код: Выделить всё

$cycles=array('states'=>'цикл проверки состояния','main'=>'главный цикл','execs'=>'цикл запуска команд');
За это сообщение автора Vovix поблагодарил:
dfrozen (Сб апр 22, 2017 5:13 pm)
Рейтинг: 1.16%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
xneo
Сообщения: 21
Зарегистрирован: Пн апр 24, 2017 4:35 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Ошибки/проблемы/неисправности системы

Сообщение xneo » Пн апр 24, 2017 4:41 am

Возможно в цикле connect ошибка в строке 187 (третья у меня в сообщении). До этого переменная $write обнуляется, а после в методе socket_select уже стоит переменная $writ. Есть подозрение что пропущена e в конце названия переменной, т.к. более нигде переменной $writ не нашел.

Код: Выделить всё

      $write  = NULL;
      $except = NULL;
      $num_changed_sockets = socket_select($read, $writ, $except, 0, 1);
И цикл cycle_connect.php занимает 60-90% процессорных ресурсов на Orange Pi One. Именно поэтому и полез туда посмотреть. в логах примерно такое:
СпойлерПоказать

Код: Выделить всё

2017-04-24 08:23:30 Listening...
2017-04-24 08:23:31 Listening...
2017-04-24 08:23:32 Listening...
2017-04-24 08:23:33 Listening...
2017-04-24 08:23:34 Listening...
2017-04-24 08:23:35 Listening...
2017-04-24 08:23:36 Listening...
2017-04-24 08:23:37 Listening...
2017-04-24 08:23:38 Listening...
2017-04-24 08:23:39 Listening...
2017-04-24 08:23:40 Listening...
2017-04-24 08:23:40 Updating auto update item (id 74 time 30): <#LANG_GENERAL_EVENTS_LOG#> (code)
2017-04-24 08:23:40 Updating auto update item (id 78 time 10): <#LANG_TEXT_BOX#>
2017-04-24 08:23:40 Updating auto update item (id 80 time 5): <#LANG_SLIDER_BOX#>
2017-04-24 08:23:40 Updating auto update item (id 105 time 30): <#LANG_GENERAL_INSIDE#> (data)
2017-04-24 08:23:40 Updating auto update item (id 97 time 10): State
2017-04-24 08:23:40 Incoming: PING!
2017-04-24 08:23:40 Sending: PONG!
OK.
2017-04-24 08:23:40 Incoming: RECEIVED: PONG!
2017-04-24 08:23:41 Listening...
2017-04-24 08:23:42 Listening...
2017-04-24 08:23:43 Listening...
2017-04-24 08:23:44 Listening...
2017-04-24 08:23:45 Listening...
2017-04-24 08:23:46 Listening...
2017-04-24 08:23:47 Listening...
2017-04-24 08:23:48 Listening...
2017-04-24 08:23:49 Listening...
2017-04-24 08:23:50 Listening...
2017-04-24 08:23:51 Listening...
2017-04-24 08:23:51 Updating auto update item (id 78 time 10): <#LANG_TEXT_BOX#>
2017-04-24 08:23:51 Updating auto update item (id 80 time 5): <#LANG_SLIDER_BOX#>
2017-04-24 08:23:51 Updating auto update item (id 97 time 10): State
2017-04-24 08:23:52 Listening...
2017-04-24 08:23:53 Listening...
2017-04-24 08:23:54 Listening...
2017-04-24 08:23:55 Listening...
2017-04-24 08:23:56 Listening...
2017-04-24 08:23:57 Listening...
2017-04-24 08:23:58 Listening...
2017-04-24 08:23:59 Listening...
2017-04-24 08:24:00 Listening...
2017-04-24 08:24:01 Listening...
Проблему загрузки проца этим скриптом решил ужаснейшим костылем - задержкой во вложенном бесконечном цикле в другой бесконечный цикл в 5 сек.
Не могу разобраться каким образом происходит выход из бесконечных циклов. Получается что он каждый такт крутится полностью и при этом во первых забивает лог (за день 24 Мб) а во вторых грузит проц.

UPD: Возможно пока нет ответа почему так происходит с загрузкой проца кому то поможет мой костыль (Внимание! Костыль не самый лучший и я не рекомендую его всем. Использовать его только при острой необходимости (нужен Connect, но проц сильно занят/греется)!)
Нужно в файле /var/www/scripts/cycle_connect.php (если вы переместили в другую папку то путь будет другой) между 179 и 180 строками добавить еще одну строку с таким содержанием:

Код: Выделить всё

sleep(2);
В итоге должно получиться так:

Код: Выделить всё

   while (1)
   {
      sleep(2);
      $read = array();
      $read[0] = $socket;
После этого:
Screenshot_4.png
Screenshot_4.png (34.52 КБ) 9505 просмотров
Последний раз редактировалось xneo Вт апр 25, 2017 6:10 am, всего редактировалось 6 раз.
dfrozen
Сообщения: 35
Зарегистрирован: Ср апр 12, 2017 11:42 am
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 5 раз

Re: Ошибки/проблемы/неисправности системы

Сообщение dfrozen » Пн апр 24, 2017 8:35 am

xneo писал(а):Возможно в цикле connect ошибка в строке 187 (третья у меня в сообщении). До этого переменная $write обнуляется, а после в методе socket_select уже стоит переменная $writ. Есть подозрение что пропущена e в конце названия переменной, т.к. более нигде переменной $writ не нашел.

Код: Выделить всё

      $write  = NULL;
      $except = NULL;
      $num_changed_sockets = socket_select($read, $writ, $except, 0, 1);
И цикл cycle_connect.php занимает 60-90% процессорных ресурсов на Orange Pi One. Именно поэтому и полез туда посмотреть. в логах примерно такое:
СпойлерПоказать

Код: Выделить всё

2017-04-24 08:23:30 Listening...
2017-04-24 08:23:31 Listening...
2017-04-24 08:23:32 Listening...
2017-04-24 08:23:33 Listening...
2017-04-24 08:23:34 Listening...
2017-04-24 08:23:35 Listening...
2017-04-24 08:23:36 Listening...
2017-04-24 08:23:37 Listening...
2017-04-24 08:23:38 Listening...
2017-04-24 08:23:39 Listening...
2017-04-24 08:23:40 Listening...
2017-04-24 08:23:40 Updating auto update item (id 74 time 30): <#LANG_GENERAL_EVENTS_LOG#> (code)
2017-04-24 08:23:40 Updating auto update item (id 78 time 10): <#LANG_TEXT_BOX#>
2017-04-24 08:23:40 Updating auto update item (id 80 time 5): <#LANG_SLIDER_BOX#>
2017-04-24 08:23:40 Updating auto update item (id 105 time 30): <#LANG_GENERAL_INSIDE#> (data)
2017-04-24 08:23:40 Updating auto update item (id 97 time 10): State
2017-04-24 08:23:40 Incoming: PING!
2017-04-24 08:23:40 Sending: PONG!
OK.
2017-04-24 08:23:40 Incoming: RECEIVED: PONG!
2017-04-24 08:23:41 Listening...
2017-04-24 08:23:42 Listening...
2017-04-24 08:23:43 Listening...
2017-04-24 08:23:44 Listening...
2017-04-24 08:23:45 Listening...
2017-04-24 08:23:46 Listening...
2017-04-24 08:23:47 Listening...
2017-04-24 08:23:48 Listening...
2017-04-24 08:23:49 Listening...
2017-04-24 08:23:50 Listening...
2017-04-24 08:23:51 Listening...
2017-04-24 08:23:51 Updating auto update item (id 78 time 10): <#LANG_TEXT_BOX#>
2017-04-24 08:23:51 Updating auto update item (id 80 time 5): <#LANG_SLIDER_BOX#>
2017-04-24 08:23:51 Updating auto update item (id 97 time 10): State
2017-04-24 08:23:52 Listening...
2017-04-24 08:23:53 Listening...
2017-04-24 08:23:54 Listening...
2017-04-24 08:23:55 Listening...
2017-04-24 08:23:56 Listening...
2017-04-24 08:23:57 Listening...
2017-04-24 08:23:58 Listening...
2017-04-24 08:23:59 Listening...
2017-04-24 08:24:00 Listening...
2017-04-24 08:24:01 Listening...
Проблему загрузки проца этим скриптом решил ужаснейшим костылем - задержкой во вложенном бесконечном цикле в другой бесконечный цикл в 5 сек.
Не могу разобраться каким образом происходит выход из бесконечных циклов. Получается что он каждый такт крутится полностью и при этом во первых забивает лог (за день 24 Мб) а во вторых грузит проц.
На само деле тоже все силюсь понять, почему "Пустая установка" так жреп процессор именно этим скриптом
СпойлерПоказать
Снимок экрана 2017-04-24 в 8.32.00.png
Снимок экрана 2017-04-24 в 8.32.00.png (140.49 КБ) 9543 просмотра
MDM Orange Pi Plus2
ARMBIAN 5.25 stable Ubuntu 16.04.2 LTS 3.4.113-sun8i
dfrozen
Сообщения: 35
Зарегистрирован: Ср апр 12, 2017 11:42 am
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 5 раз

Re: Ошибки/проблемы/неисправности системы

Сообщение dfrozen » Пн апр 24, 2017 8:39 am

Нужна подсказка
Прдыстория такова, после установки и минимальной настройки понадобилось воспользоваться Timer-> onNewHour - Сначало удивило, что метод был пуст, ну внес туда нужные строки и как выяснилось метод не запускается

Код: Выделить всё

//Получаем Час для сцен
$time1 = explode(":", gg("ThisComputer.timeNow") );
sg("ThisComputer.timeH",$time1[0]);

//Проверка Почты России 
$PostTracker = new app_PostTracker();
$PostTracker->updateStatuses();
Как бы ни одно из обновлений не выполняется((
При ручном запуске еще и вываливается куча ощибок

Код: Выделить всё

Warning: include_once(./modules/app_yaweather/app_yaweather.class.php): failed to open stream: No such file or directory in /var/www/modules/objects/objects.class.php(530) : eval()'d code on line 6

Warning: include_once(): Failed opening './modules/app_yaweather/app_yaweather.class.php' for inclusion (include_path='.:/usr/share/php') in /var/www/modules/objects/objects.class.php(530) : eval()'d code on line 6

Fatal error: Uncaught Error: Class 'app_yaweather' not found in /var/www/modules/objects/objects.class.php(530) : eval()'d code:7 Stack trace: #0 /var/www/modules/objects/objects.class.php(530): eval() #1 /var/www/modules/objects/objects.class.php(487): objects->callMethod('onNewHour', Array, 1) #2 /var/www/objects/index.php(152): objects->callMethod('onNewHour', Array) #3 {main} thrown in /var/www/modules/objects/objects.class.php(530) : eval()'d code on line 7
Та Яндекс погода у меня не становлена, проба была с установкой этого модуля с Маркета, но так как Yandex давно прикрыл xml, удалил, похоже хвосты остались после сноса модуля- Как чистить ???
PS А не имеет ли смысл убрать с маркета не рабочие модули, а то я уже себе систему ими покорежил от души
PSS Вернул обратно модуль app_yaweather )) и-Timer-> onNewHour заратотало без ошибок, как избавиться от ненужной и не рабочей яндекспогоды?
MDM Orange Pi Plus2
ARMBIAN 5.25 stable Ubuntu 16.04.2 LTS 3.4.113-sun8i
xneo
Сообщения: 21
Зарегистрирован: Пн апр 24, 2017 4:35 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Ошибки/проблемы/неисправности системы

Сообщение xneo » Ср апр 26, 2017 4:34 am

dfrozen писал(а):Нужна подсказка
Прдыстория такова, после установки и минимальной настройки понадобилось воспользоваться Timer-> onNewHour - Сначало удивило, что метод был пуст, ну внес туда нужные строки и как выяснилось метод не запускается

Код: Выделить всё

//Получаем Час для сцен
$time1 = explode(":", gg("ThisComputer.timeNow") );
sg("ThisComputer.timeH",$time1[0]);

//Проверка Почты России 
$PostTracker = new app_PostTracker();
$PostTracker->updateStatuses(); 
Как бы ни одно из обновлений не выполняется((
При ручном запуске еще и вываливается куча ощибок

Код: Выделить всё

Warning: include_once(./modules/app_yaweather/app_yaweather.class.php): failed to open stream: No such file or directory in /var/www/modules/objects/objects.class.php(530) : eval()'d code on line 6

Warning: include_once(): Failed opening './modules/app_yaweather/app_yaweather.class.php' for inclusion (include_path='.:/usr/share/php') in /var/www/modules/objects/objects.class.php(530) : eval()'d code on line 6

Fatal error: Uncaught Error: Class 'app_yaweather' not found in /var/www/modules/objects/objects.class.php(530) : eval()'d code:7 Stack trace: #0 /var/www/modules/objects/objects.class.php(530): eval() #1 /var/www/modules/objects/objects.class.php(487): objects->callMethod('onNewHour', Array, 1) #2 /var/www/objects/index.php(152): objects->callMethod('onNewHour', Array) #3 {main} thrown in /var/www/modules/objects/objects.class.php(530) : eval()'d code on line 7
Та Яндекс погода у меня не становлена, проба была с установкой этого модуля с Маркета, но так как Yandex давно прикрыл xml, удалил, похоже хвосты остались после сноса модуля- Как чистить ???
PS А не имеет ли смысл убрать с маркета не рабочие модули, а то я уже себе систему ими покорежил от души
PSS Вернул обратно модуль app_yaweather )) и-Timer-> onNewHour заратотало без ошибок, как избавиться от ненужной и не рабочей яндекспогоды?
У меня там были ошметки от яндекс погоды - вычистил их и никаких ошибок (хотя их и раньше не было)
xneo
Сообщения: 21
Зарегистрирован: Пн апр 24, 2017 4:35 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Ошибки/проблемы/неисправности системы

Сообщение xneo » Ср апр 26, 2017 5:56 am

Нашлась еще одна ошибка в цикле ping (вернее в модуле от этого цикла). В файле var/www/modules/pinghosts/pinghosts.class.php (у вас может быть другой путь если вы ставили не в каталог www) в функции checkAllHosts (186 строка) есть запрос из базы и после него формирование цикла for. Так вот он выполняется лишний раз каждый раз т.к. это цикл с постусловием.
По хорошему его бы заменить на цикл while но я (ленивый/утро раннее/думать не охото) поступил иначе: добавил после него условие проверки наличия чего либо в имени/адресе хоста который будет проверяться. В итоге я добавил после 192 строки новую строку с таким содержанием:

Код: Выделить всё

if ($host['HOSTNAME']!="") {
и после строки 331 (до вставки строки выше это была 330 строка (хотя там особо без разницы - кругом скобки)) вставил строку с таким содержанием:

Код: Выделить всё

} //endif ($host['HOSTNAME']!="")  
В итоге полный листинг этого фала теперь такой:
СпойлерПоказать

Код: Выделить всё

<?php
/**
* Pinghosts 
*
* Pinghosts
*
* @package MajorDoMo
* @author Serge Dzheigalo <jey@tut.by> http://smartliving.ru/
* @version 0.2 (wizard, 00:01:48 [Jan 06, 2011])
*/
Define('DEF_TYPE_OPTIONS', '0=PING (HOST)|1=WEB PAGE (URL)'); // options for 'HOST TYPE'
//
//
class pinghosts extends module {
/**
* pinghosts
*
* Module class constructor
*
* @access private
*/
function pinghosts() {
  $this->name="pinghosts";
  $this->title="<#LANG_MODULE_PINGHOSTS#>";
  $this->module_category="<#LANG_SECTION_DEVICES#>";
  $this->checkInstalled();
}
/**
* saveParams
*
* Saving module parameters
*
* @access public
*/
function saveParams($data=0) {
 $p=array();
 if (IsSet($this->id)) {
  $p["id"]=$this->id;
 }
 if (IsSet($this->view_mode)) {
  $p["view_mode"]=$this->view_mode;
 }
 if (IsSet($this->edit_mode)) {
  $p["edit_mode"]=$this->edit_mode;
 }
 if (IsSet($this->tab)) {
  $p["tab"]=$this->tab;
 }
 return parent::saveParams($p);
}
/**
* getParams
*
* Getting module parameters from query string
*
* @access public
*/
function getParams() {
  global $id;
  global $mode;
  global $view_mode;
  global $edit_mode;
  global $tab;
  if (isset($id)) {
   $this->id=$id;
  }
  if (isset($mode)) {
   $this->mode=$mode;
  }
  if (isset($view_mode)) {
   $this->view_mode=$view_mode;
  }
  if (isset($edit_mode)) {
   $this->edit_mode=$edit_mode;
  }
  if (isset($tab)) {
   $this->tab=$tab;
  }
}
/**
* Run
*
* Description
*
* @access public
*/
function run() {
 global $session;
  $out=array();

  if ($this->mobile) {
   $out['MOBILE']=1;
  }

  if ($this->action=='admin') {
   $this->admin($out);
  } else {
   $this->usual($out);
  }
  if (IsSet($this->owner->action)) {
   $out['PARENT_ACTION']=$this->owner->action;
  }
  if (IsSet($this->owner->name)) {
   $out['PARENT_NAME']=$this->owner->name;
  }
  $out['VIEW_MODE']=$this->view_mode;
  $out['EDIT_MODE']=$this->edit_mode;
  $out['MODE']=$this->mode;
  $out['ACTION']=$this->action;
  $out['TAB']=$this->tab;
  if ($this->single_rec) {
   $out['SINGLE_REC']=1;
  }
  $this->data=$out;
  $p=new parser(DIR_TEMPLATES.$this->name."/".$this->name.".html", $this->data, $this);
  $this->result=$p->result;
}
/**
* BackEnd
*
* Module backend
*
* @access public
*/
function admin(&$out) {
 if (isset($this->data_source) && !$_GET['data_source'] && !$_POST['data_source']) {
  $out['SET_DATASOURCE']=1;
 }
 if ($this->data_source=='pinghosts' || $this->data_source=='') {
  if ($this->view_mode=='' || $this->view_mode=='search_pinghosts') {
   $this->search_pinghosts($out);
  }
  if ($this->view_mode=='edit_pinghosts') {
   $this->edit_pinghosts($out, $this->id);
  }
  if ($this->view_mode=='delete_pinghosts') {
   $this->delete_pinghosts($this->id);
   $this->redirect("?");
  }
 }
}
/**
* FrontEnd
*
* Module frontend
*
* @access public
*/
function usual(&$out) {
 $this->admin($out);
}
/**
* pinghosts search
*
* @access public
*/
 function search_pinghosts(&$out) {
  require(DIR_MODULES.$this->name.'/pinghosts_search.inc.php');
 }
/**
* pinghosts edit/add
*
* @access public
*/
 function edit_pinghosts(&$out, $id) {
  require(DIR_MODULES.$this->name.'/pinghosts_edit.inc.php');
 }
/**
* pinghosts delete record
*
* @access public
*/
 function delete_pinghosts($id) {
  $rec=SQLSelectOne("SELECT * FROM pinghosts WHERE ID='$id'");
  // some action for related tables
  SQLExec("DELETE FROM pinghosts WHERE ID='".$rec['ID']."'");
 }

/**
* Title
*
* Description
*
* @access public
*/
 function checkAllHosts($limit=1000) {

  // ping hosts
  $pings=SQLSelect("SELECT * FROM pinghosts WHERE CHECK_NEXT<=NOW() ORDER BY CHECK_NEXT LIMIT ".$limit);
  $total=count($pings);
  for($i=0;$i<$total;$i++) {
   $host=$pings[$i];
   if ($host['HOSTNAME']!="") {
   echo "Checking ".$host['HOSTNAME']."\n";
   $online_interval=$host['ONLINE_INTERVAL'];
   if (!$online_interval) {
    $online_interval=60;
   }
   $offline_interval=$host['OFFLINE_INTERVAL'];
   if (!$offline_interval) {
    $offline_interval=$online_interval;
   }

   if ($host['STATUS']=='1') {
    $host['CHECK_NEXT']=date('Y-m-d H:i:s', time()+$online_interval);
   } else {
    $host['CHECK_NEXT']=date('Y-m-d H:i:s', time()+$offline_interval);
   }
   SQLUpdate('pinghosts', $host);

   $online=0;
   // checking
   if (!$host['TYPE']) {
    //ping host

    $online=ping(processTitle($host['HOSTNAME']));
   } else {
    //web host
    $online=getURL(processTitle($host['HOSTNAME']), 0);
    SaveFile("./cached/host_".$host['ID'].'.html', $online);
    if ($host['SEARCH_WORD']!='' && !is_integer(strpos($online, $host['SEARCH_WORD']))) {
     $online=0;
    }
    if ($online) {
     $online=1;
    }
   }

   if ($online) {
    $new_status=1;
   } else {
    $new_status=2;
   }

   $old_status=$host['STATUS'];

   if ($host['COUNTER_REQUIRED']) {
    $old_status_expected=$host['STATUS_EXPECTED'];
    $host['STATUS_EXPECTED']=$new_status;
    if ($old_status_expected!=$host['STATUS_EXPECTED']) {
     $host['COUNTER_CURRENT']=0;
     $host['LOG']=date('Y-m-d H:i:s').' tries counter reset (status: '.$host['STATUS_EXPECTED'].')'."\n".$host['LOG'];
    } elseif ($host['STATUS']!=$host['STATUS_EXPECTED']) {
     $host['COUNTER_CURRENT']++;
     $host['LOG']=date('Y-m-d H:i:s').' tries counter increased to '.$host['COUNTER_CURRENT'].' (status: '.$host['STATUS_EXPECTED'].')'."\n".$host['LOG'];
    }
    if ($host['COUNTER_CURRENT']>=$host['COUNTER_REQUIRED']) {
     $host['STATUS']=$host['STATUS_EXPECTED'];
     $host['COUNTER_CURRENT']=0;
    } else {
     $interval=min($online_interval, $offline_interval, 20);
     $online_interval=$interval;
     $offline_interval=$interval;
    }
   } else {
    $host['STATUS']=$new_status;
    $host['STATUS_EXPECTED']=$host['STATUS'];
    $host['COUNTER_CURRENT']=0;
   }

   $host['CHECK_LATEST']=date('Y-m-d H:i:s');

   if ($host['LINKED_OBJECT']!='' && $host['LINKED_PROPERTY']!='') {
    setGlobal($host['LINKED_OBJECT'].'.'.$host['LINKED_PROPERTY'], $host['STATUS']);
   }

   if ($host['STATUS']=='1') {
    $host['CHECK_NEXT']=date('Y-m-d H:i:s', time()+$online_interval);
   } else {
    $host['CHECK_NEXT']=date('Y-m-d H:i:s', time()+$offline_interval);
   }

   if ($old_status!=$host['STATUS']) {
    if ($host['STATUS']==2) {
     $host['LOG']=date('Y-m-d H:i:s').' Host is offline'."\n".$host['LOG'];
    } elseif ($host['STATUS']==1) {
     $host['LOG']=date('Y-m-d H:i:s').' Host is online'."\n".$host['LOG'];
    }
   }

   $tmp=explode("\n", $host['LOG']);
   $total=count($tmp);
   if ($total > 30) {
    $tmp=array_slice($tmp, 0, 30);
    $host['LOG']=implode("\n", $tmp);
   }

   SQLUpdate('pinghosts', $host);

   if ($old_status!=$host['STATUS'] && $old_status!=0) {
    // do some status change actions
    $run_script_id=0;
    $run_code='';
    if ($old_status==2 && $host['STATUS']==1) {
     // got online
     if ($host['SCRIPT_ID_ONLINE']) {
      $run_script_id=$host['SCRIPT_ID_ONLINE'];
     } elseif ($host['CODE_ONLINE']) {
      $run_code=$host['CODE_ONLINE'];
     }
    } elseif ($old_status==1 && $host['STATUS']==2) {
     // got offline
     if ($host['SCRIPT_ID_OFFLINE']) {
      $run_script_id=$host['SCRIPT_ID_OFFLINE'];
     } elseif ($host['CODE_OFFLINE']) {
      $run_code=$host['CODE_OFFLINE'];
     }
    }

    if ($run_script_id) {
     //run script
     runScript($run_script_id);
    } elseif ($run_code) {
     //run code

                  try {
                   $code=$run_code;
                   $success=eval($code);
                   if ($success===false) {
                    DebMes("Error in hosts online code: ".$code);
                    registerError('ping_hosts', "Error in hosts online code: ".$code);
                   }
                  } catch(Exception $e){
                   DebMes('Error: exception '.get_class($e).', '.$e->getMessage().'.');
                   registerError('ping_hosts', get_class($e).', '.$e->getMessage());
                  }

    }

   }
   
  } //endif ($host['HOSTNAME']!="")
  } 


 }

/**
* Install
*
* Module installation routine
*
* @access private
*/
 function install($parent_name="") {
  parent::install($parent_name);
 }
/**
* Uninstall
*
* Module uninstall routine
*
* @access public
*/
 function uninstall() {
  SQLExec('DROP TABLE IF EXISTS pinghosts');
  parent::uninstall();
 }
/**
* dbInstall
*
* Database installation routine
*
* @access private
*/
 function dbInstall($data) {
/*
pinghosts - Pinghosts
*/
  $data = <<<EOD
 pinghosts: ID int(10) unsigned NOT NULL auto_increment
 pinghosts: TITLE varchar(255) NOT NULL DEFAULT ''
 pinghosts: HOSTNAME varchar(255) NOT NULL DEFAULT ''
 pinghosts: TYPE int(30) NOT NULL DEFAULT '0'
 pinghosts: STATUS int(3) NOT NULL DEFAULT '0'
 pinghosts: SEARCH_WORD varchar(255) NOT NULL DEFAULT ''
 pinghosts: CHECK_LATEST datetime
 pinghosts: CHECK_NEXT datetime
 pinghosts: SCRIPT_ID_ONLINE int(10) NOT NULL DEFAULT '0'
 pinghosts: CODE_ONLINE text
 pinghosts: SCRIPT_ID_OFFLINE int(10) NOT NULL DEFAULT '0'
 pinghosts: CODE_OFFLINE text
 pinghosts: OFFLINE_INTERVAL int(10) NOT NULL DEFAULT '0'
 pinghosts: ONLINE_INTERVAL int(10) NOT NULL DEFAULT '0'
 pinghosts: LINKED_OBJECT varchar(255) NOT NULL DEFAULT ''
 pinghosts: LINKED_PROPERTY varchar(255) NOT NULL DEFAULT ''
 pinghosts: COUNTER_CURRENT int(10) NOT NULL DEFAULT '0'
 pinghosts: COUNTER_REQUIRED int(10) NOT NULL DEFAULT '0'
 pinghosts: STATUS_EXPECTED int(3) NOT NULL DEFAULT '0'
 pinghosts: LOG text
EOD;
  parent::dbInstall($data);
 }
// --------------------------------------------------------------------
}
/*
*
* TW9kdWxlIGNyZWF0ZWQgSmFuIDA2LCAyMDExIHVzaW5nIFNlcmdlIEouIHdpemFyZCAoQWN0aXZlVW5pdCBJbmMgd3d3LmFjdGl2ZXVuaXQuY29tKQ==
*
*/
?>
Закрыто