Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- PFO=$1
- PF=date1.txt #это временный файл
- #если при запуске не указан файл - просим указать его
- if [[ -z "$PFO" ]]; then
- echo "не введено имя файла, для обработки. запускайте скрипт, указав имя файла, как аргумент (на пример vib ping.txt)"
- echo "или введите название файла для обработки сюда:"
- read PFO
- fi
- DDEF1=$(awk NR\ ==\ 2\{print\ \$2\} $PFO 2>/dev/null|sed 's/\;/ /g') #берем значение даты в обрабатываемом файле
- DDEF=$(tail $PFO|awk NR\ ==\ 2\{print\ \$2\} 2>/dev/null|sed 's/\;/ /g') #берем значение даты в обрабатываемом файле
- #дата по умолчанию - берется из 2 строки файла
- DADD1=$(echo $DDEF|awk -F "." {print\ \$1}) #день
- DAMD1=$(echo $DDEF|awk -F "." {print\ \$2}) #месяц
- DAYD1=$(echo $DDEF|awk -F "." {print\ \$3}) #год
- DATD=$(date -d "20$DAYD1-$DAMD1-$DADD1 1 day ago" +%F) #дата "за день до"
- DATD=$(date -d "20$DAYD1-$DAMD1-$DADD1 1 day ago" +%F) #дата "за день до"
- #делим дату
- DADD=$(echo $DATD|awk -F "-" {print\ \$3}) #день по умолчанию
- DAMD=$(echo $DATD|awk -F "-" {print\ \$2}) #месяц по умолчанию
- DAYD=$(echo $DATD|awk -F "-" {print\ \$1}) #год
- if [[ -z "$DDEF" ]]; then #проверяем файл
- echo "что-то не так с этим файлом"
- exit 0
- else
- echo OK. начальная дата - $DDEF
- echo дата по умолчанию - $DADD\.$DAMD\.$DAYD
- fi
- IP=$(awk NR\ ==\ 2\{print\ \$4\} $PFO|sed 's/\;/ /g') #адрес хоста, который пингуем
- IPN=$(echo $IP |sed 's/\./-/g') #ip для имени файла
- echo в логе пинги к узлу $IP
- #просим ввести дату, или назначаем ту, что по умолчанию
- echo "какое число разбираем? (по умолчанию - $DADD)"
- read -n 2 DAD
- echo ''
- if [[ -z "$DAD" ]]; then
- DAD=$DADD
- fi
- echo "какой месяц? (по умолчанию - $DAMD)"
- read -n 2 DAM
- echo ''
- if [[ -z "$DAM" ]]; then
- DAM=$DAMD
- fi
- OF=st\_$DAD\_$DAM\_$IPN.csv #обозначаем имя файла с результатами по дате
- echo 'считаем...'
- #делаем выборку строк с пингами с 8:00 заданной даты, до 8:00 следующего утра
- DADP=$(date -d "$DAYD-$DAMD-$DADD +1 day" +%F|awk -F "-" {print\ \$3}) #число следующего дня"
- DAMP=$(date -d "$DAYD-$DAMD-$DADD +1 day" +%F|awk -F "-" {print\ \$2}) #месяц следующего дня"
- cat $PFO |grep "$DAD\.$DAM\...\ 0[8-9]\:..:..\|$DAD\.$DAM\...\ 1[0-9]\:..:..\|$DAD\.$DAM\...\ 2[0-3]\:..:..">>$PF #собственно выборка
- cat $PFO |grep "$DADP\.$DAMP\...\ 0[0-7]\:..:..">>$PF
- #считаем пинги по группам
- OBS=$(/bin/cat $PF| /bin/grep -c ";") #строк всего
- NORM=$(/bin/cat $PF| /bin/grep -c " [1-7] msec") #строк с пингами от 1 до 7
- MIN=$(/bin/cat $PF| /bin/grep -c " [8-9] msec\|1[0-4] msec") #строк с пингами от 8 до 14
- MED=$(/bin/cat $PF| /bin/grep -c " 1[5-9] msec\|2[0-9] msec") #строк с пингами от 16 до 29
- HIGHT=$(/bin/cat $PF| /bin/grep -c "[3-9][0-9] msec") #строк с пингами свыше 30
- ERROR=$(/bin/cat $PF| /bin/grep -c "error(Request timed out)") #строк с потерями
- #создаём временные файлы
- echo "Обрабатывается статистика доступности хоста $IP с 7:00 $DAD.$DAM до 7:00 $DADP.$DAM"
- echo " Статистика доступности хоста $IP с 7:00 $DAD.$DAM до 7:00 $DADP.$DAM" >$OF
- echo '' >e2\.txt
- echo '' >e1\.txt
- echo '' >e\.txt
- #заполняем временные файлы
- /bin/cat $PF| /bin/grep "error(Request timed out)">> ./e\.txt #потери
- /bin/cat $PF| /bin/grep " 1[5-9] msec\|2[0-9] msec">> ./e1\.txt #пинги от 15 до 29
- /bin/cat $PF| /bin/grep " [3-9][0-9] msec">> ./e2\.txt #пинги выше 30
- #считаем проценты
- PNORM=$(echo "scale=2;$NORM*100/$OBS" |bc -l) # до 7
- PMIN=$(echo "scale=2;$MIN*100/$OBS" |bc -l) #8-14
- PMED=$(echo "scale=2;$MED*100/$OBS" |bc -l) #14-30
- PHIGHT=$(echo "scale=2;$HIGHT*100/$OBS" |bc -l) #больше 30
- PERROR=$(echo "scale=2;$ERROR*100/$OBS" |bc -l) #потери
- #причёсываем значения (если значение меньше единицы - дорисовываем в начале числа ноль)
- if [[ $PNORM == .* ]]; then PNORM=0$PNORM; fi
- if [[ $PNORM == .* ]]; then PNORM=0$PNORM; fi
- if [[ $PMIN == .* ]]; then PMIN=0$PMIN; fi
- if [[ $PMED == .* ]]; then PMED=0$PMED; fi
- if [[ $PHIGHT == .* ]]; then PHIGHT=0$PHIGHT; fi
- if [[ $PERROR == .* ]]; then PERROR=0$PERROR; fi
- #заполняем значения для диаграммы с процентами
- P1=$(echo "от 1 до 7мс; от 8 до 15мс; от 15 до 30 мс; свыше 30 мс; потери")
- P2=$(echo $PNORM\; $PMIN\; $PMED\; $PHIGHT\; $PERROR)
- echo "Статистика пингов до $IP" >> $OF
- echo $P1 >>$OF
- echo $P2|sed 's/\./,/g' >> $OF
- #график завышенных пингов и потерь
- echo '' >> $OF
- echo '' >> $OF
- echo 'Завышенные пинги и потери' >>$OF
- echo -n ' ;масштаб;' >>$OF
- #считаем количество пингов по категориям из временных файлов
- SS=$(echo -n " 0;")
- SS1=$(echo -n " 180;") #столбик для масштаба
- SS2=$(echo -n " 0;")
- SRZD=$(cat date1.txt |grep -v error|awk '{sum+=$5} END { print sum/NR }') #среднесуточное значение пингов
- SRZD=$(printf '%.2f\n' $SRZD) #округляем до .**
- #цикл обработки статистики с шагом в 30 мин
- echo "среднее суточное значение $SRZD"
- for HO in 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 00 01 02 03 04 05 06 #счетчик по часам
- do
- S=$(cat e.txt|grep \ $HO:[0-2][0-9] -c) #количество потерь за полчаса
- D=$(cat e.txt|grep \ $HO:[3-5][0-9] -c)
- S1=$(cat e1.txt|grep \ $HO:[0-2][0-9] -c) #количество пингов от 15 до 27 за полчаса
- D1=$(cat e1.txt|grep \ $HO:[3-5][0-9] -c)
- S2=$(cat e2.txt|grep \ $HO:[0-2][0-9] -c) #количество пингов выше 30 мс за полчаса
- D2=$(cat e2.txt|grep \ $HO:[3-5][0-9] -c)
- #считаем средние значения за полчаса
- SRZ=$(cat date1.txt |grep \ $HO\:[0-3][0-9]|grep -v error|awk '{sum+=$5} END { print sum/NR }') #среднее значение пингов
- SRZ=$(printf '%.2f\n' $SRZ) #округление до .**
- SRZ1=$(cat date1.txt |grep \ $HO\:[3-5][0-9]|grep -v error|awk '{sum+=$5} END { print sum/NR }')
- SRZ1=$(printf '%.2f\n' $SRZ1)
- SS=$SS\ $S\ \;\ $D\ \; #йа, сцуко, заборчег
- SS1=$SS1\ $S1\ \;\ $D1\ \; #дописываю значения из цикла в длинную строку переменной
- SS2=$SS2\ $S2\ \;\ $D2\ \;
- SRZS=$SRZS\ $SRZ\ \;\ $SRZ1\ \;
- HOS=$HOS\ $HO\:00\ \;\ $HO\:30\ \;
- echo -n $HO\:00\ \; >>$OF #строка со временем за сутки от 8 утра
- echo -n $HO\:30\ \; >>$OF #с шагом в пол-часа
- done
- #записываем в файл
- echo '' >>$OF
- echo Пинги от 15 до 30мс \;$SS1 >> $OF
- echo Пинги от 30мс и выше \;$SS2 >> $OF
- echo Потери \;$SS >>$OF
- echo '' >>$OF
- echo \;масштаб\; $HOS >> $OF
- echo среднее значение пингов\;50.00 \;$SRZS|sed 's/\./,/g' >> $OF
- echo "среднее суточное значение $SRZD">>$OF
- ##костыллинг!!!1 готовим к тому, чтоб лядский exel смог прочесть
- cat $OF > 1$OF #тут был sed, меняющий разделитель, но я его убрал, а убирать временный файл мне лень
- iconv -f UTF-8 -t WINDOWS-1251 -o $OF 1$OF #меняем кодировку на cp1251
- #сносим временные файлы и не позоримся
- rm e\.txt e1\.txt e2\.txt date1\.txt 1$OF
- echo "готово. результат в файле $OF"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement