mardi 17 juin 2008

Comment mesurer la vitesse de propagation de l'information ?

Je suis souvent amené à mesurer la vitesse de propagation de l'information au travers des annuaires.
Pour cela j'ai un programme qui réalise les opérations suivantes:

a) Modifier une entrée de l'annuaire maitre LDAP
b) Armer un timer
c) Interroger à intervalle régulier l'annuaire replicat jusqu'a obtenir l'information à jour.

Voici le programme :
#!/usr/bin/perl -w

### by germanlinux

use Net::LDAP;
use Time::HiResi qw( usleep ualarm gettimeofday tv_interval) ;
my $master= { 'host' => 'ip.ip.ip.ip' ,
'dn' =>'dn bnd' ,
'password' => 'password' ,
'base' => 'base',
'filter' =>'filtre'
};
my $replicat= { 'host' => 'ip.ip.ip.ip' ,
'dn' =>'dn bnd' ,
'password' => 'password' ,
};
#### first bind to master ########
my $master_ldap_connection = Net::LDAP->new($master->{host});
my $msg =$master_ldap_connection->bind($master->{dn} ,
$master->{password} ) ;
my $rech = $master_ldap_connection->search (
base =>$master->{base},
filter =>$master->{filter} ,
);
my $retour= $rech->entry(0) ;
exit if !$retour;
my $dn= $retour->dn;
#### armement du chronometre
my $change=time();
my $t0= [gettimeofday];
#### modification ###########
my $modif = $master_ldap_connection->modify($dn,
replace => { 'unelettre' => $change} );
$master_ldap_connection->unbind;
############# boucle de calcul de temps de propagation ##############
my $not_found=1;
while ($not_found) {
my $replicat_ldap_connection = Net::LDAP->new($replicat->{host});
my $msg =$replicat_ldap_connection->bind($replicat->{dn} ,
$replicat->{password} ) ;
my $compare = $replicat_ldap_connection->compare ($dn,
attr => 'unelettre' ,
value => $change,
);
$not_found =0 if ($compare->code == 6 ) ;
$replicat_ldap_connection->unbind;
sleep(5);
}
## calcul t1-t0;
my $delta = tv_interval ($t0);
print "Vitesse :$delta\n";

Aucun commentaire: