[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

pppd log



Hello,

Je suis de retour ! :) Au vu du nombre impressionnant de feedback que j'ai
recu (environs... 0) suite au script que j'ai poste hier, j'ai ete tres motive
pour le continuer.

La version que j'ai envoyee hier etait serieusement buguee et renvoyait des
resultats faux. (ooops :). La version que je poste ce soir devrait corrige
cela.

En gros, voici les changements effectues:

+ Il y avait un fameux bug (merci a tous ceux qui me l'ont signale :)
lorsque la connection passait d'un jour a l'autre. 
	Exemple: 	start time: 23:59:59 jour x 
			stop time 00:00:01 jour x+1. 

Ce bug est maintenant corrige.

+ Il n'y a plus de probleme lie a la taille des entier. A l'heure actuelle je
pense que le script peut calculer un temps de connection pour environs 100 mois
de 31 jours avec une connection 24/24 soit environs 267 840 000 secondes.

+ L'affichage a ete modifie. Voici un exemple pour le nouveau format:

	spent: 8:09:22.
	avg time/day (7): 1:09:54
	avg time/connect (43): 0:11:22

+ L'appel du script a ete enrobe dans un script sh. Ce qui fait qu'il ne faut
plus connaitre la syntaxe awk. Pour appeler le script il suffit de taper:
	~$ ppptime Month /path/to/logfile
Par exemple:
	~$ ppptime Jun /var/log/messages  

+ La selection des lignes qui correspondent au mois selectionne se fait
maintenant en utilisant grep. Ce qui ameliore sensiblement les performances.
A titre d'exemple voici le resultat de la commande time:

	~$ time ppptime Jun /var/log/messages
	<skip output of ppptime>

	real    0m0.225s
	user    0m0.180s
	sys     0m0.050s
	~$ ll -h /var/log/messages
	-rw-r-----   1 root     root     1.6M Jun 28 00:38 /var/log/messages
 	~$ wc -l /var/log/messages
		22068 

+ Le script est maintenant capable de gerer convenablement un temps de
connection > 24 h


Voici les modifications planifiees: 
+ Gerer les arguments de la ligne de commandes dans le script shell. A l'heure
actuelle, rien est fait a ce niveau la. Il conviendra d'afficher un joli
message d'erreur dans le cas ou les arguments passes ne correspondent pas a ce
qui est attendu.

+ A l'heure actuelle le script calcule le temps de connection sur base d'un
mois. Il est prevu d'ameliorer cela:
	- permettre de preciser le mois sous forme d'un chiffre plutot que sous
	une courte appellation anglaise. Par exemple Jun -> 6. Cette 
	numerotation me	parait plus universelle.
	- pouvoir preciser une date de depart et une date de fin plutot qu'une
	recherche basique sur le mois. Ce qui permettra a certains de pouvoir
	confrontrer les temps affiches sur leur facture internet avec les 
	resultats du script.

+ Permettre de pouvoir donner un cout pour une unite de temps de maniere a
pouvoir calculer les couts de communications. (eh oui tout le monde n'a pas le
cable ou l'adsl).

+ Gerer plusieurs mode de details a l'affichage.

+ Permettre de donner en argument plusieurs fichiers de logs dont certains
pourraient etre au format gzip.

+ Bravo a vous qui avez lu jusqu'ici. Si vous avez d'autres idees n'hesitez pas
a me le faire savoir.

Enfin, je tiens a preciser que:
1/ vous pouvez faire ce que bon vous semble avec ce script a la condition que
vous mentionnez l'origine du script ainsi que mon adresse email. 
2/ je decline toute reponsabilite quand aux resultats affiches par ce script.
3/ Si vraiment ca n'interesse personne n'heistez pas et je continuerai tout
seul dans mon coin. :)

<signature>
	Gregoire Welraeds
	<gregoire (at) welraeds (dot) be>
</signature>
#!/bin/sh

# ppptime by Grégoire Welraeds <gregoire@welraeds.be>
# v0.2 Weinberger
#
# calculate time spent by pppd connection
#
# Juin 2001

grep "^$1" $2 | awk '

BEGIN {
	total= 0
	daycount= 0
	day= ""
	connectcount= 0
}

	$6 == "Connect:" && $7 == "ppp0" {

		# new connection

		if ( day != $2 ) { 
			day= $2 ; daycount++ 
		}

		connectcount++

		# 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
		# 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 ( day != $2 ) { 
			daydiff = $2 - day
			daycount += daydiff ; day= $2 
			total += (stop + ((86400 * daydiff) - start))
		}
		else
			total += stop - start
	}

END {
	print "spent:", time2str(total) "."
	print "avg time/day (" daycount "):", time2str(int (total / daycount) )  
	print "avg time/connect (" connectcount "):", time2str(int (total / connectcount))
}

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: