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=...
Нижний Тагил, Россия
На форуме: Logrus