Есть у меня самописная конфигурируемая панель на python’e, которая мне показывает разные данные. Каждый элемент описывается в конфигурации:
data = {
"item0": {
"status": True,
"path": "./modules/connect_wireguard.sh",
"result": " "
},
"item2": {
"status": True,
"path": "./modules/pomo.sh",
"result": "OK:L "
},
"item3": {
"status": True,
"path": "./modules/io/cpu.sh",
"result": "L "
},
"item4": {
"status": True,
"path": "./modules/io/ram.sh",
"result": "L "
},
"item5": {
"status": True,
"path": "./modules/io/io.sh",
"result": "L "
},
"item6": {
"status": True,
"path": "./modules/weather_wttr_in.py",
"result": "W:L "
},
"item7": {
"status": True,
"path": "./modules/connect.sh",
"result": "OK"
},
"item8": {
"status": True,
"path": "./modules/band2.py",
# "result": "D:LOAD U:LOAD "
"result": ":L "
},
"item9": {
"status": True,
"path": "./modules/fs.sh",
"result": "RHD:L,L,L "
},
"item91": {
"status": True,
"path": "./modules/date.sh",
"result": "L. "
},
"item92": {
"status": True,
"path": "./modules/time.sh",
"result": "L"
}
}
Каждый скрипт генерирует данные, и скрипт это всё отдает dwm’у и панель обновляет данные. Каждый скрипт со своим таймаутом. Лет 15 это всё работает и всё хорошо, но появился один кейс и надо это всё как-то или переписать или расширить функционал. А кейс такой:
Скрипт ./modules/fs.sh обновляет данные каждые 300 секунд. Я когда-то поднимал тему, при df -h производится ли пересчет свободного места на диске(дергает ли постоянно df -h диск или нет)? Если да, то если поставить каждые 5 секунд, то имеем в час 720 или 17280 обращений к диску в сутки. Это не есть хорошо. Итак, скрипт ./modules/fs.sh нужен для того, чтобы мониторить свободное место на диске, чтобы можно было прогнозировать, сколько торрентов можно поставить на закачку. Попутно я удаляю просмотренные торренты и заметил, что я чаще смотрю не на панельку, а вручную запускаю df -h, т.к в панельке оно обновляется раз в пять минут. Поэтому нужно как-то делать, чтобы можно было обновлять или всю панельку или атомарно скрипты. На ум приходит два варианта:
- fifo на каждый скрипт, чтобы скрипты смотрели в фифо и если там появляется команда update, то обновляли по требованию
- более правильный. таймаут перенести из скриптов в python скрипт, чтобы скрипты не каждый сам в бесконечном цикле с таймаутом работал, а при обращении к нему отдавал данные и прекращал работу. Значит python скрипт должен создавать треды и каждые х секунд обращался к скриптам и чтобы можно было по ipc или по fifo отдавать команды на обновления каких-то item’ов
Или вообще как лучше организовать архитектуру этого хозяйства, чтобы этим всем барахлишком рулить?