Как то я проснулся ночью. Спать не хотелось и я решил пошариться по интернету. Да не тут то было. Во внутреннюю сеть Корбины вхожу - далее никуда.
Думаю деньги кончились - полез в личный кабинет, а зайти туда не могу. Соединение сбрасывается.
Потом по прошествии времени с ними очень трудно разбираться.
- Когда у Вас было отключение? Не помните? Ну вспомните - позвоните.
В общем я разозлился и написал вот такой скрипт.
#!/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)
Надо было сразу звонить в службу поддержки: я от оператора до технического специалиста доходил:) фиксировал номер заявки и возвращал деньги:)
ОтветитьУдалитьраз не спалось - надо было звонить! минут за 20 разобрались бы. Правда с роутером сложнее. Они корректно обычно отвечают по тем моделям, которые они официально рекомендуют, но в последний раз я им объяснял, что у меня асус н 15 - они не заставили лезть и переключать кабель в комп. Разобрались и так:)
Это правда.
ОтветитьУдалитьЕсли им сразу позвонить, то все происходит.
Но.
1. Автоматически, без моего участия Билайн не хочет ставить компенсацию. Им зачем то мой звонок требуется.
2. Если девочка "забудет" поставить в своей системе компенсацию, пройдет пол месяца и, покопавшись в памяти и поняв, что я не помню дату и время, когда был инцидент, плюешь на это и живешь дальше до следующего отключения. Когда оно происходит (в самый неудобный момент): материшься, звонишь, ждешь включения и круг замкнулся.
3. Они сознательно не вводят фиксации переписки с клиентом, что бы не осталось никаких следов.
Я хочу, чтобы этот процесс был детерминирован и автоматизирован, то есть требовалось мое минимальное участие. 8)
Вот, собственно, мои движущие силы
Я понимаю, что скрипт это круто, но не проще ли сменить провайдера?
ОтветитьУдалитьА что? Другой провайдер весь такой из себя честный?
ОтветитьУдалитьХоть у меня не билайн, но скрипт оказался какраз очень полезен, спасибо!
ОтветитьУдалитьНо:
Заменил IP1 и IP2 на свои адреса,
Почему-то нет никаких уведомлений, для начала пробовал отправлять к себе на почту.
Упс, разобрался. Сорри.
ОтветитьУдалитьСпасибо ещё раз!
Ух! Круто. Я посмотрел сейчас. У меня по логам длительные сбои прекратились.
ОтветитьУдалитьНе знаю что повлияло: то ли письма, то ли они все наладили.
А наверное и то и другое.
Рад, что скрипт пригодился еще кому то.