So - jetzt auch mein Progrämmchen für den Wettbewerb.
Dieses Tool macht nichts anderes, als die Server-Log-Datei des Apache Webservers nach Domains zu splitten, und diese dann in Piwik, der open Source Statistik für Webseiten, zu imortiren. Das ist notwendig, wenn man mehrere Domains auf einem Hosting-Paket beteibt.
WICHTIG
Dem Programm liegt eine .dat Datei bei, welche in der 1. Zeile den Pfad zur Piwik-Installation (Verzeichnis misc/log-analytics) nthält, und in den weiteren Zeilen die Domains, und andere Werte.
VORAUSSETZUNG
Damit das Programm funktioniert, muss ein lokaler Webserver (wamp) und Piwik installiert sein. Ebenso muss Python installiert, und im Windows Path eingetragen sein, damit es einfach mit python gestartet werden kann.
SCREENSHOT
[Blockierte Grafik: http://s24.postimage.org/fr41un0k1/Screen_08_03_2013_14_Uhr_16_31_Sek.jpg]
DER CODE
declare zeile$, datei$, ende%, logpfad$, ok%, tab&,i%,text&,count&, valid&, killed&, google&
'HAUPTPROGRAMM
Set("TrueColor",0)
WindowStyle 26
WindowTitle "ServerLog Splitter (c) 2012 AGENTUR Matthias Griesbach"
Window (%MaxX/2-430),(%MaxY/2-285) - 860,570
PopUp "&Datei"
AppendMenu 101,"&LogFile öffnen"
AppendMenu 102,"&Beenden"
'PopUp "D&omains"
'AppendMenu 201,"Domains b&earbeiten"
'PopUp "&Web"
'AppendMenu 301,"ServerLog Splitter im Web"
'AppendMenu 302,"AGENTUR Matthias Griesbach"
text&=Create("Text",%hwnd,"",5,5,840,16)
tab&=Create("GridBox", %hwnd, "Domain;0;200;Log-Datei;0;160;Status;0;60;Piwik Id;1;70;Zeilen;1;60;Server;1;60;Google;1;60;Import;0;100", 1, 5, 25, 840, 490)
datei$="server-log-rewriter.dat"
Assign #1,datei$
Reset #1
If %IOResult
Settext text&,"Daten-Datei kann nicht geöffnet werden!"
Else
Settext text&,"Lese Daten-Datei"
Input #1, logpfad$
WhileNot @EOF(#1)
Input #1, zeile$
AddString(tab&,zeile$)
EndWhile
Close #1
EndIf
ende%=1
WHILE ende%
WaitInput
If @MenuItem(101)
chdir logpfad$
datei$=LoadFile$("Lade eine Logdatei","*.log")
logpfad$=@GetDir$("@")
'Sicherstellen, das alle neuen Log-Dateien vorhanden leer sind.
i%=0
While i%<GetCount(tab&)
SetText tab&, i%, 2, "open"
Assign #2, logpfad$+chr$(92)+GetText$(tab&,i%,1)
Rewrite #2
If %IOResult
Settext text&,GetText$(tab&,i%,1)+" kann nicht geöffnet werden."
Endif
Close #2
SetText tab&, i%, 2, "closed"
inc i%
EndWhile
'Die Server-Log-Datei öffnen
Assign #1,datei$
Reset #1
If %IOResult
Settext text&,"Datei kann nicht geöffnet werden."
Else
Settext text&,"Lese Log-Datei"
count&=0
valid&=0
killed&=0
google&=0
WhileNot @EOF(#1)
Input #1, zeile$
inc count&
Settext text&,"Lese Log-Datei Zeile: "+str$(count&)+" davon "+str$(valid&)+" zugeordnet, "+str$(killed&)+" Server und "+str$(google&)+" Google"
i%=0
While i%<GetCount(tab&)
If InStr(" "+GetText$(tab&,i%,0), zeile$)
If InStr("213.160.85.131", zeile$)
inc killed&
Settext tab&,i%,5,str$(val(GetText$(tab&,i%,5))+1)
ElseIf InStr(" Googlebot/2.1", zeile$)
inc google&
Settext tab&,i%,6,str$(val(GetText$(tab&,i%,6))+1)
Else
Assign #2, logpfad$+chr$(92)+GetText$(tab&,i%,1)
Append #2
If %IOResult
Settext text&,GetText$(tab&,i%,1)+" kann nicht geöffnet werden."
Else
SetText tab&, i%, 2, "open"
Print #2, zeile$
Close #2
inc valid&
Settext tab&,i%,4,str$(val(GetText$(tab&,i%,4))+1)
SetText tab&, i%, 2, "closed"
Endif
EndIf
Endif
inc i%
EndWhile
EndWhile
Close #1
EndIf
'Log-Dateien in Piwik importieren.
i%=0
While i%<GetCount(tab&)
SetText text&, "Importiere "+GetText$(tab&,i%,1)
SetText tab&, i%, 7, "wird ausgeführt"
ok%=@WinExecWait("python import_logs.py --url=localhost/piwik "++GetText$(tab&,i%,1)+" --idsite="++GetText$(tab&,i%,3),1)
if ok%=1
SetText tab&, i%, 7, "erledigt"
else
SetText tab&, i%, 7, "fehler"
EndIf
inc i%
EndWhile
SetText text&, "Log-Daten verteilen und importieren abgeschlossen."
'c:\Program Files\wamp\www\piwik\misc\log-analytics> python import_logs.py --url=localhost/piwik preisvergleich.log --idsite=2
ElseIf @MenuItem(102)
ende%=0
EndIf
ENDWHILE
Alles anzeigen
DIE .Dat
C:\Program Files\wamp\www\piwik\misc\log-analytics\
www.domain.tldt|domain.log|closed|1|0|0|0|ausstehend
www.domain1.tldt|domain1.log|closed|2|0|0|0|ausstehend
Diese Datei mit einem Texteditor erstllen, und als server-log-rewriter.dat im Programmverzeichnis speichern.
MOTIVATION
Meiner Meinung nach zeigt dieses Beispiel, wie einfach es sein kann, sich mit XProfan die Datenwelt zu vereinfachen.
Gruß Matthias