Logrus

<<< Назад

checkState

http://majordomo.smartliving.ru/forum/viewtopic.php?f=4&t=617&start=20#p88202

$details=array();
$red_state=0;
$yellow_state=0;

$cycles=array('main'=>'главный цикл','execs'=>'цикл запуска команд','scheduler'=>'цикл планировщика');
foreach($cycles as $k=>$v) {
 $tm=getGlobal('ThisComputer.cycle_'.$k.'Run');
 if (time()-$tm>2*60 && !empty($tm)) { //последние изменения если упал то смысл ждать 5 мин., и второе чтоб при рестарте циклов не орало
  $red_state=1;
  $details[]=$v.' '.LANG_GENERAL_STOPPED.'.';
 }
}
if (getGlobal('ThisComputer.SpaceProblems')>0) { //скрипт checkFreeSpace
  $red_state=1;
  $details[]='Недостаточно места на диске ('.getGlobal('ThisComputer.SpaceProblems_Details').').';  
}

$cycles=array('ping'=>'цикл пинг','phistory'=>'цикл записи истории','xiaomihome'=>'цикл сяоми оборудования','telegram'=>'цикл телеграмм'); //новый цикл phistory, отвечает за запись в историю свойства
foreach($cycles as $k=>$v) {
 $tm=getGlobal('ThisComputer.cycle_'.$k.'Run');
 if (time()-$tm>3*60 && !empty($tm)) { //последние изменения если упал то смысл ждать 10 мин., и второе чтоб при рестарте циклов не орало
  $yellow_state=1;
  $details[]=$v.' '.LANG_GENERAL_STOPPED.'.';  
 }
}
$qp=getGlobal('ThisComputer.phistory_queue_problem'); //последние добавления в сис-ме на проверку очереди
if ($qp) {
$yellow_state=1;
$details[]='Проблемы с обработкой очереди данных.';
}

if ($red_state) {
 $state='red';
 $state_title=LANG_GENERAL_RED; 
} elseif ($yellow_state) {
 $state='yellow';
 $state_title=LANG_GENERAL_YELLOW;  
} else {
 $state='green';
 $state_title=LANG_GENERAL_GREEN;   
}

$new_details=implode('. ',$details);
if ($this->getProperty('stateDetails')!=$new_details) {
 $this->setProperty('stateDetails',$new_details);
}

if ($this->getProperty('stateColor')!=$state) {
 $this->setProperty('stateColor',$state);
 $this->setProperty('stateTitle',$state_title);
 if ($state!='green') {
  say(LANG_GENERAL_SYSTEM_STATE.' '.LANG_GENERAL_CHANGED_TO.' '.$state_title.'.',2);
  say(implode('. ',$details));
 } else {
  say(LANG_GENERAL_SYSTEM_STATE.' '.LANG_GENERAL_RESTORED_TO.' '.$state_title,2);
 }
 //$this->callMethod('stateChanged'); //вызывается из цикла с параметром ('STATE' => stateColor)
}
return; //выход что б не выполнять инжекцию, там опрос ('SMotions','SOpenClose','SSensors') свойства alive
/* begin injection of {SDevices} */
require(DIR_MODULES.'devices/system_checkstate.php');
/* end injection of {SDevices} */

П.С. чтоб сильно не нагружало систему проверками (особенно если их много)
cycle_states.php
здесь можно 5 поменять на 10-15-20
изменить cycleBody() и оптимизировать метод checkState

Примечания по использованию: https://t.me/MajorDoMoRu/92273
https://mjdm.ru/forum/viewtopic.php?f=24&t=6389&p=...

Обсуждение (3) (7)

Смотрите так же:
30.06.2019 Телеграмм. Меню - управление группами ПУ
29.06.2019 Телеграмм. Меню - запуск скриптов (сценариев)
21.10.2018 Настройки громкости
07.10.2018 Примеры кода
25.09.2018 pChart
24.09.2018 Уход за базой данных
05.08.2018 Управление подсветкой на шлюзе Сяоми
21.06.2018 Каталог ссылок
10.06.2018 Меню
08.07.2018 mail()
04.05.2018 Режим "EnergyTariffMode"
02.05.2018 Класс SOpenClose метод logicAction (по-русски "Входная дверь")
22.04.2018 Программы
19.04.2018 Пользовательские функции
11.04.2018 Шаблон отображения в классе "ExchangeRates"
05.04.2018 Шаблон отображения в классе "Users"
02.12.2018 Режим "Никого нет дома"
25.02.2018 Бэкап и обслуживание системы

Нижний Тагил, Россия

На форуме: Logrus