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) (9)

Смотрите так же:
10.01.2021 DROP_TABLE
07.05.2020 Телеграмм. Полезное
30.06.2019 Телеграмм. Меню - управление группами ПУ
29.06.2019 Телеграмм. Меню - запуск скриптов (сценариев)
21.10.2018 Настройки громкости
07.10.2018 Примеры кода
25.09.2018 Телеграмм. pChart
02.05.2018 Класс SOpenClose метод logicAction (по-русски "Входная дверь")
05.04.2018 Шаблон отображения в классе "Users"
02.12.2018 Режим "Никого нет дома"

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

На форуме: Logrus