pppd log v0.3 Aho
Hello,
Me voici de retour avec mon petit script ppptime. C'est avec une certaine
fierte que je vous annonce la version 0.3 du script ;).
<les aventure de bugs bunny>
Bugs Bunny: - What's up, doc ?
gregoire: - he bien un certain nombre de nouveautes mon cher.
Bugs Bunny: - Ah bon ? les carottes sont cuites ?
gregoire: - euh... en quelque sorte.
</les aventure de bugs bunny>
Les nouveautes sont:
- Afin d'ajuster au mieux le calcul des durees de connection, c'est maintenant
les lignes de type:
Connect xxxx # (ou xxxx est la vitesse est la vitesse de connection)
qui sont prises en compte. Ce qui devrait nous permettre de gagner 1 a 5
secondes d'exactitude dans les calculs du temps de connection. En effet, on
commence a calculer au moment ou se termine le handshaking entre les modems.
- Gestion des arguments de la ligne de commandes:
lanfeust:~ # ./ppptime -h
Usage: ppptime [-vl] [-f file] -m month
-f file path to pppd log file
-h display help message and exit successfully
-l list detail for each connection
-m month search file for month. REQUIRED.
-v verbose mode
if no file is given, ppptime will read from stdin.
lanfeust:~ #
Ces options sont donc:
-f permet de preciser le fichier de log qui va servir d'input au
script. Si cette option est omise, le script va lire les lignes
d'entrees depuis stdin (standard input). Ce qui permet
d'appeler le script dans un pipe. Exemple:
lanfeust:~ # zcat `ls -r /var/log/messages*` | ppptime -m Jun
...
lanfeust:~ #
Note: l'exemple precedent permet de prendre l'ensemble des
fichier /var/log/messages* comme input et ce meme si ces
fichier sont compresses au format gzip.
-h affiche un message d'aide.
-l affiche le detail de chaque connection de facon similaire a
kppp. Example:
<example>
jour start stop total
| | | |
V V V V
29 0:12:59 0:20:59 0:08:00
29 1:31:54 1:42:19 0:10:25
29 2:05:20 2:16:17 0:10:57
29 2:31:24 2:43:08 0:11:44
29 2:52:04 3:05:32 0:13:28
30 19:53:39 20:04:58 0:11:19
30 23:19:52 23:56:16 0:36:24
== ======== ======== ========
nbre de jours-> 10 10:12:02 <- duree tot.
</example>
-m Seule option requise a l'heure actuelle, elle permet de
preciser le mois recherche. Example:
lanfeust:~ # ./ppptime -f /var/log/messages -m Jun
-v Pour verbose... Donne un output detaille sur
- le temps total de connection
- le temps moyen de connection sur une journee
- le temps moyen de connection par connection
- le nombre moyen de connection par jour.
A noter que s'il y une erreur dans une des options passees en parametre,
ppptime affiche un message d'erreur de type:
Usage: ppptime [-vl] [-f file] -m month
Try 'ppptime -h' for more information.
A noter que s'il on ne precise ni l'option -v, ni l'option -l, ppptime
n'affiche que le temps total de connection. J'ai choisi cette optique de facon
a ce que l'output puisse facilement etre recuperer pour etre utilise dans un
autre script ou pour etre inserer dans une db. Example:
lanfeust:~ # ./ppptime -f /var/log/messages -m Jun
10:12:02
lanfeust:~ #
A l'heure actuelle il reste un bug connu.
<les aventure de bugs bunny>
Bugs bunny: - Un BUG ??? et pourquoi pas un Omer tant que vous y etes ?
</les aventure de bugs bunny>
Il concerne le passage d'un mois a un autre pendant une connection.
example:
- on est le 30.06 à 23h58 et je me connecte.
- j'arrete ma connection le 01.07 à 00h10.
Les resultat de juin ne seront pas complets: il manquera le temps de connection
entre 23h58 et 23h59'59''. Juillet aura une valeur fausse.
Ce sera corrige pour la version v0.4, Kernighan, promis.
C'est tout pour aujourd'hui.
So 'till next time, enjoy ppptime! :)
--
Life is hard but the root password helps.
-- Anonymous
Gregoire Welraeds
<gregoire (at) welraeds (dot) be>
#!/bin/sh
# ppptime by Grégoire Welraeds <gregoire@welraeds.be>
# v0.3 Aho
#
# calculate time spent by pppd connection
#
# Juin 2001
VERBOSE=0
LIST=0
usage()
{
cat << _END_
Usage: ppptime [-vl] [-f file] -m month
Try 'ppptime -h' for more information.
_END_
}
help()
{
cat << _EOF_
Usage: ppptime [-vl] [-f file] -m month
-f file path to pppd log file
-h display help message and exit successfully
-l list detail for each connection
-m month search file for month. REQUIRED.
-v verbose mode
if no file is given, ppptime will read from stdin.
_EOF_
}
test $# -eq 0 && usage && exit -1
TEMP=`getopt f:hlm:v "$@"` # > /dev/null`
if [ $? != 0 ] ; then usage >&2 ; exit 1 ; fi
eval set -- "$TEMP"
while test 1
do
case $1 in
-f) FILE=$2; shift 2;;
-l) LIST=1; shift ;;
-m) MONTH=$2; shift 2 ;;
-v) VERBOSE=1; shift ;;
-h) help ; exit 1 ;;
--) shift ; test $1 || break ;;
*) echo "invalid option $1"; usage ; exit -1 ;;
esac
done
# test if $FILE exist and is readable
if test ${FILE}; then
if ! test -r ${FILE}; then
echo Can\'t read ${FILE};
usage;
exit -1
fi
else
FILE="-"
fi
if test ! ${MONTH}; then
usage ; exit -1
fi
grep "^${MONTH}" ${FILE} | awk -v verbose=${VERBOSE} -v list=${LIST} '
BEGIN {
total= 0
daycount= 0
day= ""
connectcount= 0
}
$6 == "CONNECT" {
# new connection
if ( day != $2 ) {
day= $2 ; daycount++
}
# store time
start_hour= substr($3,1,2)
start_min= substr($3,4,5)
start_sec= substr($3,7,8)
}
$6 == "Connection" && $7 == "terminated." {
# end of the connection
connectcount++
# store time
stop_hour= substr($3,1,2)
stop_min= substr($3,4,5)
stop_sec= substr($3,7,8)
start= start_hour*3600 + start_min*60 + start_sec
stop= stop_hour*3600 + stop_min*60 + stop_sec
if ( list )
{
printf("%2d", day);
printf("\t%8s", time2str(start));
printf("\t%8s", time2str(stop));
}
if ( day != $2 ) {
daydiff = $2 - day
daycount += daydiff ; day= $2
tmp= (stop + ((86400 * daydiff) - start))
}
else
tmp = stop - start
if ( list )
printf("\t%8s\n", time2str(tmp))
total += tmp
}
END {
spent= time2str(total)
if ( list )
{
printf("==\t========\t========\t========\n")
printf("%2d\t \t \t%8s\n", daycount, spent)
}
if ( verbose )
{
if ( list )
printf("\n");
printf("spent: ");
}
if ( verbose || ! list )
print spent
if (verbose )
{
print "avg time/day (" daycount "):", time2str(int (total / daycount) )
print "avg time/connect (" connectcount "):", time2str(int (total / connectcount))
print "avg connect/day:", connectcount / daycount
}
}
function time2str(total)
{
# recieve an amount of seconds and
# convert it to a string format
hour= int ( total / 3600 )
tmp= total % 3600
minute= int ( tmp / 60 )
second= tmp % 60
minute= ( minute < 10 ? 0 minute : minute )
second= ( second < 10 ? 0 second : second )
return hour ":" minute ":" second
}
'
Reply to: