Как то я проснулся ночью. Спать не хотелось и я решил пошариться по интернету. Да не тут то было. Во внутреннюю сеть Корбины вхожу - далее никуда.
Думаю деньги кончились - полез в личный кабинет, а зайти туда не могу. Соединение сбрасывается.
Потом по прошествии времени с ними очень трудно разбираться.
- Когда у Вас было отключение? Не помните? Ну вспомните - позвоните.
В общем я разозлился и написал вот такой скрипт.
#!/bin/bash
# Контроль работы домашнего проводного интернет BeeLine (Corbina)
# Скрипт последовательно проверяет доступность внутреннего роутера,
# внутренней сети Корбины (Билайн) и сайта google.
# В случае ошибки доступа в log файле делается соответствующая запись.
#
# Для автоматической отправки писем требуется MTA. Я использую exim
# Настройка MTA exim http://wiki.debian.org/GmailAndExim4
#
# Copyleft AxaRu http://axa-ru.blogspot.com/2011/02/fucking-beeline.html
# Версия Изменения
# ------------ ---------------------------------------------------------------
#VERSION=0.1 # Первая версия. Проверка работы интернета
#VERSION=0.11 # Добавлена возможность измерения скорости соединения
#VERSION=0.12 # Добавлены опции командной строки
#VERSION=0.13 # Добавил опцию спецификации log-файла
#VERSION=0.131 # Убрал ключ -v Verbose. Информация по доступности узлов
# в log не пишется и выводится только в консоль при включении
# ключа -d debug
#VERSION=0.14 # сделал отправку письма и sms о перебое в работе интернета
# и письма в службу Корбина (Билайн) с требованием компенсации
# за непредоставленную услугу
VERSION=0.141 # добавил спецификацию почтового ящика, куда будут
# отправляться письма
LOG_FILE=/var/log/corbina.log # журнал работы программы
RC_FAIL=0 # return code = FAIL
RC_OK=1 # return code = OK000
ERROR_BARIER=4 # Количество ошибок подряд, после которого высылается
# письмо в службу поддержки о предоставлении компенсации
EMAILTO=ivanov@gmail.com
# Адрес, куда направлять письма о компенсации за
# отсутствие услуги интернета
#-------------------------------------------------------------------------------
# Текст письма в службу поддержки
CLAIM11="В службу поддержки пользователей
от пользователя услуги ""Домашний интернет""
Иванова И.И.
Договор №1234 от 12 октября 2008 года
Сообщаю вам, что с"
Start_interrupt=0 # когда прекратилась услуга интернета
CLAIM12=" по "
Stop_interrupt=0 # когда интернета был восстановлен
CLAIM13=" были перебои в
предоставлении услуги интернет.
Прошу предоставить мне компенсацию.
С уважением Иванов И.И.
"
#-------------------------------------------------------------------------------
#
Usage()
{
echo "chki -[dehlmsvV]"
echo "check internet connection"
echo " d - debug mode, shows the internal variables"
echo " e - logs only error state"
echo " h - this help"
echo " l [filename] - specify log file, default /var/log/corbina.log"
echo " m [mailbox] - mail to, specify mail recipient. If mailbox is"
echo " wrong mail will not be delivered"
echo " s - download speed measurement"
echo " V - version"
echo "example:"
echo "chki.sh -del corbina.log -m myaddress -s"
}
#-------------------------------------------------------------------------------
#
Version()
{
echo "chki - check internet connection v$VERSION"
}
#-------------------------------------------------------------------------------
# запись текста в log-файл
Log()
{
echo $(date +'%F %T') ! "$*" | tee -a $LOG_FILE
}
#-------------------------------------------------------------------------------
# Проверяет доступность сайта и возвращает результат
Chk_ip()
{
if ping -c 3 -q $* | grep '100% packet loss'> /dev/null
then
Val=$RC_FAIL
else
Val=$RC_OK
fi
$DEBUG && echo "Address=$*, Result=$Val"
return $Val
}
#-------------------------------------------------------------------------------
# Проверяет это восстановление после сбоя?
# Если да, то пишем письмо с претензией.
Check_interrupt()
{
local x=2
line_rec=$(tail -$x "$LOG_FILE" | head -1 | grep FAILED)
if [ -n "$line_rec" ]
then
Stop_interrupt=${line_rec:0:19}
while [ -n "$line_rec" ]
do
let x++
Start_interrupt=${line_rec:0:19}
line_rec=$(tail -$x "$LOG_FILE" | head -1 | grep FAILED)
done
$DEBUG && echo "Start_interrupt = $Start_interrupt, Stop_interrupt = $Stop_interrupt"
fi
let "ERROR_BARIER += 2"
$DEBUG && echo "Count=$x, Barrier=$ERROR_BARIER"
if [ "$x" -gt "$ERROR_BARIER" ]
then
$DEBUG && echo "Длинный перерыв. Пишем претензию."
$DEBUG && printf "%s %s %s %s %s" \
"$CLAIM11" "$Start_interrupt" "$CLAIM12" "$Stop_interrupt" "$CLAIM13"
printf "%s %s %s %s %s" \
"$CLAIM11" "$Start_interrupt" "$CLAIM12" "$Stop_interrupt" "$CLAIM13" \
| mail -s 'Компенсация по непредоставлению услуги Домашний интернет' $EMAILTO
fi
}
#-------------------------------------------------------------------------------
# Скачивает тестовый файл длиной 10 MB
TEST_FILE=http://speedtest.wdc01.softlayer.com/downloads/test10.zip
# и расчитывает скорость закачки
SPEED=0
Speed_tst()
{
Start=`eval date +%s`
eval curl -o /dev/null $TEST_FILE
Stop=`eval date +%s`
Ttime=$(( $Stop - $Start ))
Speed_Rate=$(( 10485760 / $Ttime / 1024 ))
$DEBUG && echo "speed_tst: $Stop - $Start = $Ttime, Rate = $Speed_Rate k"
SPEED=$Speed_Rate
return
}
#-------------------------------------------------------------------------------
# --- Configuration ---
IP1=192.168.1.1 # Роутер
IP2=home.corbina.net # Сеть Корбины/Билайна
IP3=www.google.com # Всегда onLine
# IP1 IP2 IP3
# ok ok ok - Все работает
# ok ok fail - Соединение с сетью есть но выхода в интернет нет
# ok fail fail - Отсутствует соединение с сетью
# fail fail fail - Ошибка локальной сети
#
#-------------------------------------------------------------------------------
# Считываем ключи командной строки и устанавливает
# соответствующие значения переменным
DEBUG=false
CSPEED=false
LOG_OK=true
while getopts 'dehl:svV' OPTION
do
$DEBUG && printf "%s " $OPTION
case $OPTION in
d)
DEBUG=true
;;
e)
LOG_OK=false
;;
h)
Usage
exit 2
;;
l)
LOG_FILE=$OPTARG
;;
m)
MAILTO=$OPTARG
;;
s)
CSPEED=true
;;
V)
Version
exit 2
;;
*)
Usage
exit 2
;;
esac
done
$DEBUG && printf "d\n" && echo + Отладка +
$DEBUG && echo "Log file = $LOG_FILE"
Chk_ip "$IP1"
NVal=$(( $? * 100 ))
$DEBUG && echo "NVal=$NVal"
Chk_ip "$IP2"
NVal=$(( $NVal + $? * 10 ))
$DEBUG && echo "NVal=$NVal"
Chk_ip "$IP3"
NVal=$(( $NVal + $? ))
$DEBUG && echo "NVal=$NVal"
case $NVal in
0)
Log "*********** BIG FAIL: You home network is destroyed!!!"
;;
100)
Log "************* FAILED: BeeLine is shitheads"
;;
110)
Log "************* FAILED: BeeLine is shitheads"
;;
111)
$DEBUG && echo "Internet OK"
Check_interrupt
SPEED='---'
$CSPEED && Speed_tst
$LOG_OK && Log "OK: Life is beautiful. Download speed = $SPEED"
;;
*)
Log "Fucking shit. You BAD programmer!!! NVal=$NVal"
;;
esac
exit
Запускается с различными опциями.Теперь достаточно посмотреть corbina.log я подкован фактическим материалом 8)