#!/bin/bash

# Цикл для нагрузки на скрипты
# Пример для Daos
# Сделал BrokenBrake.biz

# Сколько проходов цикла? 1000 * 50 (ApachBench) = 50 тыс. запросов, примерно 3 часа на моей машине
LIMIT=1000
# Счётчик сбросов
FAIL=0
# Счётчик перезагрузок сервера
RESTART=0

for ((a=1; a <= LIMIT ; a++))
do
	echo $a
# При таком тестировании сервер приходится иногда перезагружать
# Иначе проснёшься с надеждой на результаты, а увидишь сплошной fork...
Non2resp=`cat /tmp/stress-ab.log | tail -n 60 | grep Non | grep -e "[0-9][0-9]"`
if [ "$Non2resp" != "" ]
then
	echo 'Перезагрузка'
	RESTART=$((RESTART+1))
	killall mongoose &&\
	sleep 3;
	mongoose -i index.php,index.html -p 127.0.0.1:80 -r /home/me/www -u me -I /usr/bin/php-cgi > /dev/null &
	sleep 2; echo "$RESTART" > /tmp/restart-counter.log
	sleep 5
	echo "Внимание! Предыдущий тест вызвал падение сервера! (4valenok)" >> /tmp/stress-ab.log
fi

# По 50 запросов через AB за каждый проход цикла
AB=`ab -n 50 -c 3 http://do/Daos/dist/JSblock.php`
# Проверка var/stat.php (был сброс или нет?)
# Запускаться скрипт должен в каталоге с установленным Daos
TEST=`cat var/stat.php | grep test@stress | cut -d . -f 2`

#Если сброс был, увеличим счётчик сбросов и вернём stat.php в норм. состояние
if [ "$TEST" != "OK" ]
then
	cp /home/me/www/Daos/dist/var/stat50.php /home/me/www/Daos/dist/var/stat.php
	TEST='FAIL'
	FAIL=$((FAIL+1))
fi

# Запись краткого лога тестирования
echo $a $TEST >> /tmp/stress.log

# 3 echo для перевода строк, \n почему-то не сработали
# разбираться некогда. Запись лога вывода ApachBench (AB)
echo "*********************************" >> /tmp/stress-ab.log
echo "Test  $a ($TEST)" >> /tmp/stress-ab.log
echo "$AB" >> /tmp/stress-ab.log

# Запись счётчика сбросов
echo "$FAIL" > /tmp/stress-fails-counter.log


# Завершение цикла
done
