#use diagnostics;
# Uncomment following line and a line into GetDelaySinceStart function to get
# miliseconds time in showsteps option
-#use Time::HiRes qw( gettimeofday );
+#use Time::HiRes qw( gettimeofday );
#-------------------------------------------------------
# Defines
#-------------------------------------------------------
-my $VERSION="4.0 (build 38)";
+my $VERSION="4.0 (build 39)";
# ---------- Init variables -------
my $Debug=0;
my $BarImageHorizontal_h = "barrehh.png";
my $BarImageVertical_k = "barrevk.png";
my $BarImageHorizontal_k = "barrehk.png";
-my $nowtime = my $nowweekofmonth = my $nowdaymod = my $nowsmallyear = 0;
+my $nowtime = my $nowweekofmonth = my $nowdaymod = my $nowsmallyear = 0;
my $nowsec = my $nowmin = my $nowhour = my $nowday = my $nowmonth = my $nowyear = my $nowwday = 0;
-my $tomorrowtime = my $tomorrowsmallyear = 0;
+my $tomorrowtime = my $tomorrowsmallyear = 0;
my $tomorrowsec = my $tomorrowmin = my $tomorrowhour = my $tomorrowday = my $tomorrowmonth = my $tomorrowyear = my $tomorrowwday = 0;
-my ($BarHeight,$BarWidth,$DebugResetDone,$Expires,
+my ($BarHeight,$BarWidth,$DebugResetDone,$Expires,
$CreateDirDataIfNotExists, $KeepBackupOfHistoricFiles, $MaxLengthOfURL,
$NbOfLinesRead, $NbOfNewLinesProcessed, $NbOfLinesCorrupted, $NowNewLinePhase,
$MaxNbOfDomain, $MaxNbOfHostsShown, $MaxNbOfKeywordsShown, $MaxNbOfLoginShown,
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
my ($AllowToUpdateStatsFromBrowser, $ArchiveLogRecords, $DetailedReportsOnNewWindows,
$FirstDayOfWeek, $ShowHeader, $ShowMenu, $ShowMonthDayStats, $ShowDaysOfWeekStats,
-$ShowHoursStats, $ShowDomainsStats, $ShowHostsStats,
-$ShowRobotsStats, $ShowPagesStats, $ShowFileTypesStats,
+$ShowHoursStats, $ShowDomainsStats, $ShowHostsStats,
+$ShowRobotsStats, $ShowPagesStats, $ShowFileTypesStats,
$ShowBrowsersStats, $ShowOSStats, $ShowOriginStats, $ShowKeyphrasesStats,
$ShowKeywordsStats, $ShowHTTPErrorsStats,
$ShowFlagLinks, $ShowLinksOnUrl, $WarningMessages)=
(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
-my ($ArchiveFileName, $DayRequired, $DefaultFile, $FileConfig, $FileSuffix,
+my ($ArchiveFileName, $DayRequired, $DefaultFile, $FileConfig, $FileSuffix,
$HTMLHeadSection, $HTMLEndSection, $HTMLOutput, $Host,
$LastUpdate, $LogFile, $LogFormat, $LogFormatString, $Logo, $LogoLink,
$MonthRequired, $PageCode, $PerlParsingFormat, $QueryString,
-$SiteConfig, $SiteDomain, $SiteToAnalyze, $SiteToAnalyzeWithoutwww,
+$SiteConfig, $SiteDomain, $SiteToAnalyze, $SiteToAnalyzeWithoutwww,
$TotalEntries, $TotalBytesPages, $TotalKeyphrases, $TotalDifferentPages, $TotalDifferentKeyphrases,
$URLFilter, $UserAgent, $YearRequired)=
();
my @ValidHTTPCodes=();
my @OnlyFiles = my @SkipDNSLookupFor = my @SkipFiles = my @SkipHosts = ();
my @DOWIndex=();
-my @RobotArrayList = my @RobotsSearchIDOrder = ();
+my @RobotArrayList = my @RobotsSearchIDOrder = ();
#my @RobotsSearchIDOrder_list1=(); my @RobotsSearchIDOrder_list2=(); my @RobotsSearchIDOrder_list3=();
#my @BrowsersSearchIDOrder = my @OSSearchIDOrder = ();
#my @WordsToCleanSearchUrl=();
if ($HTMLOutput) {
# Write head section
my $sitetoanalyze=$SiteToAnalyze; $sitetoanalyze =~ s/\\\./\./g;
- print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n\n";
- print "<html>\n";
+ print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n\n";
+ print "<html>\n";
print "<head>\n";
if ($PageCode) { print "<META HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; charset=$PageCode\"\n"; } # If not defined, iso-8859-1 is used in major countries
- if ($Expires) { print "<META HTTP-EQUIV=\"expires\" CONTENT=\"".(localtime(time()+$Expires))."\">\n"; }
+ if ($Expires) { print "<META HTTP-EQUIV=\"expires\" CONTENT=\"".(localtime(time()+$Expires))."\">\n"; }
print "<meta http-equiv=\"description\" content=\"$PROG - Advanced Web Statistics for $sitetoanalyze\">\n";
print "<meta http-equiv=\"keywords\" content=\"$sitetoanalyze, free, advanced, realtime, web, server, logfile, log, analyzer, analysis, statistics, stats, perl, analyse, performance, hits, visits\">\n";
print "<meta name=\"robots\" content=\"index,follow\">\n";
#print "Note: If your $NbOfLinesForCorruptedLog first lines in your log files are wrong because they are ";
#print "result of a worm virus attack, you can increase the NbOfLinesForCorruptedLog parameter in config file.\n";
#print "\n";
- }
+ }
else {
- print ($HTMLOutput?"<br><font color=#880000>":"");
- print "$message";
- print ($HTMLOutput?"</font><br>":"");
- print "\n";
- }
- if ($message ne "" && $message !~ /History file.*is corrupted/) {
+ print ($HTMLOutput?"<br><font color=#880000>":"");
+ print "$message";
+ print ($HTMLOutput?"</font><br>":"");
+ print "\n";
+ }
+ if ($message ne "" && $message !~ /History file.*is corrupted/) {
if ($HTMLOutput) { print "<br><b>\n"; }
print "Setup (".($FileConfig?$FileConfig:"Config")." file, web server or permissions) may be wrong.\n";
if ($HTMLOutput) { print "</b><br>\n"; }
print "See AWStats documentation in 'docs' directory for informations on how to setup $PROG.\n";
}
if ($HTMLOutput) { print "</BODY>\n</HTML>\n"; }
- exit 1;
+ exit 1;
}
sub warning {
my $messagestring=shift;
debug("$messagestring",1);
if ($WarningMessages) {
- if ($HTMLOutput) {
- $messagestring =~ s/\n/\<br\>/g;
- print "$messagestring<br>\n";
- }
- else {
- print "$messagestring\n";
- }
+ if ($HTMLOutput) {
+ $messagestring =~ s/\n/\<br\>/g;
+ print "$messagestring<br>\n";
+ }
+ else {
+ print "$messagestring\n";
+ }
}
}
-# Parameters : $string $level
+# Parameters : $string $level
# Input : $Debug = required level $DEBUGFORCED = required level forced
sub debug {
my $level = $_[1] || 1;
- if ($DEBUGFORCED >= $level) {
+ if ($DEBUGFORCED >= $level) {
my $debugstring = $_[0];
if ($DEBUGFORCED >= $level) {
if (! $DebugResetDone) { open(DEBUGFORCEDFILE,"debug.log"); close DEBUGFORCEDFILE; chmod 0666,"debug.log"; $DebugResetDone=1; }
close DEBUGFORCEDFILE;
}
}
- if ($Debug >= $level) {
+ if ($Debug >= $level) {
my $debugstring = $_[0];
if ($HTMLOutput) { $debugstring =~ s/^ /   /; $debugstring .= "<br>"; }
print localtime(time)." - DEBUG $level - $debugstring\n";
sub DayOfWeek {
my ($day, $month, $year) = @_;
&debug("DayOfWeek for $day $month $year",4);
- if ($month < 3) { $month += 10; $year--; }
+ if ($month < 3) { $month += 10; $year--; }
else { $month -= 2; }
my $cent = sprintf("%1i",($year/100));
my $y = ($year % 100);
&debug("DateIsValid for $day $month $year",4);
if ($day < 1) { return 0; }
if ($month==1 || $month==3 || $month==5 || $month==7 || $month==8 || $month==10 || $month==12) {
- if ($day > 31) { return 0; }
+ if ($day > 31) { return 0; }
}
if ($month==4 || $month==6 || $month==9 || $month==11) {
if ($day > 30) { return 0; }
}
if ($month==2) {
- if ($day > 28) { return 0; }
+ if ($day > 28) { return 0; }
}
return 1;
}
chomp $_; s/\r//;
if ($_ =~ /^$/) { next; }
# Remove comments
- if ($_ =~ /^#/) { next; }
+ if ($_ =~ /^#/) { next; }
$_ =~ s/^([^\"]*)#.*/$1/;
$_ =~ s/^([^\"]*\"[^\"]*\"[^\"]*)#.*/$1/;
# Extract param and value
#debug("$_",2);
- my @felter=split(/=/,$_,2);
+ my @felter=split(/=/,$_,2);
my $param=$felter[0]||next; # If not a param=value, try with next line
my $value=$felter[1];
$param =~ s/^\s+//; $param =~ s/\s+$//;
}
# If ValidHTTPCodes not found, init for backward compatibility
if (! $foundValidHTTPCodes) {
- push @ValidHTTPCodes,"200"; push @ValidHTTPCodes,"304";
+ push @ValidHTTPCodes,"200"; push @ValidHTTPCodes,"304";
}
debug(" NotPageList ".@NotPageList);
debug(" ValidHTTPCodes ".@ValidHTTPCodes);
# Parameter: None
# Return value: None
# Input: $DIR
-# Output: Arrays and Hash tables are defined
+# Output: Arrays and Hash tables are defined
#------------------------------------------------------------------------------
sub Read_Ref_Data {
my %FilePath=();
return 0;
}
- # If session for read (no update), file can be open with share. So POSSIBLE CHANGE HERE
+ # If session for read (no update), file can be open with share. So POSSIBLE CHANGE HERE
open(HISTORY,"$DirData/$PROG$DayRequired$month$year$FileSuffix.txt") || error("Error: Couldn't open for read file \"$DirData/$PROG$DayRequired$month$year$FileSuffix.txt\" : $!"); # Month before Year kept for backward compatibility
$MonthUnique{$year.$month}=0; $MonthPages{$year.$month}=0; $MonthHits{$year.$month}=0; $MonthBytes{$year.$month}=0; $MonthHostsKnown{$year.$month}=0; $MonthHostsUnknown{$year.$month}=0;
-
+
my $versionmaj = my $versionmin = 0;
my $countlines=0;
while (<HISTORY>) {
my @field=split(/\s+/,$_);
if (! $field[0]) { next; }
if ($field[0] eq "FirstTime") { $FirstTime{$year.$month}=int($field[1]); next; }
- if ($field[0] eq "LastLine") { if ($LastLine{$year.$month} < int($field[1])) { $LastLine{$year.$month}=int($field[1]); }; next; }
+ if ($field[0] eq "LastLine") { if ($LastLine{$year.$month} < int($field[1])) { $LastLine{$year.$month}=int($field[1]); }; next; }
if ($field[0] eq "FirstTime") { $FirstTime{$year.$month}=int($field[1]); next; }
- if ($field[0] eq "LastTime") { if ($LastTime{$year.$month} < int($field[1])) { $LastTime{$year.$month}=int($field[1]); }; next; }
+ if ($field[0] eq "LastTime") { if ($LastTime{$year.$month} < int($field[1])) { $LastTime{$year.$month}=int($field[1]); }; next; }
if ($field[0] eq "TotalVisits") { $MonthVisits{$year.$month}=int($field[1]); next; }
- if ($field[0] eq "LastUpdate") {
- if ($LastUpdate{$year.$month} < $field[1]) {
- $LastUpdate{$year.$month}=int($field[1]);
- #$LastUpdateLinesRead{$year.$month}=int($field[2]);
- #$LastUpdateNewLinesRead{$year.$month}=int($field[3]);
- #$LastUpdateLinesCorrupted{$year.$month}=int($field[4]);
- };
- next;
- }
+ if ($field[0] eq "LastUpdate") {
+ if ($LastUpdate{$year.$month} < $field[1]) {
+ $LastUpdate{$year.$month}=int($field[1]);
+ #$LastUpdateLinesRead{$year.$month}=int($field[2]);
+ #$LastUpdateNewLinesRead{$year.$month}=int($field[3]);
+ #$LastUpdateLinesCorrupted{$year.$month}=int($field[4]);
+ };
+ next;
+ }
# Following data are loaded or not depending on $part parameter
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=xxx/i)) {
- if ($field[0] eq "From0") { $_from_p[0]+=$field[1]; $_from_h[0]+=$field[2]; next; }
- if ($field[0] eq "From1") { $_from_p[1]+=$field[1]; $_from_h[1]+=$field[2]; next; }
- if ($field[0] eq "From2") { $_from_p[2]+=$field[1]; $_from_h[2]+=$field[2]; next; }
- if ($field[0] eq "From3") { $_from_p[3]+=$field[1]; $_from_h[3]+=$field[2]; next; }
- if ($field[0] eq "From4") { $_from_p[4]+=$field[1]; $_from_h[4]+=$field[2]; next; }
- if ($field[0] eq "From5") { $_from_p[5]+=$field[1]; $_from_h[5]+=$field[2]; next; }
+ if ($field[0] eq "From0") { $_from_p[0]+=$field[1]; $_from_h[0]+=$field[2]; next; }
+ if ($field[0] eq "From1") { $_from_p[1]+=$field[1]; $_from_h[1]+=$field[2]; next; }
+ if ($field[0] eq "From2") { $_from_p[2]+=$field[1]; $_from_h[2]+=$field[2]; next; }
+ if ($field[0] eq "From3") { $_from_p[3]+=$field[1]; $_from_h[3]+=$field[2]; next; }
+ if ($field[0] eq "From4") { $_from_p[4]+=$field[1]; $_from_h[4]+=$field[2]; next; }
+ if ($field[0] eq "From5") { $_from_p[5]+=$field[1]; $_from_h[5]+=$field[2]; next; }
# Next lines are to read old awstats history files ("Fromx" section was "HitFromx" in such files)
- if ($field[0] eq "HitFrom0") { $_from_p[0]+=0; $_from_h[0]+=$field[1]; next; }
- if ($field[0] eq "HitFrom1") { $_from_p[1]+=0; $_from_h[1]+=$field[1]; next; }
- if ($field[0] eq "HitFrom2") { $_from_p[2]+=0; $_from_h[2]+=$field[1]; next; }
- if ($field[0] eq "HitFrom3") { $_from_p[3]+=0; $_from_h[3]+=$field[1]; next; }
- if ($field[0] eq "HitFrom4") { $_from_p[4]+=0; $_from_h[4]+=$field[1]; next; }
- if ($field[0] eq "HitFrom5") { $_from_p[5]+=0; $_from_h[5]+=$field[1]; next; }
- }
- if ($field[0] eq "BEGIN_TIME") {
+ if ($field[0] eq "HitFrom0") { $_from_p[0]+=0; $_from_h[0]+=$field[1]; next; }
+ if ($field[0] eq "HitFrom1") { $_from_p[1]+=0; $_from_h[1]+=$field[1]; next; }
+ if ($field[0] eq "HitFrom2") { $_from_p[2]+=0; $_from_h[2]+=$field[1]; next; }
+ if ($field[0] eq "HitFrom3") { $_from_p[3]+=0; $_from_h[3]+=$field[1]; next; }
+ if ($field[0] eq "HitFrom4") { $_from_p[4]+=0; $_from_h[4]+=$field[1]; next; }
+ if ($field[0] eq "HitFrom5") { $_from_p[5]+=0; $_from_h[5]+=$field[1]; next; }
+ }
+ if ($field[0] eq "BEGIN_TIME") {
&debug(" Begin of TIME section");
$_=<HISTORY>;
chomp $_; s/\r//;
#if ($field[0]) { # This test must not be here for TIME section (because field[0] is "0" for hour 0)
$count++;
# We always read this to build the month graph (MonthPages, MonthHits, MonthBytes)
- $MonthPages{$year.$month}+=int($field[1]); $MonthHits{$year.$month}+=int($field[2]); $MonthBytes{$year.$month}+=int($field[3]);
+ $MonthPages{$year.$month}+=int($field[1]); $MonthHits{$year.$month}+=int($field[2]); $MonthBytes{$year.$month}+=int($field[3]);
if ($part) { # TODO ? used to build total
$countloaded++;
- if ($field[1]) { $_time_p[$field[0]]+=int($field[1]); }
- if ($field[2]) { $_time_h[$field[0]]+=int($field[2]); }
- if ($field[3]) { $_time_k[$field[0]]+=int($field[3]); }
+ if ($field[1]) { $_time_p[$field[0]]+=int($field[1]); }
+ if ($field[2]) { $_time_h[$field[0]]+=int($field[2]); }
+ if ($field[3]) { $_time_k[$field[0]]+=int($field[3]); }
}
#}
$_=<HISTORY>;
}
&debug(" End of TIME section ($count entries, $countloaded loaded)");
next;
- }
- if ($field[0] eq "BEGIN_DAY") {
+ }
+ if ($field[0] eq "BEGIN_DAY") {
&debug(" Begin of DAY section");
$_=<HISTORY>;
chomp $_; s/\r//;
}
&debug(" End of DAY section ($count entries, $countloaded loaded)");
next;
- }
- if ($field[0] eq "BEGIN_VISITOR") {
+ }
+ if ($field[0] eq "BEGIN_VISITOR") {
&debug(" Begin of VISITOR section");
$_=<HISTORY>;
chomp $_; s/\r//;
if ($field[0]) {
$count++;
# We always read this to build the month graph (MonthUnique, MonthHostsKnown, MonthHostsUnknown)
- if ($field[0] ne "Unknown") { # If and else is kept for backward compatibility
- if (($field[1]||0) > 0) { $MonthUnique{$year.$month}++; }
+ if ($field[0] ne "Unknown") { # If and else is kept for backward compatibility
+ if (($field[1]||0) > 0) { $MonthUnique{$year.$month}++; }
if ($field[0] !~ /^[\d]+\.[\d]+\.[\d]+\.[\d]+$/) { $MonthHostsKnown{$year.$month}++; }
else { $MonthHostsUnknown{$year.$month}++; }
}
- else {
- $MonthUnique{$year.$month}++;
- $MonthHostsUnknown{$year.$month}++;
- }
+ else {
+ $MonthUnique{$year.$month}++;
+ $MonthHostsUnknown{$year.$month}++;
+ }
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=allhosts/i || $QueryString =~ /output=lasthosts/i || $QueryString =~ /output=unknownip/i)) {
# Data required:
# update need to load all
}
if ($loadrecord) {
if ($field[1]) { $_hostmachine_p{$field[0]}+=$field[1]; }
- if ($field[2]) { $_hostmachine_h{$field[0]}+=$field[2]; }
- if ($field[3]) { $_hostmachine_k{$field[0]}+=$field[3]; }
- if (! $_hostmachine_l{$field[0]} && $field[4]) { $_hostmachine_l{$field[0]}=int($field[4]); }
+ if ($field[2]) { $_hostmachine_h{$field[0]}+=$field[2]; }
+ if ($field[3]) { $_hostmachine_k{$field[0]}+=$field[3]; }
+ if (! $_hostmachine_l{$field[0]} && $field[4]) { $_hostmachine_l{$field[0]}=int($field[4]); }
$countloaded++;
}
}
}
&debug(" End of VISITOR section ($count entries, $countloaded loaded)");
next;
- }
- if ($field[0] eq "BEGIN_LOGIN") {
+ }
+ if ($field[0] eq "BEGIN_LOGIN") {
&debug(" Begin of LOGIN section");
$_=<HISTORY>;
chomp $_; s/\r//;
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=xxx/i)) {
$countloaded++;
if ($field[1]) { $_login_p{$field[0]}+=$field[1]; }
- if ($field[2]) { $_login_h{$field[0]}+=$field[2]; }
- if ($field[3]) { $_login_k{$field[0]}+=$field[3]; }
- if (! $_login_l{$field[0]} && $field[4]) { $_login_l{$field[0]}=int($field[4]); }
+ if ($field[2]) { $_login_h{$field[0]}+=$field[2]; }
+ if ($field[3]) { $_login_k{$field[0]}+=$field[3]; }
+ if (! $_login_l{$field[0]} && $field[4]) { $_login_l{$field[0]}=int($field[4]); }
}
}
$_=<HISTORY>;
}
&debug(" End of LOGIN section ($count entries, $countloaded loaded)");
next;
- }
- if ($field[0] eq "BEGIN_DOMAIN") {
+ }
+ if ($field[0] eq "BEGIN_DOMAIN") {
&debug(" Begin of DOMAIN section");
$_=<HISTORY>;
chomp $_; s/\r//;
&debug(" End of DOMAIN section ($count entries, $countloaded loaded)");
next;
}
- if ($field[0] eq "BEGIN_BROWSER") {
+ if ($field[0] eq "BEGIN_BROWSER") {
&debug(" Begin of BROWSER section");
$_=<HISTORY>;
chomp $_; s/\r//;
$count++;
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=browserdetail/i)) {
$countloaded++;
- if ($field[1]) { $_browser_h{$field[0]}+=$field[1]; }
+ if ($field[1]) { $_browser_h{$field[0]}+=$field[1]; }
}
}
$_=<HISTORY>;
&debug(" End of BROWSER section ($count entries, $countloaded loaded)");
next;
}
- if ($field[0] eq "BEGIN_MSIEVER") {
+ if ($field[0] eq "BEGIN_MSIEVER") {
&debug(" Begin of MSIEVER section");
$_=<HISTORY>;
chomp $_; s/\r//;
$count++;
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=browserdetail/i)) {
$countloaded++;
- if ($field[1]) { $_msiever_h[$field[0]]+=$field[1]; }
+ if ($field[1]) { $_msiever_h[$field[0]]+=$field[1]; }
}
}
$_=<HISTORY>;
&debug(" End of MSIEVER section ($count entries, $countloaded loaded)");
next;
}
- if ($field[0] eq "BEGIN_NSVER") {
+ if ($field[0] eq "BEGIN_NSVER") {
&debug(" Begin of NSVER section");
$_=<HISTORY>;
chomp $_; s/\r//;
$count++;
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=browserdetail/i)) {
$countloaded++;
- if ($field[1]) { $_nsver_h[$field[0]]+=$field[1]; }
+ if ($field[1]) { $_nsver_h[$field[0]]+=$field[1]; }
}
}
$_=<HISTORY>;
&debug(" End of NSVER section ($count entries, $countloaded loaded)");
next;
}
- if ($field[0] eq "BEGIN_OS") {
+ if ($field[0] eq "BEGIN_OS") {
&debug(" Begin of OS section");
$_=<HISTORY>;
chomp $_; s/\r//;
$count++;
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=xxx/i)) {
$countloaded++;
- if ($field[1]) { $_os_h{$field[0]}+=$field[1]; }
+ if ($field[1]) { $_os_h{$field[0]}+=$field[1]; }
}
}
$_=<HISTORY>;
&debug(" End of OS section ($count entries, $countloaded loaded)");
next;
}
- if ($field[0] eq "BEGIN_UNKNOWNREFERER") {
+ if ($field[0] eq "BEGIN_UNKNOWNREFERER") {
&debug(" Begin of UNKNOWNREFERER section");
$_=<HISTORY>;
chomp $_; s/\r//;
&debug(" End of UNKNOWNREFERER section ($count entries, $countloaded loaded)");
next;
}
- if ($field[0] eq "BEGIN_UNKNOWNREFERERBROWSER") {
+ if ($field[0] eq "BEGIN_UNKNOWNREFERERBROWSER") {
&debug(" Begin of UNKNOWNREFERERBROWSER section");
$_=<HISTORY>;
chomp $_; s/\r//;
$count++;
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=unknownbrowser/i)) {
$countloaded++;
- if (! $_unknownrefererbrowser_l{$field[0]}) { $_unknownrefererbrowser_l{$field[0]}=int($field[1]); }
+ if (! $_unknownrefererbrowser_l{$field[0]}) { $_unknownrefererbrowser_l{$field[0]}=int($field[1]); }
}
}
$_=<HISTORY>;
&debug(" End of UNKNOWNREFERERBROWSER section ($count entries, $countloaded loaded)");
next;
}
- if ($field[0] eq "BEGIN_ROBOT") {
+ if ($field[0] eq "BEGIN_ROBOT") {
&debug(" Begin of ROBOT section");
$_=<HISTORY>;
chomp $_; s/\r//;
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=xxx/i)) {
$countloaded++;
if ($field[1]) { $_robot_h{$field[0]}+=$field[1]; }
- if (! $_robot_l{$field[0]}) { $_robot_l{$field[0]}=int($field[2]); }
+ if (! $_robot_l{$field[0]}) { $_robot_l{$field[0]}=int($field[2]); }
}
}
$_=<HISTORY>;
else {
if ($QueryString !~ /output=/i) {
if ($MonthRequired eq "year") { $loadrecord=1; }
- else {
+ else {
if ($countloaded < $MaxNbOfPageShown && $field[1] >= $MinHitFile) { $loadrecord=1; }
$TotalDifferentPages++;
- }
+ }
}
if ($QueryString =~ /output=urldetail/i) {
- if ($MonthRequired eq "year" ) {
+ if ($MonthRequired eq "year" ) {
if (!$URLFilter || $field[0] =~ /$URLFilter/) { $loadrecord=1; }
}
- else {
+ else {
if ((!$URLFilter || $field[0] =~ /$URLFilter/) && $field[1] >= $MinHitFile) { $loadrecord=1; }
$TotalDifferentPages++;
}
$TotalEntries+=($field[3]||0);
}
}
- if ($loadrecord) {
+ if ($loadrecord) {
if ($field[1]) { $_url_p{$field[0]}+=$field[1]; }
if ($versionmaj < 4) {
if ($field[2]) { $_url_e{$field[0]}+=$field[2]; }
$_url_k{$field[0]}=0;
}
else {
- if ($field[2]) { $_url_k{$field[0]}+=$field[2]; }
- if ($field[3]) { $_url_e{$field[0]}+=$field[3]; }
+ if ($field[2]) { $_url_k{$field[0]}+=$field[2]; }
+ if ($field[3]) { $_url_e{$field[0]}+=$field[3]; }
}
$countloaded++;
}
&debug(" End of SIDER section ($count entries, $countloaded loaded)");
next;
}
- if ($field[0] eq "BEGIN_FILETYPES") {
+ if ($field[0] eq "BEGIN_FILETYPES") {
&debug(" Begin of FILETYPES section");
$_=<HISTORY>;
chomp $_; s/\r//;
}
&debug(" End of FILETYPES section ($count entries, $countloaded loaded)");
next;
- }
- if ($field[0] eq "BEGIN_PAGEREFS") {
+ }
+ if ($field[0] eq "BEGIN_PAGEREFS") {
&debug(" Begin of PAGEREFS section");
$_=<HISTORY>;
chomp $_; s/\r//;
}
&debug(" End of PAGEREFS section ($count entries, $countloaded loaded)");
next;
- }
+ }
if ($field[0] eq "BEGIN_SEREFERRALS") {
&debug(" Begin of SEREFERRALS section");
$_=<HISTORY>;
$count++;
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=xxx/i)) {
$countloaded++;
- if ($field[1]) { $_se_referrals_h{$field[0]}+=$field[1]; }
+ if ($field[1]) { $_se_referrals_h{$field[0]}+=$field[1]; }
}
}
$_=<HISTORY>;
}
&debug(" End of SEREFERRALS section ($count entries, $countloaded loaded)");
next;
- }
- if ($field[0] eq "BEGIN_SEARCHWORDS") {
+ }
+ if ($field[0] eq "BEGIN_SEARCHWORDS") {
&debug(" Begin of SEARCHWORDS section");
$_=<HISTORY>;
chomp $_; s/\r//;
else {
if ($QueryString !~ /output=/i) {
if ($MonthRequired eq "year") { $loadrecord=1; }
- else {
+ else {
if ($countloaded < $MaxNbOfKeywordsShown && $field[1] >= $MinHitKeyword) { $loadrecord=1; }
$TotalDifferentKeyphrases++;
$TotalKeyphrases+=($field[1]||0);
- }
+ }
}
if ($QueryString =~ /output=allkeyphrases/i) {
- if ($MonthRequired eq "year" ) {
+ if ($MonthRequired eq "year" ) {
$loadrecord=1;
}
- else {
+ else {
if ($field[1] >= $MinHitKeyword) { $loadrecord=1; }
$TotalDifferentKeyphrases++;
$TotalKeyphrases+=($field[1]||0);
}
}
}
- if ($loadrecord) {
+ if ($loadrecord) {
if ($field[1]) { $_keyphrases{$field[0]}+=$field[1]; }
$countloaded++;
}
}
&debug(" End of SEARCHWORDS section ($count entries, $countloaded loaded)");
next;
- }
- if ($field[0] eq "BEGIN_ERRORS") {
+ }
+ if ($field[0] eq "BEGIN_ERRORS") {
&debug(" Begin of ERRORS section");
$_=<HISTORY>;
chomp $_; s/\r//;
$count++;
if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=xxx/i)) {
$countloaded++;
- if ($field[1]) { $_errors_h{$field[0]}+=$field[1]; }
+ if ($field[1]) { $_errors_h{$field[0]}+=$field[1]; }
}
}
$_=<HISTORY>;
&debug(" End of ERRORS section ($count entries, $countloaded loaded)");
next;
}
- if ($field[0] eq "BEGIN_SIDER_404") {
+ if ($field[0] eq "BEGIN_SIDER_404") {
&debug(" Begin of SIDER_404 section");
$_=<HISTORY>;
chomp $_; s/\r//;
# When
print HISTORYTMP "BEGIN_DAY\n";
- foreach my $key (keys %DayHits) {
- if ($key =~ /^$year$month/) { # Found a day entry of the good month
+ foreach my $key (keys %DayHits) {
+ if ($key =~ /^$year$month/) { # Found a day entry of the good month
my $page=$DayPages{$key}||0;
my $hits=$DayHits{$key}||0;
my $bytes=$DayBytes{$key}||0;
my $visits=$DayVisits{$key}||0;
my $unique=$DayUnique{$key}||"";
- print HISTORYTMP "$key $page $hits $bytes $visits $unique\n";
- next;
- }
- }
- print HISTORYTMP "END_DAY\n";
+ print HISTORYTMP "$key $page $hits $bytes $visits $unique\n";
+ next;
+ }
+ }
+ print HISTORYTMP "END_DAY\n";
print HISTORYTMP "BEGIN_TIME\n";
for (my $ix=0; $ix<=23; $ix++) { print HISTORYTMP "$ix ".int($_time_p[$ix])." ".int($_time_h[$ix])." ".int($_time_k[$ix])."\n"; next; }
print HISTORYTMP "END_TIME\n";
foreach my $key (keys %_errors_h) { print HISTORYTMP "$key $_errors_h{$key}\n"; next; }
print HISTORYTMP "END_ERRORS\n";
print HISTORYTMP "BEGIN_SIDER_404\n";
- foreach my $key (keys %_sider404_h) {
+ foreach my $key (keys %_sider404_h) {
my $newkey=$key;
my $newreferer=$_referer404_h{$key}||"";
$newreferer =~ s/\s/%20/g;
%_browser_h = %_domener_h = %_domener_k = %_domener_p = %_errors_h =
%_filetypes_h = %_filetypes_k = %_filetypes_gz_in = %_filetypes_gz_out =
%_hostmachine_h = %_hostmachine_k = %_hostmachine_l = %_hostmachine_p =
- %_keyphrases = %_os_h = %_pagesrefs_h = %_robot_h = %_robot_l =
+ %_keyphrases = %_os_h = %_pagesrefs_h = %_robot_h = %_robot_l =
%_login_h = %_login_p = %_login_k = %_login_l =
%_se_referrals_h = %_sider404_h = %_referer404_h = %_url_p = %_url_k = %_url_e =
%_unknownreferer_l = %_unknownrefererbrowser_l = ();
#--------------------------------------------------------------------
sub DecodeEncodedString {
my $stringtodecode=shift;
- $stringtodecode =~ tr/\+/ /s;
- $stringtodecode =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # Decode encoded URL
+ $stringtodecode =~ tr/\+/ /s;
+ $stringtodecode =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # Decode encoded URL
return $stringtodecode;
}
sub AddInTree {
my $keytoadd=shift;
my $keyval=shift;
- my $firstadd=shift||0;
+ my $firstadd=shift||0;
# $countaddintree++;
# if ($countaddintree % 100 == 1) { debug(" AddInTree Start of 100 (lowerval=$lowerval)",3); }
if ($firstadd==1) { # Val is the first one
if ($nextval{$valcursor}) { # keyval is beetween valcursor and nextval{valcursor}
$nextval{$keyval}=$nextval{$valcursor};
}
- $nextval{$valcursor}=$keyval;
+ $nextval{$valcursor}=$keyval;
debug(" lowerval=$lowerval, nb elem val=".(scalar keys %val).", nb elem egal=".(scalar keys %egal).".",4);
# if ($countaddintree % 100 == 0) { debug(" AddInTree End of 100",3); }
}
if ($QueryString =~ /logfile=([^\s&]+)$/i) { $LogFile=$1; }
if ($QueryString =~ /staticlinks/i) { $StaticLinks=1; }
if ($QueryString =~ /debug=(\d+)/i) { $Debug=$1; }
-if ($QueryString =~ /output=urldetail:/i) {
+if ($QueryString =~ /output=urldetail:/i) {
# A filter can be defined with output=urldetail to reduce number of lines read and showed
$URLFilter=$QueryString; $URLFilter =~ s/.*output=urldetail://; $URLFilter =~ s/&.*//; $URLFilter =~ s/ .*//;
}
if ($UpdateStats) {
if ($DNSLookup) {
- # eval { use Sockets; };
+ # eval { use Sockets; };
# if ($@){
# error("Error: The perl 'Socket' module is not installed. Install it from CPAN or use a more 'standard' perl interpreter.\n");
# }
use Socket;
}
-
+
# Init RobotsSearchIDOrder required for update process
push @RobotArrayList,"list1";
push @RobotArrayList,"list2";
}
my $SiteToAnalyzeIsInHostAliases=0;
foreach my $elem (@HostAliases) { if ($elem eq $SiteToAnalyze) { $SiteToAnalyzeIsInHostAliases=1; last; } }
- if (! $SiteToAnalyzeIsInHostAliases) {
+ if (! $SiteToAnalyzeIsInHostAliases) {
unshift @HostAliases,"$SiteToAnalyze"; # Add SiteToAnalyze at beginning of HostAliases Array
}
debug("HostAliases is now @HostAliases",2);
# Log example records
# 62.161.78.73 user - [dd/mmm/yyyy:hh:mm:ss +0000] "GET / HTTP/1.1" 200 1234 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
# my.domain.com - user [09/Jan/2001:11:38:51 -0600] "OPTIONS /mime-tmp/xxx file.doc HTTP/1.1" 408 - "-" "-"
- # 2000-07-19 14:14:14 62.161.78.73 - GET / 200 1234 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.from.com/from.htm
+ # 2000-07-19 14:14:14 62.161.78.73 - GET / 200 1234 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.from.com/from.htm
# 05/21/00 00:17:31 OK 200 212.242.30.6 Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) http://www.cover.dk/ "www.cover.dk" :Documentation:graphics:starninelogo.white.gif 1133
# Other example for error 408 with Apache
# 62.161.78.73 user - [dd/mmm/yyyy:hh:mm:ss +0000] "-" 408 - "-" "-"
$LogFormatString =~ s/%u([\s])/%logname$1/g; $LogFormatString =~ s/%u$/%logname/g;
$LogFormatString =~ s/%t([\s])/%time1$1/g; $LogFormatString =~ s/%t$/%time1/g;
$LogFormatString =~ s/\"%r\"/%methodurl/g;
- $LogFormatString =~ s/%>s/%code/g;
- $LogFormatString =~ s/%b([\s])/%bytesd$1/g; $LogFormatString =~ s/%b$/%bytesd/g;
+ $LogFormatString =~ s/%>s/%code/g;
+ $LogFormatString =~ s/%b([\s])/%bytesd$1/g; $LogFormatString =~ s/%b$/%bytesd/g;
$LogFormatString =~ s/\"%\(Referer\)i\"/%refererquot/g;
$LogFormatString =~ s/\"%\(User-Agent\)i\"/%uaquot/g;
# Replacement for a IIS and ISA format string
foreach my $f (@fields) {
my $found=0;
if ($f =~ /%host$/) {
- $found=1;
+ $found=1;
$pos_rc = $i; $i++;
$PerlParsingFormat .= "([^\\s]*) ";
}
if ($f =~ /%logname$/) {
- $found=1;
+ $found=1;
$pos_logname = $i; $i++;
$PerlParsingFormat .= "([^\\s]*) ";
}
if ($f =~ /%time1$/) {
- $found=1;
+ $found=1;
$pos_date = $i;
$i++;
#$pos_zone = $i;
$PerlParsingFormat .= "\\[([^\\s]*) ([^\\s]*)\\] ";
}
if ($f =~ /%time2$/) {
- $found=1;
+ $found=1;
$pos_date = $i;
$i++;
$PerlParsingFormat .= "([^\\s]* [^\\s]*) ";
}
if ($f =~ /%methodurl$/) {
- $found=1;
+ $found=1;
$pos_method = $i;
$i++;
$pos_url = $i;
$PerlParsingFormat .= "\\\"([^\\s]*) ([^\\s]*) [^\\\"]*\\\" ";
}
if ($f =~ /%methodurlnoprot$/) {
- $found=1;
+ $found=1;
$pos_method = $i;
$i++;
$pos_url = $i;
$PerlParsingFormat .= "\\\"([^\\s]*) ([^\\s]*)\\\" ";
}
if ($f =~ /%method$/) {
- $found=1;
+ $found=1;
$pos_method = $i;
$i++;
$PerlParsingFormat .= "([^\\s]*) ";
}
if ($f =~ /%url$/) {
- $found=1;
+ $found=1;
$pos_url = $i;
$i++;
$PerlParsingFormat .= "([^\\s]*) ";
}
if ($f =~ /%query$/) {
- $found=1;
+ $found=1;
$pos_query = $i;
$i++;
$PerlParsingFormat .= "([^\\s]*) ";
}
if ($f =~ /%code$/) {
- $found=1;
+ $found=1;
$pos_code = $i;
$i++;
$PerlParsingFormat .= "([\\d|-]*) ";
}
if ($f =~ /%bytesd$/) {
- $found=1;
+ $found=1;
$pos_size = $i; $i++;
$PerlParsingFormat .= "([\\d|-]*) ";
}
$PerlParsingFormat .= "([^\\s]*) ";
}
if ($f =~ /%uaquot$/) {
- $found=1;
+ $found=1;
$pos_agent = $i; $i++;
$PerlParsingFormat .= "\\\"([^\\\"]*)\\\" ";
}
if ($f =~ /%ua$/) {
- $found=1;
+ $found=1;
$pos_agent = $i; $i++;
$PerlParsingFormat .= "([^\\s]*) ";
}
if (! $found) { $found=1; $PerlParsingFormat .= "[^\\s]* "; }
}
# Remove last space char
- ($PerlParsingFormat) ? chop($PerlParsingFormat) : error("Error: No recognised format tag in personalised LogFormat string");
+ ($PerlParsingFormat) ? chop($PerlParsingFormat) : error("Error: No recognised format tag in personalised LogFormat string");
$lastrequiredfield=$i--;
}
if (! $pos_rc) { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%host in your LogFormat string)."); }
/^$PerlParsingFormat/;
my @field=();
foreach my $i (1..$lastrequiredfield) { $field[$i]=$$i; }
- &debug(" Record $NbOfLinesRead is ($lastrequiredfield fields read) : host=\"$field[$pos_rc]\", logname=\"$field[$pos_logname]\", date=\"$field[$pos_date]\", method=\"$field[$pos_method]\", url=\"$field[$pos_url]\", code=\"$field[$pos_code]\", size=\"$field[$pos_size]\", referer=\"$field[$pos_referer]\", agent=\"$field[$pos_agent]\"",3);
+ &debug(" Record $NbOfLinesRead is ($lastrequiredfield fields read) : host=\"$field[$pos_rc]\", logname=\"$field[$pos_logname]\", date=\"$field[$pos_date]\", method=\"$field[$pos_method]\", url=\"$field[$pos_url]\", code=\"$field[$pos_code]\", size=\"$field[$pos_size]\", referer=\"$field[$pos_referer]\", agent=\"$field[$pos_agent]\"",3);
# Check parsed parameters
#----------------------------------------------------------------------
# Check filters
#----------------------------------------------------------------------
- my $protocol=0;
+ my $protocol=0;
if ($field[$pos_method] eq 'GET' || $field[$pos_method] eq 'POST' || $field[$pos_method] =~ /OK/) {
# HTTP request. Keep only GET, POST, *OK* with Webstar but not HEAD, OPTIONS
$protocol=1;
elsif ($field[$pos_method] =~ /sent/ || $field[$pos_method] =~ /get/) {
# FTP request.
$protocol=2;
- }
+ }
if (! $protocol) { next; }
-
+
# Split DD/Month/YYYY:HH:MM:SS or YYYY-MM-DD HH:MM:SS or MM/DD/YY\tHH:MM:SS
$field[$pos_date] =~ tr/-\/ \t/::::/;
my @dateparts=split(/:/,$field[$pos_date]);
next;
} # Already processed
# We found a new line. This will stop comparison "<=" between timeconnexion and LastLine (we should have only new lines now)
- $NowNewLinePhase=1;
+ $NowNewLinePhase=1;
#GetDelaySinceStart(1);
}
$LastLine{$yearmonth} = $timeconnexion;
# TODO. Add as a robot if URL is robots.txt
-
+
if (&SkipHost($field[$pos_rc])) { next; } # Skip with some client host IP addresses
if (&SkipFile($field[$pos_url])) { next; } # Skip with some URLs
if (! &OnlyFile($field[$pos_url])) { next; } # Skip with other URLs
# Yes, a new month to process
if ($monthtoprocess > 0) {
&Save_History_File($yeartoprocess,$monthtoprocess); # We save data of current processed month
- &Init_HashArray($yeartoprocess,$monthtoprocess); # Start init for next one
+ &Init_HashArray($yeartoprocess,$monthtoprocess); # Start init for next one
}
$monthtoprocess=int($dateparts[1]);$yeartoprocess=int($dateparts[2]);
$yearmonth=sprintf("%04i%02i",$yeartoprocess,$monthtoprocess);
}
}
}
-
+
$field[$pos_agent] =~ tr/\+ /__/; # Same Agent with different writing syntax have now same name
$field[$pos_agent] =~ s/%20/_/g; # This is to support servers (like Roxen) that writes user agent with %20 in it
$UserAgent = $field[$pos_agent];
last;
}
}
- if (! $foundrobot) { # Last time, we won't search if robot or not. We know it's not.
+ if (! $foundrobot) { # Last time, we won't search if robot or not. We know it's not.
$TmpHashRobot{$UserAgent}="-";
}
}
- # If robot, we stop here
+ # If robot, we stop here
if ($TmpHashRobot{$UserAgent} ne "-") {
debug("UserAgent $UserAgent contains robot ID '$TmpHashRobot{$UserAgent}'",2);
- $_robot_h{$TmpHashRobot{$UserAgent}}++; $_robot_l{$TmpHashRobot{$UserAgent}}=$timeconnexion;
+ $_robot_h{$TmpHashRobot{$UserAgent}}++; $_robot_l{$TmpHashRobot{$UserAgent}}=$timeconnexion;
next;
}
-
+
# Canonize and clean target URL and referrer URL. Possible URL syntax for $field[$pos_url]:
# /mypage.ext?param=x#aaa
# /mypage.ext#aaa
# /
my $urlwithnoquery;
- if ($URLWithQuery) {
+ if ($URLWithQuery) {
$urlwithnoquery=$field[$pos_url];
$urlwithnoquery =~ s/\?.*//;
# We combine the URL and query strings.
&debug(" No DNS lookup asked.",3);
}
- if ($HostIsIp && ((! $TmpHashDNSLookup{$Host}) || ($TmpHashDNSLookup{$Host} eq "ip"))) {
- # Here $Host = IP address not resolved
+ if ($HostIsIp && ((! $TmpHashDNSLookup{$Host}) || ($TmpHashDNSLookup{$Host} eq "ip"))) {
+ # Here $Host = IP address not resolved
if ($PageBool) {
- if ($timeconnexion > (($_hostmachine_l{$Host}||0)+$VisitTimeOut)) {
- $MonthVisits{$yearmonth}++;
- $DayVisits{$dayconnexion}++;
+ if ($timeconnexion > (($_hostmachine_l{$Host}||0)+$VisitTimeOut)) {
+ $MonthVisits{$yearmonth}++;
+ $DayVisits{$dayconnexion}++;
if (! $_hostmachine_l{$Host}) { $MonthUnique{$yearmonth}++; }
$_url_e{$field[$pos_url]}++; # Increase 'entry' page
- }
+ }
$_hostmachine_p{$Host}++;
$_hostmachine_l{$Host}=$timeconnexion;
$_domener_p{"ip"}++;
$TmpHashBrowser{$UserAgent}="msie_$1";
}
}
-
+
# Netscape ?
if (!$found) {
if (($UserAgent =~ /mozilla/) && ($UserAgent !~ /compatible/) && ($UserAgent !~ /opera/)) {
- $_browser_h{"netscape"}++;
- if ($UserAgent =~ /\/(\d)\./) { # $1 now contains major version no
- $_nsver_h[$1]++;
- $found=1;
+ $_browser_h{"netscape"}++;
+ if ($UserAgent =~ /\/(\d)\./) { # $1 now contains major version no
+ $_nsver_h[$1]++;
+ $found=1;
$TmpHashBrowser{$UserAgent}="netscape_$1";
}
}
}
-
+
# Other ?
if (!$found) {
foreach my $key (@BrowsersSearchIDOrder) {
- if ($UserAgent =~ /$key/) {
- $_browser_h{$key}++;
- $found=1;
- $TmpHashBrowser{$UserAgent}=$key;
- last;
- }
+ if ($UserAgent =~ /$key/) {
+ $_browser_h{$key}++;
+ $found=1;
+ $TmpHashBrowser{$UserAgent}=$key;
+ last;
+ }
}
}
-
+
# Unknown browser ?
if (!$found) {
$_browser_h{"Unknown"}++;
else {
$_browser_h{"Unknown"}++;
$_os_h{"Unknown"}++;
- }
+ }
# Analyze: Referer
#-----------------
if ($field[$pos_referer]) {
# Direct ?
- if ($field[$pos_referer] eq "-") {
+ if ($field[$pos_referer] eq "-") {
if ($PageBool) { $_from_p[0]++; }
$_from_h[0]++;
$found=1;
}
- else {
+ else {
$field[$pos_referer] =~ /^(\w+):\/\/([^\/]*)\//;
my $refererprot=$1;
my $refererserver=$2;
# Kind of origin
if (!$TmpHashRefererServer{$refererserver}) {
if ($refererserver =~ /^(www\.|)$SiteToAnalyzeWithoutwww/i) {
- # Intern (This hit came from another page of the site)
+ # Intern (This hit came from another page of the site)
debug("Server $refererserver is added to TmpHashRefererServer with value '='",2);
$TmpHashRefererServer{$refererserver}="=";
$found=1;
if (! $found) {
foreach my $key (@HostAliases) {
if ($refererserver =~ /^$key/i) {
- # Intern (This hit came from another page of the site)
+ # Intern (This hit came from another page of the site)
debug("Server $refererserver is added to TmpHashRefererServer with value '='",2);
$TmpHashRefererServer{$refererserver}="=";
$found=1;
}
}
if (! $found) {
- # Extern (This hit came from an external web site).
+ # Extern (This hit came from an external web site).
# If made on each record -> -1700 rows/seconds (should be made on 10% of records only)
- foreach my $key (keys %SearchEnginesHashIDLib) {
+ foreach my $key (keys %SearchEnginesHashIDLib) {
# This hit came from the search engine $key
if ($refererserver =~ /$key/i) {
debug("Server $refererserver is added to TmpHashRefererServer with value '$key'",2);
}
}
}
-
+
if ($TmpHashRefererServer{$refererserver}) {
if ($TmpHashRefererServer{$refererserver} eq "=") {
- # Intern (This hit came from another page of the site)
+ # Intern (This hit came from another page of the site)
if ($PageBool) { $_from_p[4]++; }
- $_from_h[4]++;
- }
- else {
+ $_from_h[4]++;
+ }
+ else {
# This hit came from the search engine
if ($PageBool) { $_from_p[2]++; }
$_from_h[2]++;
$_se_referrals_h{$TmpHashRefererServer{$refererserver}}++;
$found=1;
my @refurl=split(/\?/,$field[$pos_referer],2);
- if ($refurl[1]) {
+ if ($refurl[1]) {
# Extract keywords
$refurl[1] =~ tr/A-Z/a-z/; # Full param string in lowcase
my @paramlist=split(/&/,$refurl[1]);
}
} # End of if refurl[1]
}
- } # End of if ($TmpHashRefererServer)
+ } # End of if ($TmpHashRefererServer)
else {
# This hit came from a site other than a search engine
if ($PageBool) { $_from_p[3]++; }
if (! $found && $refererprot =~ /^news/i) {
$found=1;
if ($PageBool) { $_from_p[5]++; }
- $_from_h[5]++;
+ $_from_h[5]++;
}
}
- }
+ }
# Origin not found
if (!$found) {
#---------------------------------------------------------------------
if ($HTMLOutput) {
-
+
my @filearray;
my %listofyears;
my $max_p; my $max_h; my $max_k; my $max_v;
#my $yearmin=0;
foreach my $i (0..$#filearray) {
if ("$filearray[$i]" =~ /^$PROG([\d][\d])([\d][\d][\d][\d])$FileSuffix\.txt$/) {
- $listofyears{$2}=1;
+ $listofyears{$2}=1;
#if (int("$2") < $yearmin || $yearmin == 0) { $yearmin=int("$2"); }
}
}
# Here, first part of data for processed month (old and current) are still in memory
# If a month was already processed, then $HistoryFileAlreadyRead{"MMYYYY"} value is 1
-
+
# READING NOW ALL NOT ALREADY READ HISTORY FILES FOR ALL MONTHS OF REQUIRED YEAR
#-------------------------------------------------------------------------------
# Loop on each month of year but only existing and not already read will be read by Read_History_File function
&Read_History_File($YearRequired,$monthix,0); # Read first part of history file is enough (for the month graph)
}
}
-
-
+
+
# Get the tooltips texts
&Read_Language_Tooltip($Lang);
-
+
# Position .style.pixelLeft/.pixelHeight/.pixelWidth/.pixelTop IE OK Opera OK
# .style.left/.height/.width/.top Netscape OK
# document.getElementById IE OK Opera OK Netscape OK
# tooltip.offsetWidth|tooltipOBJ.style.pixelWidth IE OK Opera OK Netscape OK Width of an object
# event.clientXY IE OK Opera OK Netscape KO Return position of mouse
print <<EOF;
-
+
<script language="javascript">
function ShowTooltip(fArg)
{
var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']");
if (tooltipOBJ != null) {
- var tooltipLft = (document.body.offsetWidth?document.body.offsetWidth:document.body.style.pixelWidth) - (tooltipOBJ.offsetWidth?tooltipOBJ.offsetWidth:(tooltipOBJ.style.pixelWidth?tooltipOBJ.style.pixelWidth:300)) - 30;
- if (navigator.appName != 'Netscape') {
+ var tooltipLft = (document.body.offsetWidth?document.body.offsetWidth:document.body.style.pixelWidth) - (tooltipOBJ.offsetWidth?tooltipOBJ.offsetWidth:(tooltipOBJ.style.pixelWidth?tooltipOBJ.style.pixelWidth:300)) - 30;
+ if (navigator.appName != 'Netscape') {
var tooltipTop = (document.body.scrollTop>=0?document.body.scrollTop+10:event.clientY+10);
if ((event.clientX > tooltipLft) && (event.clientY < (tooltipOBJ.scrollHeight?tooltipOBJ.scrollHeight:tooltipOBJ.style.pixelHeight) + 10)) {
tooltipTop = (document.body.scrollTop?document.body.scrollTop:document.body.offsetTop) + event.clientY + 20;
}
- tooltipOBJ.style.pixelLeft = tooltipLft; tooltipOBJ.style.pixelTop = tooltipTop;
+ tooltipOBJ.style.pixelLeft = tooltipLft; tooltipOBJ.style.pixelTop = tooltipTop;
}
else {
var tooltipTop = 10;
- tooltipOBJ.style.left = tooltipLft; tooltipOBJ.style.top = tooltipTop;
+ tooltipOBJ.style.left = tooltipLft; tooltipOBJ.style.top = tooltipTop;
}
- tooltipOBJ.style.visibility = "visible";
+ tooltipOBJ.style.visibility = "visible";
}
}
function HideTooltip(fArg)
{
var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']");
if (tooltipOBJ != null) {
- tooltipOBJ.style.visibility = "hidden";
+ tooltipOBJ.style.visibility = "hidden";
}
}
</script>
-
+
EOF
# Define the NewLinkParams for main chart
if ($MonthRequired eq "year") {
$firstdaytocountaverage=$YearRequired."0101"; # Set day cursor to 1st day of the required year
}
- if (($MonthRequired ne $nowmonth && $MonthRequired ne "year") || $YearRequired ne $nowyear) {
+ if (($MonthRequired ne $nowmonth && $MonthRequired ne "year") || $YearRequired ne $nowyear) {
if ($MonthRequired eq "year") {
$firstdaytocountaverage=$YearRequired."0101"; # Set day cursor to 1st day of the required year
$firstdaytoshowtime=$YearRequired."1201"; # Set day cursor to 1st day of last month of required year
if ($_url_k{$key}/($_url_p{$key}||1) > $max_k) { $max_k = $_url_k{$key}/($_url_p{$key}||1); }
}
foreach my $key (@keylist) {
- print "<TR><TD CLASS=AWL>";
+ print "<TR><TD CLASS=AWL>";
my $nompage=$Aliases{$key};
if ($nompage eq "") { $nompage=$key; }
if (length($nompage)>$MaxLengthOfURL) { $nompage=substr($nompage,0,$MaxLengthOfURL)."..."; }
- if ($ShowLinksOnUrl) { print "<A HREF=\"http://$SiteToAnalyze$key\">$nompage</A>"; }
- else { print "$nompage"; }
+ if ($ShowLinksOnUrl) { print "<A HREF=\"http://$SiteToAnalyze$key\">$nompage</A>"; }
+ else { print "$nompage"; }
my $bredde_p=0; my $bredde_e=0; my $bredde_k=0;
if ($max_p > 0) { $bredde_p=int($BarWidth*($_url_p{$key}||0)/$max_p)+1; }
&html_end;
exit(0);
}
-
+
# SUMMARY
#---------------------------------------------------------------------
if ($ShowMonthDayStats) {
}
print "</TD>";
print "<TD><b>$Message[9]</b></TD></TR>\n";
-
+
# Ratio
my $RatioVisits=0; my $RatioPages=0; my $RatioHits=0; my $RatioBytes=0;
if ($TotalUnique > 0) { $RatioVisits=int($TotalVisits/$TotalUnique*100)/100; }
if ($TotalVisits > 0) { $RatioPages=int($TotalPages/$TotalVisits*100)/100; }
if ($TotalVisits > 0) { $RatioHits=int($TotalHits/$TotalVisits*100)/100; }
if ($TotalVisits > 0) { $RatioBytes=int(($TotalBytes/1024)*100/$TotalVisits)/100; }
-
+
if ($FirstTime) { print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TD>".Format_Date($FirstTime,0)."</TD>"; }
else { print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TD>NA</TD>"; }
if ($LastTime) { print "<TD>".Format_Date($LastTime,0)."</TD></TR>\n"; }
print "<TD valign=middle onmouseover=\"ShowTooltip(18);\" onmouseout=\"HideTooltip(18);\">$Message[96]</TD>\n";
print "</TR>\n";
print "</TABLE>\n<br>\n";
-
+
print "</center></TD></TR>\n";
&tab_end;
- }
+ }
# BY DAY OF WEEK
#-------------------------
$avg_dayofweek_k[$dayofweekcursor]+=($DayBytes{$daycursor}||0);
}
for (@DOWIndex) {
- if ($avg_dayofweek_nb[$_]) {
+ if ($avg_dayofweek_nb[$_]) {
$avg_dayofweek_p[$_]=sprintf("%.2f",$avg_dayofweek_p[$_]/$avg_dayofweek_nb[$_]);
$avg_dayofweek_h[$_]=sprintf("%.2f",$avg_dayofweek_h[$_]/$avg_dayofweek_nb[$_]);
$avg_dayofweek_k[$_]=sprintf("%.2f",$avg_dayofweek_k[$_]/$avg_dayofweek_nb[$_]);
$avg_dayofweek_h[$_]="?";
$avg_dayofweek_k[$_]="?";
}
- }
- for (@DOWIndex) {
+ }
+ for (@DOWIndex) {
my $bredde_p=0; my $bredde_h=0; my $bredde_k=0;
if ($max_h > 0) { $bredde_p=int($avg_dayofweek_p[$_]/$max_h*$BarHeight/2)+1; }
if ($max_h > 0) { $bredde_h=int($avg_dayofweek_h[$_]/$max_h*$BarHeight/2)+1; }
print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=6 ALT=\"$Message[57]: $avg_dayofweek_h[$_]\" title=\"$Message[57]: $avg_dayofweek_h[$_]\">";
print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=6 ALT=\"$Message[75]: ".Format_Bytes($avg_dayofweek_k[$_])."\" title=\"$Message[75]: ".Format_Bytes($avg_dayofweek_k[$_])."\">";
print "</TD>\n";
- }
- print "</TR>\n<TR onmouseover=\"ShowTooltip(17);\" onmouseout=\"HideTooltip(17);\">\n";
- for (@DOWIndex) {
+ }
+ print "</TR>\n";
+ print "<TR width=18 onmouseover=\"ShowTooltip(17);\" onmouseout=\"HideTooltip(17);\">\n";
+ for (@DOWIndex) {
print "<TD";
if ($_ =~ /[06]/) { print " bgcolor=\"#$color_weekend\""; }
print ">".$Message[$_+84]."</TD>";
- }
+ }
print "</TR></TABLE></center></TD>";
print "</TR>\n";
&tab_end;
}
-
+
# BY HOUR
#----------------------------
if ($ShowHoursStats) {
print "<TR><TD align=center><center><TABLE><TR>\n";
$max_h=$max_k=1;
for (my $ix=0; $ix<=23; $ix++) {
- print "<TH width=16 onmouseover=\"ShowTooltip(17);\" onmouseout=\"HideTooltip(17);\">$ix</TH>\n";
+ print "<TH width=18 onmouseover=\"ShowTooltip(17);\" onmouseout=\"HideTooltip(17);\">$ix</TH>\n";
#if ($_time_p[$ix]>$max_p) { $max_p=$_time_p[$ix]; }
if ($_time_h[$ix]>$max_h) { $max_h=$_time_h[$ix]; }
if ($_time_k[$ix]>$max_k) { $max_k=$_time_k[$ix]; }
}
print "</TR>\n";
print "<TR>\n";
- for (my $ix=1; $ix<=24; $ix++) {
- my $hr=$ix; if ($hr>12) { $hr=$hr-12; }
+ for (my $ix=0; $ix<=23; $ix++) {
+ my $hr=($ix+1); if ($hr>12) { $hr=$hr-12; }
print "<TH onmouseover=\"ShowTooltip(17);\" onmouseout=\"HideTooltip(17);\"><IMG SRC=\"$DirIcons\/clock\/hr$hr.png\" width=10></TH>\n";
}
print "</TR>\n";
}
&tab_end;
}
-
+
# BY HOST/VISITOR
#--------------------------
if ($ShowHostsStats) {
print "<TR><TD CLASS=AWL><font color=blue>$Message[2]</font></TD><TD>$rest_p</TD><TD>$rest_h</TD><TD>".Format_Bytes($rest_k)."</TD><TD> </TD></TR>\n";
}
&tab_end;
- }
-
+ }
+
# BY LOGIN
#----------------------------
if ($ShowAuthenticatedUsers) {
print "<TR><TD CLASS=AWL><font color=blue>$Message[2]</font></TD><TD>$rest_p</TD><TD>$rest_h</TD><TD>".Format_Bytes($rest_k)."</TD><TD> </TD></TR>\n";
}
&tab_end;
- }
-
+ }
+
# BY ROBOTS
#----------------------------
if ($ShowRobotsStats) {
$count++;
}
&tab_end;
- }
-
+ }
+
# BY URL
#-------------------------
if ($ShowPagesStats) {
if ($_url_k{$key}/($_url_p{$key}||1) > $max_k) { $max_k = $_url_k{$key}/($_url_p{$key}||1); }
}
foreach my $key (@keylist) {
- print "<TR><TD CLASS=AWL>";
+ print "<TR><TD CLASS=AWL>";
my $nompage=$Aliases{$key}||$key;
if (length($nompage)>$MaxLengthOfURL) { $nompage=substr($nompage,0,$MaxLengthOfURL)."..."; }
- if ($ShowLinksOnUrl) {
+ if ($ShowLinksOnUrl) {
if ($key =~ /^http(s|):/i) {
# URL is url extracted from a proxy log file
print "<A HREF=\"$key\">$nompage</A>";
print "<TH bgcolor=\"#$color_k\" width=80>$Message[75]</TH>";
}
print "</TR>\n";
- my $count=0;
+ my $count=0;
foreach my $key (sort { $_filetypes_h{$b} <=> $_filetypes_h{$a} } keys (%_filetypes_h)) {
my $p=int($_filetypes_h{$key}/$Totalh*1000)/10;
if ($key eq "Unknown") {
print "<TD>$_filetypes_h{$key}</TD><TD>$p %</TD>";
if ($ShowCompressionStats) {
if ($_filetypes_gz_in{$key}) {
- my $percent=int(100*(1-$_filetypes_gz_out{$key}/$_filetypes_gz_in{$key}));
+ my $percent=int(100*(1-$_filetypes_gz_out{$key}/$_filetypes_gz_in{$key}));
printf("<TD>%s</TD><TD>%s</TD><TD>%s (%s%)</TD>",Format_Bytes($_filetypes_gz_in{$key}),Format_Bytes($_filetypes_k{$key}),Format_Bytes($_filetypes_gz_in{$key}-$_filetypes_gz_out{$key}),$percent);
}
else {
}
&tab_end;
}
-
+
# BY FILE SIZE
#-------------------------
if ($ShowFileSizesStats) {
-
+
}
-
+
# BY BROWSER
#----------------------------
if ($ShowBrowsersStats) {
my $Total=0; foreach my $key (keys %_browser_h) { $Total+=$_browser_h{$key}; }
&tab_head($Message[21],19);
print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH colspan=2>Browser</TH><TH width=80>$Message[111]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[15]</TH></TR>\n";
- my $count=0;
+ my $count=0;
foreach my $key (sort { $_browser_h{$b} <=> $_browser_h{$a} } keys (%_browser_h)) {
my $p=int($_browser_h{$key}/$Total*1000)/10;
if ($key eq "Unknown") {
$count++;
}
&tab_end;
- }
+ }
# BY OS
#----------------------------
my $Total=0; foreach my $key (keys %_os_h) { $Total+=$_os_h{$key}; }
&tab_head($Message[59],19);
print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH colspan=2>OS</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[15]</TH></TR>\n";
- my $count=0;
+ my $count=0;
foreach my $key (sort { $_os_h{$b} <=> $_os_h{$a} } keys (%_os_h)) {
my $p=int($_os_h{$key}/$Total*1000)/10;
if ($key eq "Unknown") {
$count++;
}
&tab_end;
- }
-
+ }
+
# BY REFERENCE
#---------------------------
if ($ShowOriginStats) {
#------- Referrals by search engine
print "<TR onmouseover=\"ShowTooltip(13);\" onmouseout=\"HideTooltip(13);\"><TD CLASS=AWL><b>$Message[40]</b><br>\n";
print "<TABLE>\n";
- my $count=0;
+ my $count=0;
foreach my $key (sort { $_se_referrals_h{$b} <=> $_se_referrals_h{$a} } keys (%_se_referrals_h)) {
my $newreferer=$SearchEnginesHashIDLib{$key}||$key;
print "<TR><TD CLASS=AWL>- $newreferer</TD><TD align=right> $_se_referrals_h{$key} </TD></TR>\n";
print "<TR><TD CLASS=AWL><b>$Message[42]</b></TD><TD>$_from_p[4] </TD><TD>$p_p[4] %</TD><TD>$_from_h[4] </TD><TD>$p_h[4] %</TD></TR>\n";
print "<TR><TD CLASS=AWL><b>$Message[39]</b></TD><TD>$_from_p[1] </TD><TD>$p_p[1] %</TD><TD>$_from_h[1] </TD><TD>$p_h[1] %</TD></TR>\n";
&tab_end;
- }
+ }
# BY SEARCH PHRASES
#----------------------------
print "<TD>$p %</TD></TR>\n";
}
&tab_end;
- }
+ }
# BY ERRORS
#----------------------------
}
&tab_end;
}
-
+
&html_end;
}