« Quantifier les debits de mail » : différence entre les versions

De April MediaWiki
Aller à la navigationAller à la recherche
(Création)
 
mAucun résumé des modifications
Ligne 10 : Ligne 10 :


Cette mesure peut se faire de différentes façons et sur différents indicateurs dépendant de l'activité. On s'attachera ici simplement à connaitre les trois données "génériques" utilisées ci-avant :
Cette mesure peut se faire de différentes façons et sur différents indicateurs dépendant de l'activité. On s'attachera ici simplement à connaitre les trois données "génériques" utilisées ci-avant :
* Quel est le nombre de page afférente sur le wiki ?
* Quel est le nombre de pages afférentes sur le wiki ?
* Quel est le nombre de message sur la liste sur la période donnée ?
* Quel est le nombre de messages sur la liste sur la période donnée ?
* Quels sont les personnes qui postent sur une liste sur la période donnée ?
* Quels sont les personnes qui postent sur une liste sur la période donnée ?



Version du 26 juillet 2010 à 10:28

Il est intéressant de suivre dans le temps l'activité d'un groupe de travail, à l'occasion par exemple de l'AG ou d'une réunion de travail intermédiaire en cours d'année. Ça peut consister en un simple indicateur tel que :

# Nombre de page de wiki : 105 ;
# Nombre de messages sur la liste : 456 (du 01/02/2010 au 15/06/2010), soit 101 par mois ;
# Principaux participants à la liste :

   * lallorge
   * fpoulain
   * fcouchet
   * ...

Cette mesure peut se faire de différentes façons et sur différents indicateurs dépendant de l'activité. On s'attachera ici simplement à connaitre les trois données "génériques" utilisées ci-avant :

  • Quel est le nombre de pages afférentes sur le wiki ?
  • Quel est le nombre de messages sur la liste sur la période donnée ?
  • Quels sont les personnes qui postent sur une liste sur la période donnée ?

Mesurer les pages de wiki

C'est simple. Si vous utilisez des catégories, il suffit de visualiser la page de catégorie liée à votre activité, et la somme des pages est donnée dans la catégorie. Si vous utilisez différentes catégories ainsi que des sous-catégories, pensez à additionner les comptes. :-)

Mesurer le nombre de mails sur une période donnée

Avec votre client mail, il est facile de faire une recherche pour sélectionner les messages d'une liste, sur une période donnée. Le nombre de mail apparaissant dans le résultat de la recherche, vous obtenez ainsi le résultat.

Déterminer quels sont les principaux contributeurs d'une liste

Pour cela il faut commencer par prendre le résultat de la recherche précédente, et l'enregistrer sous forme d'un fichier mbox dans une dossier temporaire. Nommons le /tmp/lesEmails.mbox pour l'exemple. Un mbox est simplement un agglomérat de tous les mails à la queue-leu-leu.

Nous allons :

  1. filtrer les champs From: pour obtenir les contributeur,
  2. les compter,
  3. les agglomérer et trier,

le tout avec un script awk.

Pour cela, recopiez le script qui suit dans un fichier postCounter.awk. Ce script filtre pour trouver les champs From: au sein du fichier mbox pour donner les N principaux contributeur de la liste, en ne conservant que le champ de gauche de leur adresse mail. Pour l'utiliser, il faut faire par exemple

awk -f postCounter.awk -v N=5 lesEmails.mbox

pour obtenir les 5 plus gros contributeurs à la liste.

Note : Ce script est loin d'être parfait, car certaines personnes utilisent différentes adresses mail et on ne peut pas les identifier de cette façon. Aussi, ça ne tiens pas compte des réexpéditions, redirections, etc. C'est donc très rudimentaire, mais ça suffit pour l'utilisation qu'on en fait.

Le script

#!/usr/bin/awk

function maxIndex( anyArray )
{
	# return the index of the max value of the array
	for (InDeX in anyArray) 
	{
		if(anyArray[InDeX] > anyArray[maxi]) maxi = InDeX;
	}
	return maxi ;
}

# Processed at each line matching From:
$0 ~ /^[\t ]*From:.*/{
	# split email address list in atoms
	split($O, maillist, / |<|>/)
	for(i in maillist)
	{
		if(match(maillist[i],/[0-9a-A]*@[0-9a-A]*/))
		{
			InDeX = maillist[i];
			break;
		}
	}

	# increase posts count
	posts_counter[InDeX]++ ; 
}

END{
	# max senter printed
	maxPrint = N;
	# used to sort values
	maxi = maxIndex(posts_counter)
	while( posts_counter[maxi] > 0 && maxPrint-- > 0)
	{
		print maxi " : " posts_counter[maxi];
		delete posts_counter[maxi];
		maxi = maxIndex(posts_counter)
	}
}