#!/bin/sh
# QSS led display mpcs activity
# script version 1.1 Copyright (C) 2013 anoxiety
#
# в настройках mpcs в файле /etc/mpcs/mpcs.conf указываем путь к лог файлу LogFile = /tmp/_mpcs.log.pipe
exec > /dev/null 2> /dev/null # скрываем все stdout и stderr, желательно закомментировать при отладке
QSSled="/sys/class/leds/tl-mr3x20:green:qss" # путь к диоду QSS в переменную, может отличаться у разных роутеров
CacheFilter=": cache" # текст который ищем в логе mpcs, чтоб мигнуть диодом QSS, ключь из кеша
FoundFilter=" tuner .*: found " # ключ найден через инет
TimeoutFilter=": timeout" # таймаут
ErrorFilter=": rejected|: not found|incimplete request|too many errors|errno=|failed" # ошибки под ряд черз "|"
# NewFilter="" # новый фильтр, не забыть дописать в AllFilters
AllFilters="$CacheFilter|$FoundFilter|$TimeoutFilter|$ErrorFilter" # все фильтр через "|" можно добавлять свои
ledBlink() { # описываем функцию моргания qss
local times="$1" # сколько раз мограть
local OFFpause="$2" # время выключения
local ONpause="$3" # време свечения
for k in `seq 1 $times` # цикл - кол-во морганий
do
echo 0 > $QSSled/brightness # откл. диод QSS
for i in `seq 0 $OFFpause` ; do echo > /dev/null; done # цикл для паузы отключения 0.2 сек, проц грузит не более 50%
echo 1 > $QSSled/brightness # вкл. диод QSS
for i in `seq 0 $ONpause` ; do echo > /dev/null; done # цикл для паузы свечения 0.2 сек, проц грузит не более 50%
done
}
if [ ! -f /tmp/mpcs ] ; then # если файла mpcs нету в tmp - распакуем его
echo timer > $QSSled/trigger; echo 200 > $QSSled/delay_off ;echo 200 > $QSSled/delay_on # быстро мограем диодом QSS
cp -f /etc/mpcs/mpcs.bz2 /tmp/ # копируем архив mpcs.bz2 из /etc/mpcs/ в /tmp/
sleep 3s # ждем 3 сек. пока скопируется
bunzip2 -f /tmp/mpcs.bz2 # распаковываем файл mpcs в папку /tmp/
chmod +x /tmp/mpcs # даем раcпакованному файлу mpcs права 0755
mkfifo /tmp/_mpcs.log.pipe # создаем FIFО канал для совместного доступа к файлу лога mpcs
fi
if top -bn1 | grep "/[t]mp/mpcs -c /etc/mpcs" &> /dev/null; then # если процесс mpcs запущен - выгружаем его
killall -9 mpcs &> /dev/null # снять задачу mpcs и скрыть вывести stdin и stdout
echo 0 > $QSSled/brightness # откл. диод QSS
rm /tmp/mcps.mem &> /dev/null # удаление временных файлов mpcs
rm /tmp/*.fifo &> /dev/null # удаление временных файлов mpcs
killall grep &> /dev/null # снять задачу grep поиска в логе mpcs
sleep 2s # ждем пока все удалится, выгрузиться, возможно хватит и 1 сек.
fi
if [ -f /tmp/_mpcs.led.flag ]; then # если файл-флаг существует для разрешения моргания QSS
rm /tmp/_mpcs.led.flag &> /dev/null # удаляем файл-флаг
kill -9 $(pgrep -f "grep -E -m 1") &> /dev/null # убиваем процесс grep -E -m 1 в старомцикле while
sleep 2s # ждем 1 секунды чтоб успел выгрузится старый цикл while
fi
/tmp/mpcs -c /etc/mpcs & # запуск mpcs с ключем -с это путь к конф. файлам /etc/mpcs - постоянно работает в фоне
echo 0 > $QSSled/brightness; echo 1 > $QSSled/brightness # вкл. диод QSS
touch /tmp/_mpcs.led.flag # создание файла-флага для разрешения моргания QSS
while [ -f /tmp/_mpcs.led.flag ]; do # цикл - если файл-флаг mpcs.led существует - постоянно работает в фоне
log=$(grep -E -m 1 "$AllFilters" /tmp/_mpcs.log.pipe) # ищем в pipe логе текст, если находим - выполняем дальше
if echo $log | grep -qE "$CacheFilter"; then # если слово из фильтра найдено - моргаем 1 раз
ledBlink 1 10 0 # моргать 1 раз очень быстро, выкл 10 итераций цикла - вкл. 200 итераций цикла -
elif echo $log | grep -qE "$FoundFilter"; then # возможно на разных роутерах (процесс.) разная скорость мигания
ledBlink 1 1000 0 # моргать 1 раз быстро, выкл 500 - вкл. 200
elif echo $log | grep -qE "$TimeoutFilter"; then
ledBlink 2 3000 2000 # моргать 2 раза медленно, выкл 3000, вкл. 2000 - 4500~1 секунда (CPU:400.000 MHz)
elif echo $log | grep -qE "$ErrorFilter"; then
ledBlink 3 3000 2000 # моргать 3 раза медленно, выкл 3000, вкл. 2000
# elif echo $log | grep -qE "$NewFilter"; then # можно добавить свое условия моргания для нового фильтра
# ledBlink 5 3000 2000 # моргать 3 раза медленно, выкл 3000, вкл. 2000
fi
done & # конец цикла