#-------------------------------------------------------
# Defines
#-------------------------------------------------------
-$VERSION="2.23k";
+$VERSION="2.23m";
$Lang=0;
# Default value
"mamma\.","query=",
"northernlight\.","qr="
);
-@WordsToCleanSearchUrl= ("act=","annuaire=","btng=","categoria=","cou=","dd=","domain=","dt=","dw=","exec=","geo=","hc=","height=","hl=","hs=","kl=","lang=","loc=","lr=","medor=","message=","meta=","mode=","order=","page=","par=","pays=","pg=","pos=","prg=","qc=","refer=","sa=","safe=","sc=","sort=","src=","start=","stype=","tag=","temp=","theme=","url=","user=","width=","what=","\\.x=","\\.y=");
+@WordsToCleanSearchUrl= ("act=","annuaire=","btng=","categoria=","cou=","dd=","domain=","dt=","dw=","exec=","geo=","hc=","height=","hl=","hs=","kl=","lang=","loc=","lr=","matchmode=","medor=","message=","meta=","mode=","order=","page=","par=","pays=","pg=","pos=","prg=","qc=","refer=","sa=","safe=","sc=","sort=","src=","start=","stype=","tag=","temp=","theme=","url=","user=","width=","what=","\\.x=","\\.y=");
# Never put the following exclusion ("Claus=","kw=","keyword=","MT","p=","q=","qr=","qt=","query=","s=","search=","searchText=") because they are strings that contain keywords we're looking for.
# ---------- HTTP Code with tooltip --------
"webcopy", "WebCopy",
"webfetcher", "webfetcher",
"webfoot", "The Webfoot Robot",
-"weblayers", "weblayers",
+"weblayers", "Weblayers",
"weblinker", "WebLinker",
"webmirror", "WebMirror",
"webmoose", "The Web Moose",
"nederland.zoek", "Nederland.zoek",
# Not declared robots
+"antibot", "Antibot (Not referenced robot)",
+"daviesbot", "DaviesBot (Not referenced robot)",
"ezresult", "Ezresult (Not referenced robot)",
"fast-webcrawler", "Fast-Webcrawler (Not referenced robot)",
-"perman surfer", "Perman surfer (Not referenced robot)",
+"jennybot", "JennyBot (Not referenced robot)",
+"justview", "JustView (Not referenced robot)",
"mercator", "Mercator (Not referenced robot)",
-"antibot", "Antibot (Not referenced robot)",
-"daviesbot", "DaviesBot (Not referenced robot)",
+#"msiecrawler", "MSIECrawler (Not referenced robot)", MSIECrawler seems to be a grabber not a robot
+"perman surfer", "Perman surfer (Not referenced robot)",
"unlost_web_crawler", "Unlost_Web_Crawler (Not referenced robot)",
-"justview", "JustView (Not referenced robot)",
+"webbase", "WebBase (Not referenced robot)",
# Supposed to be robots
"webcompass", "webcompass (Not referenced robot)",
"digout4u", "digout4u (Not referenced robot)",
$_[0] =~ s/%2b/ /gi; #+
$_[0] =~ s/%2c/ /gi; #,
$_[0] =~ s/%2d//gi; #-
+ $_[0] =~ s/%2e/\./gi; #.
$_[0] =~ s/%2f/ /gi; #/
$_[0] =~ s/%3c/ /gi; #<
$_[0] =~ s/%3d/ /gi; #=
$QueryString = $ENV{"QUERY_STRING"};
if ($QueryString =~ /site=/) { $LocalSite=$QueryString; $LocalSite =~ s/.*site=//; $LocalSite =~ s/&.*//; }
else { $LocalSite = $ENV{"SERVER_NAME"}; }
- $PROG=$0; $PROG =~ s/.*\\//; $PROG =~ s/.*\///; $DIR=$0; $DIR =~ s/$PROG//; $PROG =~ s/\.pl$//;
+ $PROG=$0; $PROG =~ s/.*\\//; $PROG =~ s/.*\///; $DIR=$0; $DIR =~ s/$PROG//;
+ $Extension=$PROG; $Extension =~ s/.*\.pl?/pl/;
+ $PROG =~ s/\.$Extension$//;
print("Content-type: text/html\n\n\n");
}
else {
$LocalSite = $ARGV[1];
- $PROG=$0; $PROG =~ s/.*\\//; $PROG =~ s/.*\///; $DIR=$0; $DIR =~ s/$PROG//; $PROG =~ s/\.pl$//;
+ $PROG=$0; $PROG =~ s/.*\\//; $PROG =~ s/.*\///; $DIR=$0; $DIR =~ s/$PROG//;
+ $Extension=$PROG; $Extension =~ s/.*\.pl?/pl/;
+ $PROG =~ s/\.$Extension$//;
}
$LocalSite =~ tr/A-Z/a-z/;
$LocalSiteWithoutwww = $LocalSite; $LocalSiteWithoutwww =~ s/www\.//;
print "----- $PROG $VERSION (c) Laurent Destailleur -----\n";
print "$PROG is a free web server logfile analyzer (in Perl) to show you advanced\n";
print "web statistics. Distributed under GNU General Public Licence.\n";
- print "Syntax: $PROG.pl -h www.host.com\n";
+ print "Syntax: $PROG.$Extension -h www.host.com\n";
print " Runs $PROG from command line to have statistics of www.host.com web site.\n";
print " First, $PROG tries to use $PROG.www.host.com.conf as the config file, if\n";
print " not found, $PROG will use $PROG.conf.\n";
$month++;if ($month < 10) { $month = "0$month"; }
if ($QueryString =~ /month=/) { $MonthOnly=$QueryString; $MonthOnly =~ s/.*month=//; $MonthOnly =~ s/&.*//; }
if ($MonthOnly eq "") { $MonthOnly=$month; }
-$BrowsersHash{"netscape"}="<font color=blue>Netscape</font> <a href=\"$DirCgi$PROG.pl?action=browserdetail&month=$MonthOnly&lang=$Lang\">(Versions)</a>";
-$BrowsersHash{"msie"}="<font color=blue>MS Internet Explorer</font> <a href=\"$DirCgi$PROG.pl?action=browserdetail&month=$MonthOnly&lang=$Lang\">(Versions)</a>";
+$BrowsersHash{"netscape"}="<font color=blue>Netscape</font> <a href=\"$DirCgi$PROG.$Extension?action=browserdetail&month=$MonthOnly&lang=$Lang\">(Versions)</a>";
+$BrowsersHash{"msie"}="<font color=blue>MS Internet Explorer</font> <a href=\"$DirCgi$PROG.$Extension?action=browserdetail&month=$MonthOnly&lang=$Lang\">(Versions)</a>";
if (@HostAliases == 0) {
warning("Warning: HostAliases parameter is not defined, $PROG will choose \"$LocalSite localhost 127.0.0.1\".");
$HostAliases[0]=$LocalSite; $HostAliases[1]="localhost"; $HostAliases[2]="127.0.0.1";
";
print "<a href=\"http://awstats.sourceforge.net\" target=_newawstats><img src=$DirIcons/other/$Logo border=0 alt=\"$PROG Official Web Site\"></a><br>\n";
if ($ShowFlagLinks == 1) {
- if ($Lang != 0) { print "<a href=\"$DirCgi$PROG.pl?month=$MonthOnly&lang=0\"><img src=\"$DirIcons\/flags\/us.png\" height=14 border=0 alt=\"English\"></a>\n"; }
- if ($Lang != 1) { print " <a href=\"$DirCgi$PROG.pl?month=$MonthOnly&lang=1\"><img src=\"$DirIcons\/flags\/fr.png\" height=14 border=0 alt=\"French\"></a>\n"; }
- if ($Lang != 2) { print " <a href=\"$DirCgi$PROG.pl?month=$MonthOnly&lang=2\"><img src=\"$DirIcons\/flags\/nl.png\" height=14 border=0 alt=\"Dutch\"></a>\n"; }
- if ($Lang != 3) { print " <a href=\"$DirCgi$PROG.pl?month=$MonthOnly&lang=3\"><img src=\"$DirIcons\/flags\/es.png\" height=14 border=0 alt=\"Spanish\"></a>\n"; }
- if ($Lang != 4) { print " <a href=\"$DirCgi$PROG.pl?month=$MonthOnly&lang=4\"><img src=\"$DirIcons\/flags\/it.png\" height=14 border=0 alt=\"Italian\"></a>\n"; }
- if ($Lang != 5) { print " <a href=\"$DirCgi$PROG.pl?month=$MonthOnly&lang=5\"><img src=\"$DirIcons\/flags\/de.png\" height=14 border=0 alt=\"German\"></a>\n"; }
+ if ($Lang != 0) { print "<a href=\"$DirCgi$PROG.$Extension?month=$MonthOnly&lang=0\"><img src=\"$DirIcons\/flags\/us.png\" height=14 border=0 alt=\"English\"></a>\n"; }
+ if ($Lang != 1) { print " <a href=\"$DirCgi$PROG.$Extension?month=$MonthOnly&lang=1\"><img src=\"$DirIcons\/flags\/fr.png\" height=14 border=0 alt=\"French\"></a>\n"; }
+ if ($Lang != 2) { print " <a href=\"$DirCgi$PROG.$Extension?month=$MonthOnly&lang=2\"><img src=\"$DirIcons\/flags\/nl.png\" height=14 border=0 alt=\"Dutch\"></a>\n"; }
+ if ($Lang != 3) { print " <a href=\"$DirCgi$PROG.$Extension?month=$MonthOnly&lang=3\"><img src=\"$DirIcons\/flags\/es.png\" height=14 border=0 alt=\"Spanish\"></a>\n"; }
+ if ($Lang != 4) { print " <a href=\"$DirCgi$PROG.$Extension?month=$MonthOnly&lang=4\"><img src=\"$DirIcons\/flags\/it.png\" height=14 border=0 alt=\"Italian\"></a>\n"; }
+ if ($Lang != 5) { print " <a href=\"$DirCgi$PROG.$Extension?month=$MonthOnly&lang=5\"><img src=\"$DirIcons\/flags\/de.png\" height=14 border=0 alt=\"German\"></a>\n"; }
print "<br>";
}
print "<font size=1>$message[54][$Lang]</font><br>\n";
if ($DNSLookup && !$NewDNSLookup) { warning("Warning: <b>$PROG</b> has detected that hosts names are already resolved in your logfile <b>$LogFile</b>.<br>\nIf this is true, you should change your setup \$DNSLookup=1 into \$DNSLookup=0 to increase $PROG speed."); }
# Save for month $monthtoprocess
- &Save_History_File($monthtoprocess,$year);
+ if ($monthtoprocess) { # If monthtoprocess is 0, it means there was no history files and we found no valid lines in log file
+ &Save_History_File($monthtoprocess,$year);
+ }
# Archive LOG file into ARCHIVELOG
if ($ArchiveLogRecords == 1) {
if ($TotalVisits > 0) { $RatioBytes=int(($TotalBytes/1024)*100/$TotalVisits)/100; }
if ($MonthOnly eq "year") { print "<TR><TD><b>$message[8][$Lang]</b></TD><TD colspan=3 rowspan=2><font style=\"font: 10pt arial,verdana,helvetica\"><b>$message[6][$Lang] $year</b></TD><TD><b>$message[9][$Lang]</b></TD></TR>"; }
-else { print "<TR><TD><b>$message[8][$Lang]</b></TD><TD colspan=3 rowspan=2><font style=\"font: 10pt arial,verdana,helvetica\"><b>$message[5][$Lang] $monthlib{$MonthOnly} $year</b></font><br><a href=\"$DirCgi$PROG.pl?month=year&lang=$Lang\">$message[6][$Lang] $year</a></TD><TD><b>$message[9][$Lang]</b></TD></TR>"; }
+else { print "<TR><TD><b>$message[8][$Lang]</b></TD><TD colspan=3 rowspan=2><font style=\"font: 10pt arial,verdana,helvetica\"><b>$message[5][$Lang] $monthlib{$MonthOnly} $year</b></font><br><a href=\"$DirCgi$PROG.$Extension?month=year&lang=$Lang\">$message[6][$Lang] $year</a></TD><TD><b>$message[9][$Lang]</b></TD></TR>"; }
$yearcon=substr($FirstTime,0,4);$monthcon=substr($FirstTime,4,2);$daycon=substr($FirstTime,6,2);$hourcon=substr($FirstTime,8,2);$mincon=substr($FirstTime,10,2);
if ($FirstTime != 0) { print "<TR><TD>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</TD>"; }
else { print "<TR><TD>NA</TD>"; }
print "</TR><TR>";
for ($ix=1; $ix<=12; $ix++) {
$monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
- print "<TD valign=center><a href=\"$DirCgi$PROG.pl?month=$monthix&lang=$Lang\">$monthlib{$monthix}</a></TD>";
+ print "<TD valign=center><a href=\"$DirCgi$PROG.$Extension?month=$monthix&lang=$Lang\">$monthlib{$monthix}</a></TD>";
}
print "</TR></TABLE>";
if ($_hostmachine_h{$key}>=$MinHitHost) {
$kilo=int(($_hostmachine_k{$key}/1024)*100)/100;
if ($key eq "Unknown") {
- print "<TR><TD CLASS=LEFT><a href=\"$DirCgi$PROG.pl?action=unknownip&month=$MonthOnly&lang=$Lang\">$message[1][$Lang]</a></TD><TD>$_hostmachine_p{$key}</TD><TD>$_hostmachine_h{$key}</TD><TD>$kilo</TD><TD><a href=\"$DirCgi$PROG.pl?action=unknownip&month=$MonthOnly&lang=$Lang\">$message[3][$Lang]</a></TD></TR>\n";
+ print "<TR><TD CLASS=LEFT><a href=\"$DirCgi$PROG.$Extension?action=unknownip&month=$MonthOnly&lang=$Lang\">$message[1][$Lang]</a></TD><TD>$_hostmachine_p{$key}</TD><TD>$_hostmachine_h{$key}</TD><TD>$kilo</TD><TD><a href=\"$DirCgi$PROG.$Extension?action=unknownip&month=$MonthOnly&lang=$Lang\">$message[3][$Lang]</a></TD></TR>\n";
}
else {
$yearcon=substr($_hostmachine_l{$key},0,4);
foreach $key (@sortbrowsers) {
$p=int($_browser_h{$key}/$TotalHits*1000)/10;
if ($key eq "Unknown") {
- print "<TR><TD CLASS=LEFT><a href=\"$DirCgi$PROG.pl?action=unknownrefererbrowser&month=$MonthOnly&lang=$Lang\">$message[0][$Lang]</a></TD><TD>$_browser_h{$key}</TD><TD>$p %</TD></TR>\n";
+ print "<TR><TD CLASS=LEFT><a href=\"$DirCgi$PROG.$Extension?action=unknownrefererbrowser&month=$MonthOnly&lang=$Lang\">$message[0][$Lang]</a></TD><TD>$_browser_h{$key}</TD><TD>$p %</TD></TR>\n";
}
else {
print "<TR><TD CLASS=LEFT>$BrowsersHash{$key}</TD><TD>$_browser_h{$key}</TD><TD>$p %</TD></TR>\n";
foreach $key (@sortos) {
$p=int($_os_h{$key}/$TotalHits*1000)/10;
if ($key eq "Unknown") {
- print "<TR><TD><IMG SRC=\"$DirIcons\/os\/unknown.png\"></TD><TD CLASS=LEFT><a href=\"$DirCgi$PROG.pl?action=unknownreferer&month=$MonthOnly&lang=$Lang\">$message[0][$Lang]</a></TD><TD>$_os_h{$key} </TD>";
+ print "<TR><TD><IMG SRC=\"$DirIcons\/os\/unknown.png\"></TD><TD CLASS=LEFT><a href=\"$DirCgi$PROG.$Extension?action=unknownreferer&month=$MonthOnly&lang=$Lang\">$message[0][$Lang]</a></TD><TD>$_os_h{$key} </TD>";
print "<TD>$p %</TD></TR>\n";
}
else {
$p=int($_errors_h{$key}/$TotalErrors*1000)/10;
if ($httpcode{$key}) { print "<TR onmouseover=\"ShowTooltip($key);\" onmouseout=\"HideTooltip($key);\">"; }
else { print "<TR>"; }
- if ($key == 404) { print "<TD><a href=\"$DirCgi$PROG.pl?action=notfounderror&month=$MonthOnly&lang=$Lang\">$key</a></TD>"; }
+ if ($key == 404) { print "<TD><a href=\"$DirCgi$PROG.$Extension?action=notfounderror&month=$MonthOnly&lang=$Lang\">$key</a></TD>"; }
else { print "<TD>$key</TD>"; }
if ($httpcode{$key}) { print "<TD CLASS=LEFT>$httpcode{$key}</TD><TD>$_errors_h{$key}</TD><TD>$p %</TD></TR>\n"; }
else { print "<TD CLASS=LEFT>Unknown error</TD><TD>$_errors_h{$key}</TD><TD>$p %</TD></TR>\n"; }