вторник, 23 августа 2011 г.

парсим логи squid

Появилась задачка посмотреть что скачал mac mini и откуда, благо подключен через прокси сервер squid.

Парсим лог сквида и отбираем по 'swcdn.apple.com сохраняем в файл:
grep 'swcdn.apple.com' /var/log/squid/access.log > ~/apple.txt 

Получается apple.txt вида:
1314056191.316    134 10.0.4.14 TCP_MISS/200 1292 GET http://swcdn.apple.com/content/downloads/08/52/041-1370/hQmLYVQxH6JHFBPpCYjMSYxV7j7yYHNGh9/iWeb_304.pkg - DIRECT/10.0.4.1 text/html
1314056192.025    106 10.0.4.14 TCP_MISS/200 1292 GET http://swcdn.apple.com/content/downloads/27/18/041-1885/q2WhCCK7z3s6Fdv5CykkL45Y3DQTnNZcN6/iMovie9.0.4Update.pkg - DIRECT/10.0.4.1 text/html

Выводим дату и время в человеческом виде, ссылку и размер скачанного по каждой ссылке:
awk -F' ' '{ print strftime("%c",$1) " " $7 " " $2 }' ~/apple.txt

Результат получаем вот в таком виде:
Втр 23 Авг 2011 10:36:31 http://swcdn.apple.com/content/downloads/08/52/041-1370/hQmLYVQxH6JHFBPpCYjMSYxV7j7yYHNGh9/iWeb_304.pkg 134
Втр 23 Авг 2011 10:36:32 http://swcdn.apple.com/content/downloads/27/18/041-1885/q2WhCCK7z3s6Fdv5CykkL45Y3DQTnNZcN6/iMovie9.0.4Update.pkg 106

Считает общий размер скачанного:
awk -F' ' '{ print strftime("%c",$1) " " $7 " " $2 }' ~/apple.txt | awk -F' ' 'BEGIN { summ=0 } { summ+=$7 } END { print "total bytes: " summ}'

Результат:
total bytes: 240
Вот собственно и все.

Кому удобнее могут сразу записать все в однострочник без использования промежуточного файла apple.txt
На пример так:
grep 'swcdn.apple.com' /var/log/squid/access.log | awk -F' ' '{ print strftime("%c",$1) " " $7 " " $2 }'

понедельник, 1 августа 2011 г.

Пингуем хост

Пингуем хост и в зависимости от результата выполняем команду. В данном случае просто выводим сообщение.
Выполняется бесконечно, делается 1 пинг хоста, выводится сообщение о его статусе, ждем 5 сек и все сначала.

#!/bin/bash
# ping host, if not pinged execute command

hostping='8.8.8.8';

while true
do
    status=`ping -c1 $hostping`;
    # set exit code of previous command
    status=$?;
    #echo "status=$status";
    if [ $status -eq 0 ]; then
        echo "Host $hostping - online";
    else
        echo "Host $hostping - offline";
    fi
    sleep 5;
done
exit 0;