#!/bin/sh export DATE="22.2.2006";SCRIPT=${0#/rom} export TITLE="Accounting" . ${SCRIPT%/*}/cgi-bin-pre.sh cat<Accounting EOF pmacct_begin="$(nvram get ff_gw_pmacct_begin)" get_month() { echo $1 | \ awk '{ cur_mon = strftime ("%m", systime()); gsub("\s", "", cur_mon); month[1] = "Januar"; month[2] = "Februar"; month[3] = "März"; month[4] = "April"; month[5] = "Mai"; month[6] = "Juni"; month[7] = "Juli"; month[8] = "August"; month[9] = "September"; month[10] = "Oktober"; month[11] = "November"; month[0] = "Dezember"; print month[(cur_mon+$0)%12]; }' } if [ "$(nvram get ff_gw_pmacct_if)" ] then if [ "`/etc/init.d/S70pmacct show | grep 'Connection refused'`" ] then echo "

Accounting eingeschaltet, aber noch nicht aktiviert (Neustart erforderlich).

" else if [ "`echo "$QUERY_STRING" | grep last_month`" ] then if [ -d "/backup" ] && [ -f "/backup/last_month.pmacct" ] then DATA_SOURCE="cat /backup/last_month.pmacct" cat<Stand: $(get_month -1)

Die Erfassung des Datenvolumens erfolgt monatlich, das Accounting des aktuellen Monats ($(get_month 0)) findet ihr hier.


EOF else echo "

Keine Accounting-Informationen für den letzten Monat gefunden.

" fi else CURR_MONTH=$(get_month 0) if [ -d "/backup" ] && [ -f "/backup/last_month.pmacct" ] then LAST_MONTH="

Die Erfassung des Datenvolumens erfolgt monatlich, das Accounting vom $(get_month -1) findet ihr hier.


" else LAST_MONTH="
" fi DATA_SOURCE="/etc/init.d/S70pmacct cgi-bin" cat<Stand: $CURR_MONTH

$LAST_MONTH

IP Empfangen Gesendet Summe
EOF fi if [ "$DATA_SOURCE" ] then $DATA_SOURCE | \ grep -Ev '(^(#[^#]|$)|total|DST)' | \ awk ' BEGIN { arr = "in" max = 0 sum_recv = 0 sum_send = 0 } { if ( $1 == "SRC" ) { arr = "out" next } else if ( $1 == "BACKUP_BEGIN" ) { arr = "in" next } else if ( $1 == "BACKUP_HALF" ) { arr = "out" next } else if ( $1 == "BACKUP_END" ) { next } else if ( $1 == "###" ) { arr = "ip2name" next } if ( arr=="in" ) { data_in[$1] += $3 sum_recv += $3 if ( length(data_in[$1]) > max ) { max = length(data_in[$1]) + 1 } } else if ( arr=="out" ) { data_out[$1] += $3 sum_send += $3 if ( length(data_out[$1]) > max ) { max = length(data_out[$1]) + 1 } } else { ip2name[$1] = $2 } } END { for ( ip in data_in ) { print_sort_field(ip) if ( ip2name[ip] ) { printf( "", ip, ip2name[ip], ip ) } else { printf( "", ip, ip ) } print "" delete(data_out[ip]) } for ( ip in data_out ) { print_sort_field(ip) if ( ip2name[ip] ) { printf( "", ip, ip2name[ip], ip ) } else { printf( "", ip, ip ) } print "" } print "" } function print_sort_field(ip) { if ( (ENVIRON["QUERY_STRING"] == "recv") || (ENVIRON["QUERY_STRING"] == "recv&last_month") ) { printf( "%0"max"d", data_in[ip] ) } else if ( (ENVIRON["QUERY_STRING"] == "send") || (ENVIRON["QUERY_STRING"] == "send&last_month") ) { printf( "%0"max"d", data_out[ip] ) } else if ( (ENVIRON["QUERY_STRING"] == "sum") || (ENVIRON["QUERY_STRING"] == "sum&last_month") ) { printf( "%0"max"d", data_in[ip]+data_out[ip] ) } else { split( ip, ip_arr, "." ) printf( "%03d.%03d.%03d.%03d", ip_arr[1], ip_arr[2], ip_arr[3], ip_arr[4] ) } } function calc_traf( bytes ) { unit = "Byte" divi = "1" if ( bytes > 5120 ) { unit = "KB" divi = "1024" if ( bytes > 5242880 ) { unit = "MB" divi = "1048576" if ( bytes > 5368709120 ) { unit = "GB" divi = "1073741824" } } } data = bytes / divi if ( index( data, "." ) == 0 ) { return int( data ) " " unit } else { return int( data )","substr( data, index( data, "." ) + 1, 2 ) " " unit } }' | \ sort | \ awk -F '' '{ print $2 }' echo "
IP Empfangen Gesendet Summe
%s (%s)
%s ",calc_traf(data_in[ip]), "", calc_traf(data_out[ip]), "",calc_traf(data_in[ip]+data_out[ip]),"
%s (%s)
%s 0 Byte ", calc_traf(data_out[ip]), "",calc_traf(data_out[ip]),"
Total", calc_traf(sum_recv), "", calc_traf(sum_send), "", calc_traf(sum_send + sum_recv), "
" fi fi else echo "

Accounting deaktiviert

" fi . ${SCRIPT%/*}/cgi-bin-post.sh