Учет и мониторинг GPRS трафика


banda аватар

banda - Posted on 26 Март 2009

Подключаемся к интернету с помощьи pon, и незнаем как ввести учет трафика (болезнь ГПРСовщиков :)) ? Не помогает всякие knemo, ulog и т.п.? Неожиданное отключение электроэнергии и бах! Вышеупомнятуе тулзы не в силах сохранить учет трафика за текущую сессию.

И так, напишем два скрипта. Один для учета и второй для мониторинга трафика.
Первый скрипт, назвал trafbil, будет так выглядеть:

#!/bin/sh
# by banda 2009 $Id: trafbil, v 0.2 2009-03-22 
# Скрипт учета трафика на ppp0 с защитой от перезаписи и сбоев питания
 
T=`eval date +%Y`
T0=`eval date +%m`
T2=`eval date +%H%M%S`
DIR=~/.trafbil/log/$T/$T0/`eval date +%d`
mv $DIR/ppp.out $DIR/$T2.out 2> /dev/null
mv $DIR/ppp.in $DIR/$T2.in 2> /dev/null
 
# главный цикл, на каждой 8-й секунде фиксировать трафик от ррр0
while :; do
    # FLAG у меня не работал. Может он у вас работает. Он служит для единой
    # копии запуска скрипт
    #FLAG=~/$(basename $0); if [ -e $FLAG ]; then echo уже запущено 1>&2; exit 1; fi
 
    TMPVALUE=`/sbin/ifconfig | awk '/^ppp0 /{print $1}' ` # проверяем, запущен ли ррр0
    if [ "" = "$TMPVALUE" ]
    then
        mv $DIR/ppp.out $DIR/$T2.out 2> /dev/null
        mv $DIR/ppp.in $DIR/$T2.in 2> /dev/null
    else 
 
        # если pppd запущен, ведем учет
        # Лог файлы создаются по годам, месяцам, дням и по сессиям. Все записи
        # будут находится в директории пользователя - .trafbil/log
 
        T=`eval date +%Y`
        T0=`eval date +%m`
        T2=`eval date +%H%M%S`
        DIR=~/.trafbil/log/$T/$T0/`eval date +%d`
        DIR1=~/.trafbil/log/$T/$T0
        DIR2=~/.trafbil/log/$T
        mkdir -p $DIR
        PPP_IN=$(/sbin/ifconfig  ppp0 | sed -ne 's/.*RX bytes:\([0-9]*\).*/\1/p') 
        PPP_OUT=$(/sbin/ifconfig  ppp0 | sed -ne 's/.*TX bytes:\([0-9]*\).*/\1/p') 
        echo $PPP_OUT > $DIR/ppp.out  
        echo $PPP_IN > $DIR/ppp.in  
        PPP_IN_DAY_SUM=$(cat $DIR/*.in | awk '{s+=$1}END{print s}')
        PPP_OUT_DAY_SUM=$(cat $DIR/*.out | awk '{s+=$1}END{print s}')
        echo $PPP_IN_DAY_SUM > $DIR.in
        echo $PPP_OUT_DAY_SUM > $DIR.out
        PPP_IN_MONTH_SUM=$(cat $DIR1/*.in | awk '{s+=$1}END{print s}')
        PPP_OUT_MONTH_SUM=$(cat $DIR1/*.out | awk '{s+=$1}END{print s}')
        echo $PPP_IN_MONTH_SUM > $DIR1.in
        echo $PPP_OUT_MONTH_SUM > $DIR1.out
        PPP_IN_YEAR_SUM=$(cat $DIR2/*.in | awk '{s+=$1}END{print s}')
        PPP_OUT_YEAR_SUM=$(cat $DIR2/*.out | awk '{s+=$1}END{print s}')
        echo $PPP_IN_YEAR_SUM > $DIR2.in
        echo $PPP_OUT_YEAR_SUM > $DIR2.out
    fi
 
    # отдохнем 8 секунд (если вам цпу и винт не жалько можно и без слипа)
    sleep 8
    # rm -f $FLAG
done

А теперь для просмотра трафика создадим гуи-скрипт. я называл его gtrafbil

#!/bin/sh
# by banda 2009 $Id: gtrafbil, v 0.1 2009-03-26
 
# Скрипт визуализации статистика трафика сгенерированной trafbil
 
T=`eval date +%Y`
T0=`eval date +%m`
T2=`eval date +%H%M%S`
DIR=~/.trafbil/log/$T/$T0/`eval date +%d` 
DIR1=~/.trafbil/log/$T/$T0 
DIR2=~/.trafbil/log/$T
din=$(cat $DIR.in)
dout=$(cat $DIR.out)
DAY_SUM=`expr $din + $dout` 
min=$(cat $DIR1.in)
mout=$(cat $DIR1.out)
MONTH_SUM=`expr $min + $mout` 
yin=$(cat $DIR2.in)
yout=$(cat $DIR2.out)
Y_SUM=`expr $yin + $yout`
 
zenity --title "Подсчет трафика ГПРС"  --info --text="
\nНа сегодня истратено `echo "$DAY_SUM/1024" | bc -s` Кб. Отсюда,
\n           исходящий
\n$dout байт
\n`echo "$dout/1024" | bc -s` Кб
\n`echo "$dout/1048576" | bc -l` Мб
\n           входящий
\n$din байт
\n`echo "$din/1024" | bc -s` Кб
\n`echo "$din/1048576" | bc -l` Мб
\nЗа месяц `date '+%B'` использовано `echo "$MONTH_SUM/1048576" | bc -s` Мб. Отсюда,
\n          исходящий
\n`echo "$mout/1024" | bc -s` Кб
\n`echo "$mout/1048576" | bc -s` Мб
\n          входящий
\n`echo "$min/1024" | bc -s` Кб
\n`echo "$min/1048576" | bc -s` Мб
\nЗа $T год использовано `echo "$Y_SUM/1048576" | bc -s` Мб. Отсюда `echo "$yin/1048576" | bc -s` Мб входящий и `echo "$yout/1048576" | bc -s` Мб исходящий" 
 
#Мой провайдер дает 150 Мб лимит за месяц: ($MONTH_SUM/1048576)*100/150 
limit=`echo $MONTH_SUM/1572864 | bc -s`
(echo $limit && sleep 60) | zenity --progress --auto-close --text="Истратено от лимита 150 Мб $limit %:"

Вот и все!

0
Ваша оценка: Ничего

помоему тег billing для такого скрипта это забагато )))

А не проще ли грепать логи pppd?

e.g.
$ tail -3 /var/log/pppd.log
Mar 26 23:49:28 thinkpad pppd[10868]: Connect time 0.4 minutes.
Mar 26 23:49:28 thinkpad pppd[10868]: Sent 6704 bytes, received 1400 bytes.
Mar 26 23:49:28 thinkpad pppd[10868]: Connection terminated.

Это для меня не проще

А не пробовал vnstat? Очень легкая и простенькая статистика. Я тут о ней писал http://www.sklerosa.net/2008/08/01/prostoj-podschet-trafika/

А честно говоря, о нем я не знал.
Спасибо Сергей!

Я тоже ломал какое-то время мозг по этому вопросу, а потом думаю: "А на кой это все надо?"... Ведь мобила сама умеет трафик считать :)))
У меня Sony Ericsson K790i, в нем я иду в Меню -> Параметры -> закладка Вызовы -> Время и стоимость -> Счетчики данных :) И видим статистику за последний и все сеансы. А т.к. я перед выходом в сеть сбрасываю всегда этот счетчик, то и вижу естественно только последний выход в сеть :)

А за скрипты спасибо, на досуге потестю :)

А у меня на лаптопе например, СДМА модем - туда вставляю РУИМ карту и pon. Невозможно даже позвонит без спец.прогу. И нет никаких дисплейев :). А на десктопе тоже терминал без никаких экранчиков и кнопок - только для соединение интернет. А до этого был Нокиа 6275и, но всегда был лен лазит на его менюшку и ковырят там "сколько я использовал за сегодня или за месяц или за год"

Да, с этим безоговорочно :)

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.