tarasfrompir

<<< Назад

Новый контроль циклов - или как таки разгрузить базу данных от ненужных запросов

Описание исправления контроля циклов в системе МДМ

ОБновление 2 - 18-06-21
По поводу цикла Вебсокетс
cycle_websockets.php - который не запускается править надо файл - https://github.com/sergejey/majordomo/blob/master/...
править надо вот тут - https://github.com/sergejey/majordomo/blob/master/...

и исправление надо сделать вот так

echo date("H:i:s") . " Cycle cycle_websockets.php is running " ;

Обновление 18-06-21 - убрано пару мелких недочетов...
ПЕРЕНЕСУ НАВЕРХ ОБНОВЛЕНИЕ ФАЙЛА cycle.php - вот на него Сссылка

Не секрет что бд МДМ часто долбится ненужными запросами по поводу состояния циклов - причем ИЗНАЧАЛЬНО весь этот контроль работы циклов через базу данных мускула и не предполагался .
Будем исправлять это безобразие - ибо как говорят старожилы разгрузка работы мдм от ненужных действий это уже мого плюсов к стабильности и долговечности работы Мажордомо...
файл
В данном файле(архиве) содержится сам файл cycle.php и дополнительный класс - позволяющий записывать файлы напрямую в память минуя всякие временные файлы на дисках....
Смысл переделки следующий -
Раньше в циклах передавался в систему таймштамп последней сработки цикла - через функцию сетглобал - что приводило к постоянным запросам к базе данных, новый же вариант перехватывает вывод цикла через команду есно и по определенной фразе контролирует проход цикла в цикле (простите за тавтологию)...
Поскольку все циклы имеют в себе такой код -

while (1) {
    if (time() - $checked_time > 5) {
        $checked_time = time();
                setGlobal((str_replace('.php', '', basename(__FILE__))) . 'Run', time(), 1);
    }

    if (file_exists('./reboot') || isset($_GET['onetime'])) {
        exit;
    }

    sleep(1);
}

и вот эта строка передает в систему скажем так команду о том что цикл прокрутился

setGlobal((str_replace('.php', '', basename(__FILE__))) . 'Run', time(), 1);

Но тут есть загвоздка - именно эта комнада и очень нагружает систему..

Поэтому после внесенных мною изменений эта команда заменяется на

echo date("H:i:s") . " Cycle " . basename(__FILE__) . ' is running ';

И эти данные передаются не в базу данных, а напрямую в скрипт выполняющий запуск и управление циклами - то соответственно вот тут и происходит разгрузка системы...

Описание того как и что надо сделать чтобы все это работало
Теперь после установки (замены) файлов в циклах можно провести замену 1 строкив цикле
setGlobal((str_replace('.php', '', basename(FILE))) . 'Run', time(), 1);
на
echo date("H:i:s") . " Cycle " . basename(FILE) . ' is running ';
изменяет способ контроля циклов.

Обязателен рестарт МДМ - ибо не будет работать пока не ребутнеш.

циклы со статусом - hung - если появляются таковые будут автоматически перегружатся через пять минут. А также всь вывод данного цикла при ошибке будет сохранятся в соответствующем файле лога по названию цикла.. Достаточно будет данных для исследования причины остановки цикла...
Все цыклы которые выйдут по команде ехit - автоматически запускатся не будут - ибо так было задуманно в цикле (к примеру цикл коннекта).
Также все управление циклами (запуск, рестарт, останов) - работают как и раньше с панели управления...
ДЛЯ избежания автостарта опреденных циклов -
(при условии замены в них строк как показано выше ) -
нужно отключить АВТОЗАПУСК ЦИКЛОВ в классе - systemStates
обьект - System методе - checkState
в методе
Краткая статистика от добровольца -
циклов - 19
было 121 запрос к бд
стало 44 - запроса к бд.
ПС
Не факт что у вас этот показатель будет таким же - но все же - должны быть улучшения...
И - ОБЯЗАТЕЛЬНОЕ УСЛОВИЕ - вы все делаете на свой страх и риск. Я ОТВЕТСТВЕННОСТИ НЕ НЕСУ НИКАКОЙ АБСОЛЮТНО ибо вы все делаете на свой страх и риск
ПС - забекапте для себя файл cycle.php а также всю папочку scripts - на всякий случай....

Update - 13-06-21
Перевел все циклы на стандартный вариант контроля циклов - после 12 часового теста - 98 запросов

ПППС.
теперь работает и старый вариант контроля и новый - но пристаром контроле увеличится нагрузка на бд естественно

Обсуждение (9) (15)

Смотрите так же:
18.11.2020 Функции работы с классами.. Добавленные 18.11.2020 года - https://github.com/sergejey/majordomo/pull/851
30.10.2020 Как получить информацию о местоположении и всем остальном
30.10.2020 Как получить внешни айпи адрес
17.12.2019 ТЕРМИНАЛЫ2 Как передать сообщение привязанному пользователю терминала
02.12.2019 Terminals 2 - настройка Телеграмма - как терминала (Обновлено)
19.03.2019 Как-бы да если-бы... Я бы передавал температуру на термостат...

Пирятин, Украина

На форуме: tarasfrompir

Веб-сайт:
http://netu_u_menya_sayta.world