Analyseur de fichier log

Description

Voici un tout petit programme tout simple qui permet d'analyser (certe de manière très basique) un fichier log d'un serveur web. Il analyse le nombre de requêtes, le nombres de vue d'un fichier (spécifié pas l'utilisateur), le nombre de visiteur unique. Vous pouvez exclure un répertoire ou un fichier de l'analyse. Il peut aussi résoudre les adresse Ip du log (trouver le nom de domaine qui leur correspond) mais attention cette fonction peut être très lente. Le format de log avec lequel je l'ai testé est celui d'un serveur Unix.

Pour inclure tout les fichiers d'un certain type, ne pas mettre *.htm mais seulement .htm

J'attends vos comentaire mais soyez indulgeant SVP, je sais que du point de vue programmation, ce programme ne vaut pas grand chose mais il eput rendre service

Source / Exemple :


Option Explicit
Public Requetes As Long
Public Visites  As Long
Public FileView As Long
Public LastIp   As String
Public Begin    As Integer
Public Fin      As Integer
Public x        As String

Private Sub Command1_Click()
    Dim FileIndex   As Integer
    Dim FileIndex2  As Integer
    Dim Line        As String
    Dim i           As Long
    Dim FeedBack    As VbMsgBoxResult
    Dim Count       As Long
    On Error GoTo Fin
    FileIndex = FreeFile
    CMD.ShowOpen
    On Error Resume Next
    i = 0
    Open CMD.FileName For Input As FileIndex
    Line = Input(10, FileIndex)
    If Line <> "GLogFilev1" Then
        FeedBack = MsgBox("Le fichier log n'est pas au format Glog, voulez vous le convertire?", vbQuestion + vbYesNo, "Attention")
        Close FileIndex
        Open CMD.FileName For Input As FileIndex
        If FeedBack = vbYes Then
            FileIndex2 = FreeFile
            Open CMD.FileName & ".glog" For Binary As FileIndex2
            Put #FileIndex2, , "GLogFilev1" & vbCrLf
            Do While Not EOF(FileIndex)
                i = i + 100
                Line = Input(100, FileIndex)
                Line = Replace(Line, Chr(10), vbCrLf)
                Line = Replace(Line, """", "'")
                Line = Replace(Line, ",", ";")
                Put #FileIndex2, , Line
                Label1.Caption = Int((i / (LOF(FileIndex) / 100))) & " % de la convertion"
                DoEvents
            Loop
            Close FileIndex
            Close FileIndex2
            Open CMD.FileName & ".glog" For Binary As FileIndex
            GoTo Analyse
        Else
            Exit Sub
        End If
    Else
Analyse:
        i = 0
        FileView = 0
        Visites = 0
        Requetes = 0
        Do While Not EOF(FileIndex)
            Input #FileIndex, Line
            i = i + Len(Line)
            If Req.Value = 1 Then Requetes = Requetes + 1
            If Vis.Value = 1 Then If AlreadyIP(Line) = False Then Visites = Visites + 1
            If Fil.Value = 1 Then If IsValable(Line) = True Then FileView = FileView + 1
            Label1.Caption = Int((i / (LOF(FileIndex) / 100))) & " % de l'analyse"
            DoEvents
        Loop
    End If
    Close FileIndex
    Close FileIndex2
    For i = 1 To IP.ListCount
        Label1.Caption = "Résolution des IP (" & i & "/" & IP.ListCount & ")"
        If Check1.Value = 1 Then Line = fGetHostName(IP.List(i))
        If Check1.Value = 0 Or Line = "" Then
            List1.AddItem IP.List(i)
        Else
            List1.AddItem Line
        End If
        DoEvents
    Next
    Label1.Caption = "Terminé"
    Req.Caption = "Reqûetes " & Requetes
    Vis.Caption = "Visiteurs (IP unique) " & Visites
    Fil.Caption = "Vue du fichier " & FileView
    Exit Sub
Fin:
End Sub

Public Function IsValable(Line) As Boolean
    Begin = InStr(1, Line, "GET")
    Fin = InStr(Begin, Line, "HTTP")
    Line = Mid(Line, Begin + 3, Fin - Begin - 3)
    If InStr(1, Line, Text2.Text) > 0 Then
        IsValable = True
        If Check2.Value = 1 Then
            If InStr(1, Line, Text1.Text) > 0 Then IsValable = True
            If InStr(1, Line, Text1.Text) > 0 Then IsValable = False
        End If
    Else
        IsValable = False
    End If
End Function

Public Function AlreadyIP(Line) As Boolean
    Dim IPV As String
    Dim i   As Long
    On Error Resume Next
    IPV = Left(Line, InStr(1, Line, " ") - 1)
    If IPV = LastIp Then
        AlreadyIP = True
        LastIp = IPV
        Exit Function
    End If
    For i = 0 To IP.ListCount - 1
        If IPV = IP.List(i) Then
            AlreadyIP = True
            LastIp = IPV
            Exit Function
        End If
    Next
    AlreadyIP = False
    IP.AddItem IPV
    LastIp = IPV
End Function

Private Sub List1_DblClick()
    MsgBox "Résolution de l'IP : " & fGetHostName(List1.List(List1.ListIndex))
End Sub

Conclusion :


Le module de résolution des IP n'est pas de moi mais provient d'une source sur ce site (laquel je en sais plus)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.