#  (gH)   --  analog.pl  ;  TimeStamp (unix) : 11 Février 2005 vers 16:56

print "\n (gH) Exemple d'analyse de logs\n\n" ;

# on met tout dans la variable src

while (<>) { $src .= $_ } ;

# transfert dans la variavle "bien connue de perl"

$_ = $src ;
# pour vérifier qu'on a tout lu : print "\n\n$src\n\n" ;

###################################################################

# on cherche les ouvertures : le ? sert à modérer l'expression régulière

$so = 0 ;
while (m| session opened for user (.*?) by |gs) {
  $so++;
  if    ($so<5)   { print "     " .sprintf("%4d",$so)."  $1\n"; }
  elsif ($so==5)  { print "     ...\n\n" ; } ;
} ; # fin de tant que
print "   ".sprintf("%4d",$so)." sessions ouvertes\n" ;

# on cherche les fermetures : le ? sert à modérer
# pas besoin de $sc = 0 ; car perl s'en charge.

while (m| session closed for (.*?) by |gs) {
  $sc++;
} ; # fin de tant que
print "   ".sprintf("%4d",$sc)." sessions fermées\n" ;

###################################################################

# on recommence en plus aggressif avec les deux chaines
# à la fois dans une liste

print "\n Rebelote : \n\n" ;

@ach = ("session opened for user","session closed for") ;
foreach $mac (@ach) {
  while (m|$mac (.*?) by |gs) { $nbs{$mac}++ ; }  ;
} ; # fin de pour chaque

foreach $mac (reverse sort @ach) {
  print "  ".sprintf("%-30s %6d",$mac, $nbs{$mac})."\n" ;
} ; # fin de pour chaque

###################################################################

print "\nRécupération des utilisateurs\n" ;

$nu = 0 ;
foreach $mac (@ach) {
  while (m|$mac (.*?) by |gs) {
    $nu++ ;
    $usr{$1}++ ;
    # pour debug :
    if    ($nu<5)  { print "  ".sprintf("   %5d   %-15s %-25s",$nu, $1,$mac)."\n" ; }
    elsif ($nu==5) { print "  ...\n" ; } ;
  }  ; # fin de tant que
} ; # fin de pour chaque

print "\n       Num   Utilisateurs  Nb Sessions (o/c) \n" ;
$nu = 0 ;
foreach $uti (sort keys %usr) {
    $nu++ ;
    if    ($nu<10)  { print "  ".sprintf("   %5d   %-30s %6d",$nu, $uti,$usr{$uti})."\n" ; }
    elsif ($nu==10) { print "  ...\n" ; } ;
} ; # fin de pour chaque

# fin de l'exemple

print "\n (gH) -- fin d'analyse de logs\n\n" ;
