README ########################## Script per la registrazione del traffico internet in bytes. Conta i bytes trasmessi e ricevuti da una data interfaccia. if ifconfig ppp0 scrivi traffico su registro current somma (old+current) else copia current current.bk copia old old.bk imposta current a zero imposta old alla somma (current.bk+old.bk) fi NO!! PERCHÈ SE LASCIATO GIRARE COME DEMONE LA SOMMA (current.bk+old.bk) continua a crescere, sommando sempre il valore old.bk, non nullo, a se stesso. O si verifica l'esistenza dei files oppure si predispone la registrazione di current su old solo in fase di disconnessione (ip-down). --------------------------------------------------------------- Meglio scindere: Calcolo traffico sessioni concluse attraverso lo script ip-down. Infatti si possono usare le variabili di pppd: PPP_ATTR, BYTES_SENT, BYTES_RCVD. 1) modifica file /etc/ppp/peers/btwap ipparam wap 2) modifica file /etc/ppp/ip-up avvio demone /etc/rc.d/rc.traffic start scrive su un file "current" il traffico corrente effettuato attraverso l'interfaccia coniderata (ppp0). Se la connessione è via wap fa partire anche il contatore wap che somma curent + old ---> waptotal 3) modifica file /etc/ppp/ip-down ferma demone /etc/rc.d/rc.traffic stop azzera current Se la connessione è via wap - annota $BYTES_SENT+BYTES_RCVD > /var/log/wap_bytes/data.log - old = $(cat $OLD) + $(cat $data.log) - cat $old > waptotal - cp waptotal $OLD ------------------------------------------------------------------ A noi servono due files: current old rc.traffic scrive su current quando la connessione è attiva old viene aggiornato in fase di chiusura della connessione. ----------------------------------------------------------- Come stringere l'ammontare del traffico ai soli giorni relativi alla offerta attiva? 1) primo modo: a mano: basta azzerare $OLD il giorno d'inizio della promozione, prima della prima sessione instaurata. se qualcosa va storto, tipo ci si scorda d'azzerare $OLD e ci si connette? Quel traffico non viene conteggiato nella nuova promozoione. Per rimediare e avere anche un po' di log si potrebbe loggare ogni sessione wap nominandone il logfile tipo AnnoMeseGiorno-oraminsec.log scrivendovi dentro il traffico totale effettuato nella sessione terminante (ip-down). Se qualcosa andasse storto si potrebbe semplicemente calcolare il traffico effettivo relativo al nuovo periodo dipromozione e stamparlo sul file $OLD per eventuali correzioni... 2) secondo modo resta valido il discorso sui log del punto precedente. si potrebbero scandagliare tutti i log, cioè tutte le sessioni e in base al nome, cioè al giorno, sommare tutti i valori contenuti nei files relativi ai giorni compresi nella durata dell'offerta. In questo caso si dovrebbe dare in input il giorno d'inizio dell'offerta, ad es: 20100422 (22 Aprile 2010). --------------------------------------------------------------- 3) Consideriamo però un fatto. Si potrebbe considerare il metodo (1), ma aggiungervi la possibilità di aggiornarlo automaticamente e non a mano ad ogni giorno d'inizio offerta, infatto l'offerta wap attuale si autorinnova sempre al martedì. Basterebbe definire uno STARTDAY e fare in modo che in fase di avvio calcoli il giorno in cui va eseguito il reset, cioè dopo sette giorni. Si potrebbe ad esempio valutare l'output di "date +%A" che indica il giorno della settiamana tipo Tuednesday. Quella condizione non basta per azzerare $OLD. Infatti va azzerato solo se la connessione è la prima del giorno. Bè, se nella dir dei files di log non ve n'è ancora nessuno nominato con la data attuale, la sessione internet è la prima del giorno, pertanto: (anzi le due condizioni sono annidiate, la prima nella seconda: se è la prima connessione del giorno, se il giorno è quello giusto ---> azzera fi in tal modo si fanno forse meno operazioni: if ! find $LOGDIR -name $(date +%Y%m%d)* then # è la prima connessione del giorno [ $date +%A = Tuednesday ] && echo 0 > $OLD fi ~~~~~~~~~~~~~~~~~~~~~~~~~~~ btwap ########################## /dev/rfcomm0 9600 connect '/usr/sbin/chat -v -f /etc/ppp/wap.chat' noauth novj novjccomp mru 1500 mtu 1500 debug defaultroute ipparam wap ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ip-down ########################## #!/bin/bash [ "$6" = "wap" ] && /usr/mybin/wapcounter.sh stop && /usr/mybin/traffic.sh stop ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ip-up ########################## !#/bin/bash # connessione su apn wap if [ "$6" = "wap" ] then /usr/mybin/wap.sh start /usr/mybin/traffic.sh start fi ~~~~~~~~~~~~~~~~~~~~~~~~~~~ traffic.sh ########################## #!/bin/bash # scrive su file di log il totale dei bytes # scambiati nella sessione internet corrente # relativi all'interfaccia ppp0. LOGDIR=/var/log/traffic OUTFILE=$LOGDIR/current.log [ ! -d $LOGDIR ] && mkdir $LOGDIR start_session() { while ifconfig ppp0 > /dev/null 2>&1 do sleep 1 TMPF=$(tempfile) ifconfig ppp0 |grep by| sed 's/^[^:]*://'|sed 's/([^\)]*)//g'|sed 's/T.*://'>$TMPF read a b < $TMPF traffic=$(echo $a+$b |bc) echo $traffic > $OUTFILE rm $TMPF done } stop_session() { echo 0 > $OUTFILE } case $1 in start) start_session ;; stop) stop_session esac ~~~~~~~~~~~~~~~~~~~~~~~~~~~ wap.chat ########################## '' \d '' 'atz' OK 'at+cgatt=1' OK 'at+cgdcont=1,"IP","wap.tim.it"' OK 'atd*99***1#' ~~~~~~~~~~~~~~~~~~~~~~~~~~~ wapcounter.conf ########################## Tuednesday ~~~~~~~~~~~~~~~~~~~~~~~~~~~ wapcounter.sh ########################## #!/bin/bash # variabili # logdir=/var/log/traffic/wap logfile=${logdir}/$(date +%Y%m%d-%H%M%S).log oldfile=${logdir}/old.log confile=/etc/wapcounter.conf errfile=${logdir}/error.log # verifiche: dovrebbero servire per il primo utilizzo # [ ! -d $logdir ] && mkdir -p $logdir [ ! -f $oldfile ] && echo > 0 $oldfile [ ! -f $confile ] && \ cat< $errfile $confile not found! Please, insert wap offer start week day in $confile EOF && exit 1 # inclusione file configurazione che contiene $STARTDAY # include $confile start_session() { # valutazione prima connessione giorno inizio promozione: # se non ci sono ancora files nominati con la data odierna # valuta che giorno della settimana è # if ! find $logdir -name $(date +%Y%m%d)* then [ "$(date +%A)" = $STARTDAY ] && echo 0 > $oldfile fi } stop_session() { sessiont=$(echo $BYTES_SENT+$BYTES_RCVD|bc) echo $sessiont >> $logfile total=$(echo $sessiont+$(cat $oldfile)|bc) echo $total > $oldfile } case $1 in start) start_session ;; stop) stop_session esac ~~~~~~~~~~~~~~~~~~~~~~~~~~~ waptotal.sh ########################## #!/bin/bash # Effettua la somma dei bytes scambiati attraverso # l'interfaccia ppp0 e relativi all'accesso internet # via apn wap. # L'unità di misura utilizzata per l'output è il MB. LOGDIR=/var/log/traffic WAPLOGDIR=$LOGDIR/wap CURRENT=$LOGDIR/current.log OLD=$WAPLOGDIR/old.log ERRFILE=$WAPLOGDIR/waptotal.error [ ! -d $LOGDIR ] && mkdir -p $LOGDIR [ ! -f $CURRENT ] && cat<> $ERRFILE && exit 1 $(date) $CURRENT not found: could be you didn't run scripts yet. Please, run traffic.sh and wapcounter.sh by ip-up/down scripts before use this script. EOF [ ! -f $OLD ] && cat<> $ERRFILE && exit 1 $(date) $OLD not found: could be first time you run theese scripts. Please, run traffic.sh and wapcounter.sh by ip-up/down scripts before use this one. EOF echo $(echo scale=3\; \($(cat $OLD)+$(cat $CURRENT)\)/1000|bc) MB ~~~~~~~~~~~~~~~~~~~~~~~~~~~