Bonjour,

Je dois alimenter quotidiennement une base de données avec les infos d’un fichier log.

Pour cela je désire :
-ouvrir un fichier log
-récupérer les différentes informations ligne par ligne
-formater ces infos (date, heure, timeticks)
-l’envoyer dans une base de données
-------------------------------------------------------------------
-renommer le fichier avec la date de la veille
-déplacer ce fichier renommé dans un autre dossier
-et enfin créer un nouveau fichier log dans lequel viendront s’ajouter les nouvelles infos.

Pour l’instant, le script est censé fonctionner jusqu’à l’envoi dans la base de données (je ferai le reste après ^^).

Ceci étant ma première programmation en Perl, je souhaiterais savoir si le code, les librairies, etc sont corrects.

Je vous remercie énormément.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/perl -w
use strict;
use DBI;
use CGI;
use POSIX;
 
my $cgi = new CGI;
my ($dateHeure,$adIp,$numGeneric,$numSpecific,$sysTime,$trap);
my ($date,$heure);
my ($annee,$mois,$jour);
my ($hour,$min,$sec);
my $timestamp;
 
open FICHIER,"< /var/log/snmptrapfmt.log"
    or die "Le fichier snmptrapfmt n'existe pas ! : $!\n";
 
#Connection à la base de données mysql NomDeBase
my $db = DBI -> connect (("dbi:mysql:dbname=NomDeBase;host=localhost;","root","******"))
                or die "connection impossible!";
 
while ($ligne = <FICHIER>){
# récupération des éléments
 ($dateHeure,$adIp,$numGeneric,$numSpecific,$sysTime,$trap) = split /;/,$ligne;
 
#formatage de l'heure 
 ($date,$heure) = split /./,$dateHeure;
 ($annee,$mois,$jour) = $date =~ m{(\d{4})(\d{2})(\d{2})};
 $date = $annee."-".$mois."-".$jour;
 ($hour,$min,$sec) = $heure =~ m{(\d{4})(\d{2})(\d{2})};
 $heure = $hour.":".$min.":".$sec;
 $dateHeure = $date." ".$heure;
 $timestamp = mktime($sec,$min,$hour,$jour,$mois,$annee );
 
 
#formatage du timeticks
$sysTime = $timestamp - $sysTime;
$sysTime = UnixDate(ParseDate("epoch $sysTime"), '%Y-%m-%d %H:%M:%S');
 
# et on insere dans la base
  $db->do("insert into NomTable values ('$dateHeure', '$adIp', '$numGeneric', '$numSpecific', '$sysTime', '$trap')");
          or die "pb de requete : $DBI::errstr";
}# fin de traitement de fichier
close FICHIER;