pppd logs
Hello,
Suite a une conversation recente concernant un utilitaire calculant le temps de
connection en ppp, j'ai commence a developper un petit script awk qui execute
cette tache en ligne de commande.
A l'heure actuelle, si l'on passe un mois en parametres au script, celui ci va
calculer le temps total de connection pour le mois vise ainsi que le temps
moyen par jour.
Plusieurs remarques:
1. Ce n'est pas optimise... ce qui veut dire que cela peut prendre un certain
temps pour l'execution du script sur un tres gros fichier de log. Cela veut
aussi dire que certains d'entre vous pourrait tomber a la renverse en regardant
le code. (il vaut donc mieux rester assis). Je decline toute responsabilite
pour les chuttes qui pourrait resulter de la lecture du code.
2. Il y a encore des bugs. Notemment, quand le temps de connection sur un mois
depasse une certaine duree, les resultats sont fausses. Cela est du au fait que
awk utilise des entiers par defaut. Je dois encore adapte la situation pour
obtenir des longs a la place.
3. Ce n'est pas encore termine. Ce qui veut dire que le script ne dispose que
peu de features. Je planifie de travailler la dessus pour ameliorer cela.
Notemment en ecrivant un script shell qui enrobe l'appel au script awk.
Pour lancer le script, il suffit de taper ceci:
~$ awk -f /path/to/ppptime.awk -v search="Month" /path/to/pppd/logfile
+ Month est le mois pour lequel vous rechercher le temps de connection
+ Par defaut, les logs de pppd sont envoyes dans /var/log/messages.
Si vous etes interesse par tester le script, n'hesitez pas.
Feedback is needed, awk tips and tricks welcome ! :)
stay tuned for the next release.
<signature>
Gregoire Welraeds
<gregoire (at) welraeds (dot) be>
</signature>
BEGIN {
month= ""
}
$1 != search { next }
$6 == "Connect:" {
# new connection
if ( month != $1 ) {
month= $1
total[month]=0
daycount[month]=0
day=""
}
if ( day != $2 ) {
day= $2 ; daycount[month]++
}
# store time
start_time= $3
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
# store time
# stop_time= $3
stop_hour= substr($3,1,2)
stop_min= substr($3,4,5)
stop_sec= substr($3,7,8)
# init counters
hour= 0; min=0
# find duration
# sec= 60 + stop_sec - start_sec
# min= sec div 60
# sec= sec % 60
start= start_hour*3600 + start_min*60 + start_sec
stop= stop_hour*3600 + stop_min*60 + stop_sec
duration= stop - start
total[month]+= duration
dh= int(duration / 3600)
dm= int((duration % 3600 ) / 60)
ds= duration - (dm * 60)
# print $1,$2,"\t\t",dh, dm, ds, "\t\t",start_time,"\t\t", stop_time
}
END {
print "+-------------------------------------------------+"
print "| total time spent on internet for this log file: |"
print "+-------------------------------------------------+"
for ( m in total )
{
dh= int(total[m] / 3600)
tmp= total[m] % 3600
dm= int(tmp / 60)
ds= tmp % 60
print m ":", dh ":" dm ":" ds
avg= int(total[m] / daycount[m])
dh= int(avg / 3600)
tmp= avg % 3600
dm= int(tmp / 60)
dm= ( dm < 10 ? 0 dm : dm )
ds= tmp % 60
ds= ( ds < 10 ? 0 ds : ds )
print "\taverage time/day (" daycount[m] "):", dh ":" dm ":" ds
}
}
Reply to: