Nun gut,.. hab mich mal hingesetzt und ein logfileauswertescript gebastelt ..
zuvor aber noch deinen counter:
Code:
Sub Application_OnStart
' Bei start des Servers alle Variablen auf 0 setzen
Application("ActiveUsers") = 0
Application("AllUsers")= 0
End Sub
Sub Session_OnStart
Dim FSO, gcFile, scFile, aktCount, newCount, countfile
countfile = Server.MapPath("data\counter.txt")
set FSO = server.CreateObject("Scripting.FileSystemObject")
set File = FSO.OpenTextFile(countfile)
aktCount = gcFile.ReadLine ' Counterstand wird aus Datei gelesen
newCount = aktCount + 1 ' Counterstand wird erhöht
Application("AllUsers") = newCount ' Counterstand wird einer Applicationvariable zugewiesen
File.close
SET File = nothing
set File = FSO.CreateTextFile(countfile)
File.WriteLine(newCount) ' neuer counterstand wird in Datei geschrieben
File.close
Session.Timeout = 20
Session("Start") = Now
Application.Lock
Application("ActiveUsers") = Application("ActiveUsers") + 1 ' aktueller Userstand wird erhöht
Application.UnLock
SET FSO = nothing
SET gcFile = nothing
End Sub
Sub Session_OnEnd
Application.Lock
Application("ActiveUsers") = Application("ActiveUsers") - 1 ' aktueller Userstand wird erniedrigt .. eh .. verringert *rolleyes*
Application.UnLock
End Sub
^^
Dieser Code muss in deine Global.asa Datei,
In der Session_onStart - Sub steht alles drinnen was geschieht wenn ein Benutzer neu auf deine Siet kommt (Counterstand erhöhen..),
in der Session_onEnd alles beim Verlassen deiner site, bzw. bei ender der Session (Session wird im Script auf 20 minuten gesetzt)
Wüsste jetzt nicht was ich dabei noch erklären soll, solltest da noch fragen habe, stelle diese =)
Nun zu den Statistiken,
das angehängte Script öffnet alle Dateien in einem bestimmten Verzeichniss und wertet die Daten nach einem bestimmten Schema aus..
Das Script ist für IIS Logdateien im Format W3C-Erweitert Format Konzipiert!
Es ließt aus wie oft die Dateien aufgerufen wurden, welche IP-Addresse wie oft eine Datei aufrief und welcher Browser wie oft eine Datei aufrief
Das komplette Script ist angehängt, mit ein paar Logdateien..
Werde nun die ASP-Teile ein wenig erklären..
Code:
strLogFolder = Server.MapPath ("/logs/")
SET FSO = Server.CreateObject("Scripting.FileSystemObject")
SET FOLDER = FSO.GetFolder(strLogFolder)
for each file in folder.files
log_count = log_count + 1
next
^^
strLogFolder ist der Ordner in dem sich die Logdateien befindet, man kann das Server.MapPath(..) natürlich durch eine andere absolute Pfadangabe ersetzen
Der Ordner wird dann geöffnet (SET Folder ..) und in einer Schleife wird die Anzahl der Dateien ermittelt (eigentlich unwichtig,..)
Code:
01 SET dicUIP = Server.CreateObject("Scripting.Dictionary")
02 SET dicFile = Server.CreateObject("Scripting.Dictionary")
03 SET dicBrowser = Server.CreateObject("Scripting.Dictionary")
04
05 for each file in folder.Files
06
07 SET logfile = FSO.OpenTextFile(file)
08
09 while not logfile.AtEndOfStream
10
11 strLine = logfile.ReadLine
12 if not Left(strLine, 1) = "#" then
13
14 arrLine = split(strLine, chr(32))
15 if not UBOUND(arrLine) <> 10 then
16 if not dicUIP.Exists(arrLine(2)) then
17 dicUIP.Add arrLine(2), 1
18 else
19 dicUIP.Item(arrLine(2)) = cint(dicUIP.Item(arrLine(2)) + 1)
20 end if
21
22 if not dicFile.Exists(arrLine(7)) then
23 dicFile.Add arrLine(7), 1
24 else
25 dicFile.Item(arrLine(7)) = cint(dicFile.Item(arrLine(7))+ 1)
26 end if
27
28 if not dicBrowser.Exists(arrLine(10)) then
29 dicBrowser.Add arrLine(10), 1
30 else
31 dicBrowser.Item(arrLine(10)) = cint(dicBrowser.Item(arrLine(10))) + 1
32 end if
33 end if
34
35 end if
36
37 wend
38
39 logfile.close
40 SET logfile = nothing
41
42 next
in den Zeilen 1 - 3 werden Dictionary-Objecte angelegt zum zwischenspeichern der Werte..
05 - Eine Schleife die jede Datei im Ordner durchgeht
09 - weitere Schleife die alle Zeilen in der Datei durchgeht
11 - Eine Zeile wird ausgelesen
12 - Jede Zeile die mit einem '#' am Anfang wird ausgelassen da es sich dabei um Kommentarzeilen handelt
14 - Die gelesene Zeile wird in ein Array gesplitet, als Trennzeichen wird das Leerzeichen genommen.. - die Einzellnen Daten haben nun ein eigenes Arrayfeld..
15 - Falls in der Zeile nicht die richtigen Daten standen, wird sie nicht ausgewertet, könnte zu einem Fehler kommen
16/17 - Bei arrLine(2) Handelt es sich um die IP adresse des Clienten, sollt ein Schlüssel mit dieser IP noch nicht existieren wird er erstellt, und als Wert bekommt er eine '1'
19 - Sollte der Schlüssel schon vorher existiert haben, wird der Wert um eins erhöht..
23 - 32 das selbe wie oben - arrLine(7) = Datei | arrLine(10) = Browser
Code:
ip = dicUIP.Keys
ip_c = dicUIP.Items
browser = dicBrowser.Keys
browser_c = dicBrowser.Items
files = dicFile.Keys
files_c = dicFile.Items
die Dictionary Schlüssel und deren Daten werden in Arrays übergeben...
Code:
browser_short = split(browser(i), ";")
browser_short(1) = replace(browser_short(1), "+", "")
browser_short(2) = replace(browser_short(2), "+", " ")
Response.Write (browser_short(1) & " unter " & browser_short(2))
Die Browserangabe (bzw. User-Client ..) wird Formatiert,.. ausgegeben wird dann nur der wirkliche Browser (ohne Mozilla/4.0+(compatible...) und das Betriebsystem..
Der Restliche Code ist HTML code, oder anderer Code, der klar sein sollte..
wenn nicht klar, bitte fragt =)
und hier noch ScreenShots ..
so... ich hoffe du kannst es brauchen.. *ganz fertig vomtipseln etc. ist..*
ist gerade frisch geschrieben... =)
mfg,
crazy-weasel
p.s.
schaut mal da bei den Browsern..
