diff -up8rN --strip-trailing-cr original/awstats.pl custom/awstats.pl --- original/awstats.pl 2006-12-09 19:25:50.000000000 +0000 +++ custom/awstats.pl 2006-12-03 21:54:42.000000000 +0000 @@ -1,32 +1,32 @@ #!/usr/bin/perl #------------------------------------------------------------------------------ # Free realtime web server logfile analyzer to show advanced web statistics. # Works from command line or as a CGI. You must use this script as often as # necessary from your scheduler to update your statistics and from command # line or a browser to read report results. # See AWStats documentation (in docs/ directory) for all setup instructions. #------------------------------------------------------------------------------ -# $Revision: 1.885 $ - $Author: eldy $ - $Date: 2006/09/16 23:24:46 $ +# $Revision: 1.887 $ - $Author: eldy $ - $Date: 2006/11/15 22:37:40 $ require 5.005; #$|=1; #use warnings; # Must be used in test mode only. This reduce a little process speed #use diagnostics; # Must be used in test mode only. This reduce a lot of process speed use strict;no strict "refs"; use Time::Local; # use Time::Local 'timelocal_nocheck' is faster but not supported by all Time::Local modules use Socket; #------------------------------------------------------------------------------ # Defines #------------------------------------------------------------------------------ use vars qw/ $REVISION $VERSION /; -$REVISION='$Revision: 1.885 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; +$REVISION='$Revision: 1.887 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; $VERSION="6.6 (build $REVISION)"; # ----- Constants ----- use vars qw/ $DEBUGFORCED $NBOFLINESFORBENCHMARK $FRAMEWIDTH $NBOFLASTUPDATELOOKUPTOSAVE $LIMITFLUSH $NEWDAYVISITTIMEOUT $VISITTIMEOUT $NOTSORTEDRECORDTOLERANCE $WIDTHCOLICON $TOOLTIPON $lastyearbeforeupdate $lastmonthbeforeupdate $lastdaybeforeupdate $lasthourbeforeupdate $lastdatebeforeupdate @@ -132,35 +132,35 @@ $BuildHistoryFormat='text'; $ExtraTrackedRowsLimit=500; $DatabaseBreak='month'; use vars qw/ $DebugMessages $AllowToUpdateStatsFromBrowser $EnableLockForUpdate $DNSLookup $AllowAccessFromWebToAuthenticatedUsersOnly $BarHeight $BarWidth $CreateDirDataIfNotExists $KeepBackupOfHistoricFiles $NbOfLinesParsed $NbOfLinesDropped $NbOfLinesCorrupted $NbOfOldLines $NbOfNewLines $NbOfLinesShowsteps $NewLinePhase $NbOfLinesForCorruptedLog $PurgeLogFile $ArchiveLogRecords $ShowDropped $ShowCorrupted $ShowUnknownOrigin $ShowLinksToWhoIs -$ShowAuthenticatedUsers $ShowFileSizesStats $ShowScreenSizeStats $ShowSMTPErrorsStats +$ShowAuthenticatedUsers $ShowFileSizesStats $ShowScreenSizeStats $ShowWindowSizeStats $ShowSMTPErrorsStats $ShowEMailSenders $ShowEMailReceivers $ShowWormsStats $ShowClusterStats $IncludeInternalLinksInOriginSection $AuthenticatedUsersNotCaseSensitive $Expires $UpdateStats $MigrateStats $URLNotCaseSensitive $URLWithQuery $URLReferrerWithQuery $DecodeUA /; ($DebugMessages, $AllowToUpdateStatsFromBrowser, $EnableLockForUpdate, $DNSLookup, $AllowAccessFromWebToAuthenticatedUsersOnly, $BarHeight, $BarWidth, $CreateDirDataIfNotExists, $KeepBackupOfHistoricFiles, $NbOfLinesParsed, $NbOfLinesDropped, $NbOfLinesCorrupted, $NbOfOldLines, $NbOfNewLines, $NbOfLinesShowsteps, $NewLinePhase, $NbOfLinesForCorruptedLog, $PurgeLogFile, $ArchiveLogRecords, $ShowDropped, $ShowCorrupted, $ShowUnknownOrigin, $ShowLinksToWhoIs, -$ShowAuthenticatedUsers, $ShowFileSizesStats, $ShowScreenSizeStats, $ShowSMTPErrorsStats, +$ShowAuthenticatedUsers, $ShowFileSizesStats, $ShowScreenSizeStats, $ShowWindowSizeStats, $ShowSMTPErrorsStats, $ShowEMailSenders, $ShowEMailReceivers, $ShowWormsStats, $ShowClusterStats, $IncludeInternalLinksInOriginSection, $AuthenticatedUsersNotCaseSensitive, $Expires, $UpdateStats, $MigrateStats, $URLNotCaseSensitive, $URLWithQuery, $URLReferrerWithQuery, $DecodeUA)= -(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,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,0,0,0,0,0,0,0,0,0); use vars qw/ $DetailedReportsOnNewWindows $FirstDayOfWeek $KeyWordsNotSensitive $SaveDatabaseFilesWithPermissionsForEveryone $WarningMessages $ShowLinksOnUrl $UseFramesWhenCGI $ShowMenu $ShowSummary $ShowMonthStats $ShowDaysOfMonthStats $ShowDaysOfWeekStats $ShowHoursStats $ShowDomainsStats $ShowHostsStats $ShowRobotsStats $ShowSessionsStats $ShowPagesStats $ShowFileTypesStats $ShowOSStats $ShowBrowsersStats $ShowOriginStats @@ -172,17 +172,17 @@ $FirstDayOfWeek, $KeyWordsNotSensitive, $WarningMessages, $ShowLinksOnUrl, $UseFramesWhenCGI, $ShowMenu, $ShowSummary, $ShowMonthStats, $ShowDaysOfMonthStats, $ShowDaysOfWeekStats, $ShowHoursStats, $ShowDomainsStats, $ShowHostsStats, $ShowRobotsStats, $ShowSessionsStats, $ShowPagesStats, $ShowFileTypesStats, $ShowOSStats, $ShowBrowsersStats, $ShowOriginStats, $ShowKeyphrasesStats, $ShowKeywordsStats, $ShowMiscStats, $ShowHTTPErrorsStats, $AddDataArrayMonthStats, $AddDataArrayShowDaysOfMonthStats, $AddDataArrayShowDaysOfWeekStats, $AddDataArrayShowHoursStats )= -(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); +(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); use vars qw/ $AllowFullYearView $LevelForRobotsDetection $LevelForWormsDetection $LevelForBrowsersDetection $LevelForOSDetection $LevelForRefererAnalyze $LevelForFileTypesDetection $LevelForSearchEnginesDetection $LevelForKeywordsDetection /; ($AllowFullYearView, $LevelForRobotsDetection, $LevelForWormsDetection, $LevelForBrowsersDetection, $LevelForOSDetection, $LevelForRefererAnalyze, $LevelForFileTypesDetection, $LevelForSearchEnginesDetection, $LevelForKeywordsDetection)= @@ -235,20 +235,19 @@ use vars qw/ @URLWithQueryWithOnly @URLWithQueryWithout @ExtraName @ExtraCondition @ExtraStatTypes @MaxNbOfExtra @MinHitExtra @ExtraFirstColumnTitle @ExtraFirstColumnValues @ExtraFirstColumnFunction @ExtraFirstColumnFormat @ExtraCodeFilter @ExtraConditionType @ExtraConditionTypeVal @ExtraFirstColumnValuesType @ExtraFirstColumnValuesTypeVal @ExtraAddAverageRow @ExtraAddSumRow @PluginsToLoad /; -@MiscListOrder=('AddToFavourites','JavascriptDisabled','JavaEnabled','DirectorSupport','FlashSupport','RealPlayerSupport','QuickTimeSupport','WindowsMediaPlayerSupport','PDFSupport'); -%MiscListCalc=('TotalMisc'=>'','AddToFavourites'=>'u','JavascriptDisabled'=>'hm','JavaEnabled'=>'hm','DirectorSupport'=>'hm','FlashSupport'=>'hm','RealPlayerSupport'=>'hm','QuickTimeSupport'=>'hm','WindowsMediaPlayerSupport'=>'hm','PDFSupport'=>'hm'); +@MiscListOrder=('AddToFavourites','NoJavaScript','JavaEnabled','SVGSupport','DirectorSupport','FlashSupport','RealPlayerSupport','QuickTimeSupport','WindowsMediaPlayerSupport','PDFSupport'); %MiscListCalc=('TotalMisc'=>'','AddToFavourites'=>'u','NoJavaScript'=>'hm','JavaEnabled'=>'hm','SVGSupport'=>'hm','DirectorSupport'=>'hm','FlashSupport'=>'hm','RealPlayerSupport'=>'hm','QuickTimeSupport'=>'hm','WindowsMediaPlayerSupport'=>'hm','PDFSupport'=>'hm'); %OSFamily=('win'=>'Windows','mac'=>'Macintosh','linux'=>'Linux','bsd'=>'BSD'); -%BrowsersFamily=('msie'=>1,'firefox'=>2,'netscape'=>3,'svn'=>4); +%BrowsersFamily=('msie'=>1,'firefox'=>2,'safari'=>3,'opera'=>4,'netscape'=>5,'mozilla'=>6,'svn'=>7); @SessionsRange=('0s-30s','30s-2mn','2mn-5mn','5mn-15mn','15mn-30mn','30mn-1h','1h+'); %SessionsAverage=('0s-30s',15,'30s-2mn',75,'2mn-5mn',210,'5mn-15mn',600,'15mn-30mn',1350,'30mn-1h',2700,'1h+',3600); # HTTP-Accept or Lang parameter => AWStats code to use for lang # ISO-639-1 or 2 or other => awstats-xx.txt where xx is ISO-639-1 %LangBrowserToLangAwstats=( 'sq'=>'al','ar'=>'ar','ba'=>'ba','bg'=>'bg','zh-tw'=>'tw','zh'=>'cn','cs'=>'cz', 'de'=>'de','da'=>'dk', 'en'=>'en','et'=>'et','fi'=>'fi','fr'=>'fr','gl'=>'gl', @@ -317,17 +316,17 @@ use vars qw/ %MonthPages %MonthHits %MonthBytes %MonthNotViewedPages %MonthNotViewedHits %MonthNotViewedBytes %_session %_browser_h %_domener_p %_domener_h %_domener_k %_errors_h %_errors_k %_filetypes_h %_filetypes_k %_filetypes_gz_in %_filetypes_gz_out %_host_p %_host_h %_host_k %_host_l %_host_s %_host_u %_waithost_e %_waithost_l %_waithost_s %_waithost_u %_keyphrases %_keywords %_os_h %_pagesrefs_p %_pagesrefs_h %_robot_h %_robot_k %_robot_l %_robot_r -%_worm_h %_worm_k %_worm_l %_login_h %_login_p %_login_k %_login_l %_screensize_h +%_worm_h %_worm_k %_worm_l %_login_h %_login_p %_login_k %_login_l %_screensize_h %_windowsize_h %_misc_p %_misc_h %_misc_k %_cluster_p %_cluster_h %_cluster_k %_se_referrals_p %_se_referrals_h %_sider404_h %_referer404_h %_url_p %_url_k %_url_e %_url_x %_unknownreferer_l %_unknownrefererbrowser_l %_emails_h %_emails_k %_emails_l %_emailr_h %_emailr_k %_emailr_l /; &Init_HashArray(); # ---------- Init Regex -------- @@ -487,18 +486,18 @@ use vars qw/ @Message /; 'Screen sizes', 'Worm/Virus attacks', 'Add to favorites (estimated)', 'Days of month', 'Miscellaneous', 'Browsers with Java support', 'Browsers with Macromedia Director Support', 'Browsers with Flash Support', -'Browsers with Real audio playing support', -'Browsers with Quictime audio playing support', +'Browsers with RealMedia playing support', +'Browsers with Quicktime audio playing support', 'Browsers with Windows Media audio playing support', 'Browsers with PDF support', 'SMTP Error codes', 'Countries', 'Mails', 'Size', 'First', 'Last', @@ -516,17 +515,19 @@ use vars qw/ @Message /; 'different worms', 'Mails successfully sent', 'Mails failed/refused', 'Sensitive targets', 'Javascript disabled', 'Created by', 'plugins', 'Regions', -'Cities' +'Cities', +'Window sizes', +'Browsers with SVG support' ); #------------------------------------------------------------------------------ # Functions #------------------------------------------------------------------------------ @@ -887,20 +888,20 @@ sub error { # Parameters: $message # Input: $HeaderHTTPSent $HeaderHTMLSent $WarningMessage %HTMLOutput # Output: None # Return: None #------------------------------------------------------------------------------ sub warning { my $messagestring=shift; - if (! $HeaderHTTPSent && $ENV{'GATEWAY_INTERFACE'}) { http_head(); } - if (! $HeaderHTMLSent) { html_head(); } if ($Debug) { debug("$messagestring",1); } if ($WarningMessages) { + if (! $HeaderHTTPSent && $ENV{'GATEWAY_INTERFACE'}) { http_head(); } + if (! $HeaderHTMLSent) { html_head(); } if (scalar keys %HTMLOutput) { $messagestring =~ s/\n/\/g; print "$messagestring
\n"; } else { print "$messagestring\n"; } } @@ -1455,17 +1456,17 @@ sub Read_Ref_Data { if (! $FilePath{$file}) { my $filetext=$file; $filetext =~ s/\.pm$//; $filetext =~ s/_/ /g; warning("Warning: Can't read file \"$file\" ($filetext detection will not work correctly).\nCheck if file is in \"".($PossibleLibDir[0])."\" directory and is readable."); } } # Sanity check (if loaded) if ((scalar keys %OSHashID) && @OSSearchIDOrder != scalar keys %OSHashID) { error("Not same number of records of OSSearchIDOrder (".(@OSSearchIDOrder)." entries) and OSHashID (".(scalar keys %OSHashID)." entries) in OS database. Check your file ".$FilePath{"operating_systems.pm"}); } if ((scalar keys %SearchEnginesHashID) && (@SearchEnginesSearchIDOrder_list1+@SearchEnginesSearchIDOrder_list2+@SearchEnginesSearchIDOrder_listgen) != scalar keys %SearchEnginesHashID) { error("Not same number of records of SearchEnginesSearchIDOrder_listx (total is ".(@SearchEnginesSearchIDOrder_list1+@SearchEnginesSearchIDOrder_list2+@SearchEnginesSearchIDOrder_listgen)." entries) and SearchEnginesHashID (".(scalar keys %SearchEnginesHashID)." entries) in Search Engines database. Check your file ".$FilePath{"search_engines.pm"}." is up to date."); } - if ((scalar keys %BrowsersHashIDLib) && @BrowsersSearchIDOrder != (scalar keys %BrowsersHashIDLib) - 4) { error("Not same number of records of BrowsersSearchIDOrder (".(@BrowsersSearchIDOrder)." entries) and BrowsersHashIDLib (".((scalar keys %BrowsersHashIDLib) - 4)." entries without msie,netscape,firefox,svn) in Browsers database. May be you updated AWStats without updating browsers.pm file or you made changed into browsers.pm not correctly. Check your file ".$FilePath{"browsers.pm"}." is up to date."); } + if ((scalar keys %BrowsersHashIDLib) && @BrowsersSearchIDOrder != (scalar keys %BrowsersHashIDLib) - 7) { error("Not same number of records of BrowsersSearchIDOrder (".(@BrowsersSearchIDOrder)." entries) and BrowsersHashIDLib (".((scalar keys %BrowsersHashIDLib) - 7)." entries without msie,netscape,firefox,safari,opera,mozilla,svn) in Browsers database. May be you updated AWStats without updating browsers.pm file or you made changed into browsers.pm not correctly. Check your file ".$FilePath{"browsers.pm"}." is up to date."); } if ((scalar keys %RobotsHashIDLib) && (@RobotsSearchIDOrder_list1+@RobotsSearchIDOrder_list2+@RobotsSearchIDOrder_listgen) != (scalar keys %RobotsHashIDLib) - 1) { error("Not same number of records of RobotsSearchIDOrder_listx (total is ".(@RobotsSearchIDOrder_list1+@RobotsSearchIDOrder_list2+@RobotsSearchIDOrder_listgen)." entries) and RobotsHashIDLib (".((scalar keys %RobotsHashIDLib) - 1)." entries without 'unknown') in Robots database. Check your file ".$FilePath{"robots.pm"}." is up to date."); } } #------------------------------------------------------------------------------ # Function: Get the messages for a specified language # Parameters: LanguageId # Input: $DirLang $DIR @@ -1711,34 +1712,35 @@ sub Check_Config { if ($ShowEMailReceivers !~ /[01HBML]/) { $ShowEMailReceivers=0; } if ($ShowSessionsStats !~ /[01]/) { $ShowSessionsStats=1; } if ($ShowPagesStats !~ /[01PBEX]/i) { $ShowPagesStats='PBEX'; } if ($ShowFileTypesStats !~ /[01HBC]/) { $ShowFileTypesStats='HB'; } if ($ShowFileSizesStats !~ /[01]/) { $ShowFileSizesStats=1; } if ($ShowOSStats !~ /[01]/) { $ShowOSStats=1; } if ($ShowBrowsersStats !~ /[01]/) { $ShowBrowsersStats=1; } if ($ShowScreenSizeStats !~ /[01]/) { $ShowScreenSizeStats=0; } + if ($ShowWindowSizeStats !~ /[01]/) { $ShowScreenSizeStats=0; } if ($ShowOriginStats !~ /[01PH]/) { $ShowOriginStats='PH'; } if ($ShowKeyphrasesStats !~ /[01]/) { $ShowKeyphrasesStats=1; } if ($ShowKeywordsStats !~ /[01]/) { $ShowKeywordsStats=1; } if ($ShowClusterStats !~ /[01PHB]/) { $ShowClusterStats=0; } - if ($ShowMiscStats !~ /[01anjdfrqwp]/) { $ShowMiscStats='a'; } + if ($ShowMiscStats !~ /[01anjsdfrqwp]/) { $ShowMiscStats='a'; } if ($ShowHTTPErrorsStats !~ /[01]/) { $ShowHTTPErrorsStats=1; } if ($ShowSMTPErrorsStats !~ /[01]/) { $ShowSMTPErrorsStats=0; } if ($AddDataArrayMonthStats !~ /[01]/) { $AddDataArrayMonthStats=1; } if ($AddDataArrayShowDaysOfMonthStats !~ /[01]/) { $AddDataArrayShowDaysOfMonthStats=1; } if ($AddDataArrayShowDaysOfWeekStats !~ /[01]/) { $AddDataArrayShowDaysOfWeekStats=1; } if ($AddDataArrayShowHoursStats !~ /[01]/) { $AddDataArrayShowHoursStats=1; } - my @maxnboflist=('Domain','HostsShown','LoginShown','RobotShown','WormsShown','PageShown','OsShown','BrowsersShown','ScreenSizesShown','RefererShown','KeyphrasesShown','KeywordsShown','EMailsShown'); - my @maxnboflistdefaultval=(10,10,10,10,5,10,10,10,5,10,10,10,20); + my @maxnboflist=('Domain','HostsShown','LoginShown','RobotShown','WormsShown','PageShown','OsShown','BrowsersShown','ScreenSizesShown','WindowSizesShown','RefererShown','KeyphrasesShown','KeywordsShown','EMailsShown'); + my @maxnboflistdefaultval=(10,10,10,10,5,10,10,10,5,5,10,10,10,20); foreach my $i (0..(@maxnboflist-1)) { if (! $MaxNbOf{$maxnboflist[$i]} || $MaxNbOf{$maxnboflist[$i]} !~ /^\d+$/ || $MaxNbOf{$maxnboflist[$i]}<1) { $MaxNbOf{$maxnboflist[$i]}=$maxnboflistdefaultval[$i]; } } - my @minhitlist=('Domain','Host','Login','Robot','Worm','File','Os','Browser','ScreenSize','Refer','Keyphrase','Keyword','EMail'); - my @minhitlistdefaultval=(1,1,1,1,1,1,1,1,1,1,1,1,1); + my @minhitlist=('Domain','Host','Login','Robot','Worm','File','Os','Browser','ScreenSize','WindowSize','Refer','Keyphrase','Keyword','EMail'); + my @minhitlistdefaultval=(1,1,1,1,1,1,1,1,1,1,1,1,1,1); foreach my $i (0..(@minhitlist-1)) { if (! $MinHit{$minhitlist[$i]} || $MinHit{$minhitlist[$i]} !~ /^\d+$/ || $MinHit{$minhitlist[$i]}<1) { $MinHit{$minhitlist[$i]}=$minhitlistdefaultval[$i]; } } if ($FirstDayOfWeek !~ /[01]/) { $FirstDayOfWeek=1; } if ($UseFramesWhenCGI !~ /[01]/) { $UseFramesWhenCGI=1; } if ($DetailedReportsOnNewWindows !~ /[012]/) { $DetailedReportsOnNewWindows=1; } if ($ShowLinksOnUrl !~ /[01]/) { $ShowLinksOnUrl=1; } if ($MaxLengthOfShownURL !~ /^\d+/ || $MaxLengthOfShownURL<1) { $MaxLengthOfShownURL=64; } @@ -1782,17 +1784,17 @@ sub Check_Config { if ($ShowEMailReceivers eq '1') { $ShowEMailReceivers = 'HBML'; } if ($ShowAuthenticatedUsers eq '1') { $ShowAuthenticatedUsers = 'PHBL'; } if ($ShowRobotsStats eq '1') { $ShowRobotsStats = 'HBL'; } if ($ShowWormsStats eq '1') { $ShowWormsStats = 'HBL'; } if ($ShowPagesStats eq '1') { $ShowPagesStats = 'PBEX'; } if ($ShowFileTypesStats eq '1') { $ShowFileTypesStats = 'HB'; } if ($ShowOriginStats eq '1') { $ShowOriginStats = 'PH'; } if ($ShowClusterStats eq '1') { $ShowClusterStats = 'PHB'; } - if ($ShowMiscStats eq '1') { $ShowMiscStats = 'anjdfrqwp'; } + if ($ShowMiscStats eq '1') { $ShowMiscStats = 'anjsdfrqwp'; } # Convert extra sections data into @ExtraConditionType, @ExtraConditionTypeVal... foreach my $extranum (1..@ExtraName-1) { my $part=0; foreach my $conditioncouple (split(/\s*\|\|\s*/, $ExtraCondition[$extranum])) { my ($conditiontype, $conditiontypeval)=split(/[,:]/,$conditioncouple,2); $ExtraConditionType[$extranum][$part]=$conditiontype; if ($conditiontypeval =~ /^REGEX\[(.*)\]$/i) { $conditiontypeval=$1; } @@ -2050,20 +2052,20 @@ sub Read_History_With_TmpUpdate { my $lastlinenb=shift||0; my $lastlineoffset=shift||0; my $lastlinechecksum=shift||0; my %allsections=('general'=>1,'misc'=>2,'time'=>3,'visitor'=>4,'day'=>5, 'domain'=>6,'cluster'=>7,'login'=>8,'robot'=>9,'worms'=>10,'emailsender'=>11,'emailreceiver'=>12, 'session'=>13,'sider'=>14,'filetypes'=>15, - 'os'=>16,'browser'=>17,'screensize'=>18,'unknownreferer'=>19,'unknownrefererbrowser'=>20, - 'origin'=>21,'sereferrals'=>22,'pagerefs'=>23, - 'searchwords'=>24,'keywords'=>25, - 'errors'=>26); + 'os'=>16,'browser'=>17,'screensize'=>18,'windowsize'=>19,'unknownreferer'=>20,'unknownrefererbrowser'=>21, + 'origin'=>22,'sereferrals'=>23,'pagerefs'=>24, + 'searchwords'=>25,'keywords'=>26, + 'errors'=>27); my $order=(scalar keys %allsections)+1; foreach (keys %TrapInfosForHTTPErrorCodes) { $allsections{"sider_$_"}=$order++; } foreach (1..@ExtraName-1) { $allsections{"extra_$_"}=$order++; } foreach (keys %{$PluginsLoaded{'SectionInitHashArray'}}) { $allsections{"plugin_$_"}=$order++; } my $withread=0; # Variable used to read old format history files @@ -2092,16 +2094,17 @@ sub Read_History_With_TmpUpdate { if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowSessionsStats) || $HTMLOutput{'sessions'}) { $SectionsToLoad{'session'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowPagesStats) || $HTMLOutput{'urldetail'} || $HTMLOutput{'urlentry'} || $HTMLOutput{'urlexit'}) { $SectionsToLoad{'sider'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowFileTypesStats) || $HTMLOutput{'filetypes'}) { $SectionsToLoad{'filetypes'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowOSStats) || $HTMLOutput{'osdetail'}) { $SectionsToLoad{'os'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowBrowsersStats) || $HTMLOutput{'browserdetail'}) { $SectionsToLoad{'browser'}=$order++; } if ($UpdateStats || $MigrateStats || $HTMLOutput{'unknownos'}) { $SectionsToLoad{'unknownreferer'}=$order++; } if ($UpdateStats || $MigrateStats || $HTMLOutput{'unknownbrowser'}) { $SectionsToLoad{'unknownrefererbrowser'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowScreenSizeStats)) { $SectionsToLoad{'screensize'}=$order++; } + if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowWindowSizeStats)) { $SectionsToLoad{'windowsize'}=$order++; } # Referers if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowOriginStats) || $HTMLOutput{'origin'}) { $SectionsToLoad{'origin'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowOriginStats) || $HTMLOutput{'refererse'}) { $SectionsToLoad{'sereferrals'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowOriginStats) || $HTMLOutput{'refererpages'}) { $SectionsToLoad{'pagerefs'}=$order++; } if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowKeyphrasesStats) || $HTMLOutput{'keyphrases'} || $HTMLOutput{'keywords'}) { $SectionsToLoad{'searchwords'}=$order++; } if (! $withupdate && $HTMLOutput{'main'} && $ShowKeywordsStats) { $SectionsToLoad{'keywords'}=$order++; } # If we update, dont need to load # Others if ($UpdateStats || $MigrateStats || ($HTMLOutput{'main'} && $ShowMiscStats)) { $SectionsToLoad{'misc'}=$order++; } @@ -2790,16 +2793,44 @@ sub Read_History_With_TmpUpdate { delete $SectionsToLoad{'screensize'}; if ($SectionsToSave{'screensize'}) { Save_History('screensize',$year,$month,$date); delete $SectionsToSave{'screensize'}; if ($withpurge) { %_screensize_h=(); } } if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } next; } + # BEGIN_WINDOWSIZE + if ($field[0] eq 'BEGIN_WINDOWSIZE') { + if ($Debug) { debug(" Begin of WINDOWSIZE section"); } + $field[0]=''; + my $count=0;my $countloaded=0; + do { + if ($field[0]) { + $count++; + if ($SectionsToLoad{'windowsize'}) { + $countloaded++; + if ($field[1]) { $_windowsize_h{$field[0]}+=$field[1]; } + } + } + $_=; + chomp $_; s/\r//; + @field=split(/\s+/,($readxml?CleanFromTags($_):$_)); $countlines++; + } + until ($field[0] eq 'END_WINDOWSIZE' || $field[0] eq "${xmleb}END_WINDOWSIZE" || ! $_); + if ($field[0] ne 'END_WINDOWSIZE' && $field[0] ne "${xmleb}END_WINDOWSIZE") { error("History file \"$filetoread\" is corrupted (End of section WINDOWSIZE not found).\nRestore a recent backup of this file (data for this month will be restored to backup date), remove it (data for month will be lost), or remove the corrupted section in file (data for at least this section will be lost).","","",1); } + if ($Debug) { debug(" End of WINDOWSIZE section ($count entries, $countloaded loaded)"); } + delete $SectionsToLoad{'windowsize'}; + if ($SectionsToSave{'windowsize'}) { + Save_History('windowsize',$year,$month,$date); delete $SectionsToSave{'windowsize'}; + if ($withpurge) { %_windowsize_h=(); } + } + if (! scalar %SectionsToLoad) { debug(" Stop reading history file. Got all we need."); last; } + next; + } # BEGIN_ROBOT if ($field[0] eq 'BEGIN_ROBOT') { if ($Debug) { debug(" Begin of ROBOT section"); } $field[0]=''; my $count=0;my $countloaded=0; do { if ($field[0]) { $count++; @@ -3485,16 +3516,17 @@ sub Save_History { print HISTORYTMP "${xmlrb}POS_EMAILRECEIVER${xmlrs}";$PosInFile{"emailreceiver"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; # Navigation print HISTORYTMP "${xmlrb}POS_SESSION${xmlrs}";$PosInFile{"session"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_SIDER${xmlrs}";$PosInFile{"sider"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_FILETYPES${xmlrs}";$PosInFile{"filetypes"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_OS${xmlrs}";$PosInFile{"os"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_BROWSER${xmlrs}";$PosInFile{"browser"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_SCREENSIZE${xmlrs}";$PosInFile{"screensize"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; + print HISTORYTMP "${xmlrb}POS_WINDOWSIZE${xmlrs}";$PosInFile{"windowsize"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_UNKNOWNREFERER${xmlrs}";$PosInFile{'unknownreferer'}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_UNKNOWNREFERERBROWSER${xmlrs}";$PosInFile{'unknownrefererbrowser'}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; # Referers print HISTORYTMP "${xmlrb}POS_ORIGIN${xmlrs}";$PosInFile{"origin"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_SEREFERRALS${xmlrs}";$PosInFile{"sereferrals"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_PAGEREFS${xmlrs}";$PosInFile{"pagerefs"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_SEARCHWORDS${xmlrs}";$PosInFile{"searchwords"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; print HISTORYTMP "${xmlrb}POS_KEYWORDS${xmlrs}";$PosInFile{"keywords"}=tell HISTORYTMP;print HISTORYTMP "$spacebar${xmlre}\n"; @@ -3839,16 +3871,17 @@ sub Save_History { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
\n"; } print HISTORYTMP "# Screen size - Hits\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_SCREENSIZE${xmlbs}".(scalar keys %_screensize_h)."${xmlbe}\n"; foreach (keys %_screensize_h) { print HISTORYTMP "${xmlrb}$_${xmlrs}$_screensize_h{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_SCREENSIZE${xmlee}\n"; } + if ($sectiontosave eq 'windowsize') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
\n"; } print HISTORYTMP "# Window size - Hits\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_WINDOWSIZE${xmlbs}".(scalar keys %_windowsize_h)."${xmlbe}\n"; foreach (keys %_windowsize_h) { print HISTORYTMP "${xmlrb}$_${xmlrs}$_windowsize_h{$_}${xmlre}\n"; } print HISTORYTMP "${xmleb}END_WINDOWSIZE${xmlee}\n"; } # Referer if ($sectiontosave eq 'unknownreferer') { print HISTORYTMP "\n"; if ($xml) { print HISTORYTMP "
\n"; } print HISTORYTMP "# Unknown referer OS - Last visit date\n"; $ValueInFile{$sectiontosave}=tell HISTORYTMP; print HISTORYTMP "${xmlbb}BEGIN_UNKNOWNREFERER${xmlbs}".(scalar keys %_unknownreferer_l)."${xmlbe}\n"; @@ -4266,17 +4299,17 @@ sub Init_HashArray { for (my $ix=0; $ix<24; $ix++) { $_time_h[$ix]=0; $_time_k[$ix]=0; $_time_p[$ix]=0; $_time_nv_h[$ix]=0; $_time_nv_k[$ix]=0; $_time_nv_p[$ix]=0; } # Reset all hash arrays with name beginning by _ %_session = %_browser_h = (); %_domener_p = %_domener_h = %_domener_k = %_errors_h = %_errors_k = (); %_filetypes_h = %_filetypes_k = %_filetypes_gz_in = %_filetypes_gz_out = (); %_host_p = %_host_h = %_host_k = %_host_l = %_host_s = %_host_u = (); %_waithost_e = %_waithost_l = %_waithost_s = %_waithost_u = (); %_keyphrases = %_keywords = %_os_h = %_pagesrefs_p = %_pagesrefs_h = %_robot_h = %_robot_k = %_robot_l = %_robot_r = (); - %_worm_h = %_worm_k = %_worm_l = %_login_p = %_login_h = %_login_k = %_login_l = %_screensize_h = (); + %_worm_h = %_worm_k = %_worm_l = %_login_p = %_login_h = %_login_k = %_login_l = %_screensize_h = %_windowsize_h = (); %_misc_p = %_misc_h = %_misc_k = (); %_cluster_p = %_cluster_h = %_cluster_k = (); %_se_referrals_p = %_se_referrals_h = %_sider404_h = %_referer404_h = %_url_p = %_url_k = %_url_e = %_url_x = (); %_unknownreferer_l = %_unknownrefererbrowser_l = (); %_emails_h = %_emails_k = %_emails_l = %_emailr_h = %_emailr_k = %_emailr_l = (); for (my $ix=1; $ix < @ExtraName; $ix++) { %{'_section_' . $ix . '_h'} = %{'_section_' . $ix . '_o'} = %{'_section_' . $ix . '_k'} = %{'_section_' . $ix . '_l'} = %{'_section_' . $ix . '_p'} = (); @@ -5662,17 +5695,17 @@ if ($Debug) { if ($ENV{'AWSTATS_CONFIG'}) { $ENV{'AWSTATS_FORCE_CONFIG'}=$ENV{'AWSTATS_CONFIG'}; } # For backward compatibility if ($ENV{'AWSTATS_FORCE_CONFIG'}) { if ($Debug) { debug("AWSTATS_FORCE_CONFIG parameter is defined to '".$ENV{'AWSTATS_FORCE_CONFIG'}."'. $PROG will use this as config value."); } $SiteConfig=&Sanitize($ENV{'AWSTATS_FORCE_CONFIG'}); } if ((! $ENV{'GATEWAY_INTERFACE'}) && (! $SiteConfig)) { &Read_Ref_Data('browsers','domains','operating_systems','robots','search_engines','worms'); - print "----- $PROG $VERSION (c) 2000-2005 Laurent Destailleur -----\n"; + print "----- $PROG $VERSION (c) 2000-2006 Laurent Destailleur -----\n"; print "AWStats is a free web server logfile analyzer to show you advanced web\n"; print "statistics.\n"; print "AWStats comes with ABSOLUTELY NO WARRANTY. It's a free software distributed\n"; print "with a GNU General Public License (See LICENSE file for details).\n"; print "\n"; print "Syntax: $PROG.$Extension -config=virtualhostname [options]\n"; print "\n"; print " This runs $PROG in command line to update statistics of a web site, from\n"; @@ -6147,23 +6180,28 @@ if ($UpdateStats && $FrameName ne 'index my $regtruncanchor=qr/#(\w*)$/; my $regtruncurl=qr/([$URLQuerySeparators])(.*)$/; my $regext=qr/\.(\w{1,6})$/; my $regdefault; if ($URLNotCaseSensitive) { $regdefault=qr/$defquoted$/i; } else { $regdefault=qr/$defquoted$/; } my $regipv4=qr/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; my $regipv6=qr/^[0-9A-F]*:/i; - my $regvermsie=qr/msie([+_ ]|)([\d\.]*)/i; + my $regvermsie=qr/msie([+_ ]|)([\d\.ab]+)/i; my $regvernetscape=qr/netscape.?\/([\d\.]*)/i; - my $regverfirefox=qr/firefox\/([\d\.]*)/i; + my $regverfirefox=qr/(?:firefox|minefield|bonecho|firebird|phoenix|lightningdog|superzebra|thunderbadger)\/(\d[\d\.+abcpre]*)/i; my $regversvn=qr/svn\/([\d\.]*)/i; - my $regvermozilla=qr/mozilla(\/|)([\d\.]*)/i; + my $regvermozilla=qr/mozilla(\/|)([0-4][\d\.]*)/i; + my $regvermozillagecko=qr/rv:([\d\.abcpre]*)/i; + my $regveropera=qr/opera.([\d\.]*)/i; + my $regversafari=qr/safari\/([\d\.]*)/i; my $regnotie=qr/webtv|omniweb|opera/i; - my $regnotnetscape=qr/gecko|compatible|opera|galeon|safari/i; + my $regnotfirefox=qr/flock/i; my $regnotnetscape=qr/gecko|like|compatible|opera|camino|chimira|galeon|safari|java/i; + my $regnotmozilla=qr/like|compatible|opera|camino|chimira|galeon|safari|java/i; + my $regnotmozillagecko=qr/poe|(gecko\/\d{8}\s(?!debian|mnenhy|fedora|red hat|firefox|centos|linspire|unofficial|mitll|cs 2000|\(no idn\))\S)/i; my $regreferer=qr/^(\w+):\/\/([^\/:]+)(:\d+|)/; my $regreferernoquery=qr/^([^$URLQuerySeparators]+)/; my $reglocal=qr/^(www\.|)$sitewithoutwww/i; my $regget=qr/get|out/i; my $regsent=qr/sent|put|in/i; # Define value of $pos_xxx, @fieldlib, $PerlParsingFormat &DefinePerlParsingFormat($LogFormat); @@ -6314,31 +6352,32 @@ if ($UpdateStats && $FrameName ne 'index } # Drop wrong method/protocol #--------------------------- if ($LogType ne 'M') { $field[$pos_url] =~ s/\s/%20/g; } if ($LogType eq 'W' && ($field[$pos_method] eq 'GET' || $field[$pos_method] eq 'POST' - || $field[$pos_method] eq 'HEAD' - || $field[$pos_method] eq 'PROPFIND' - || $field[$pos_method] eq 'CHECKOUT' - || $field[$pos_method] eq 'LOCK' - || $field[$pos_method] eq 'PROPPATCH' - || $field[$pos_method] eq 'OPTIONS' - || $field[$pos_method] eq 'MKACTIVITY' - || $field[$pos_method] eq 'PUT' - || $field[$pos_method] eq 'MERGE' - || $field[$pos_method] eq 'DELETE' - || $field[$pos_method] eq 'REPORT' - || $field[$pos_method] eq 'MKCOL' - || $field[$pos_method] eq 'COPY' - || $field[$pos_method] =~ /OK/i - || $field[$pos_method] =~ /ERR\!/i)) { + #|| $field[$pos_method] eq 'HEAD' + #|| $field[$pos_method] eq 'PROPFIND' + #|| $field[$pos_method] eq 'CHECKOUT' + #|| $field[$pos_method] eq 'LOCK' + #|| $field[$pos_method] eq 'PROPPATCH' + #|| $field[$pos_method] eq 'OPTIONS' + #|| $field[$pos_method] eq 'MKACTIVITY' + #|| $field[$pos_method] eq 'PUT' + #|| $field[$pos_method] eq 'MERGE' + #|| $field[$pos_method] eq 'DELETE' + #|| $field[$pos_method] eq 'REPORT' + #|| $field[$pos_method] eq 'MKCOL' + #|| $field[$pos_method] eq 'COPY' + #|| $field[$pos_method] =~ /OK/i + #|| $field[$pos_method] =~ /ERR\!/i)) { + )){ # HTTP request. Keep only GET, POST, HEAD, *OK* and ERR! for Webstar. Do not keep OPTIONS, TRACE } elsif (($LogType eq 'W' || $LogType eq 'S') && ($field[$pos_method] eq 'GET' || $field[$pos_method] eq 'mms' || $field[$pos_method] eq 'rtsp' || $field[$pos_method] eq 'http' || $field[$pos_method] eq 'RTP')) { # Streaming request (windows media server, realmedia or darwin streaming server) } elsif ($LogType eq 'M' && $field[$pos_method] eq 'SMTP') { # Mail request ('SMTP' for mail log with maillogconvert.pl preprocessor) } @@ -6575,19 +6614,21 @@ if ($UpdateStats && $FrameName ne 'index # Analyze: misc tracker (must be before return code) #--------------------------------------------------- if ($urlwithnoquery =~ /$regmisc/o) { if ($Debug) { debug(" Found an URL that is a MiscTracker record with standalonequery=$standalonequery",2); } my $foundparam=0; foreach (split(/&/,$standalonequery)) { if ($_ =~ /^screen=(\d+)x(\d+)/i) { $foundparam++; $_screensize_h{"$1x$2"}++; next; } + if ($_ =~ /^win=(\d+)x(\d+)/i && $1!=0) { $foundparam++; $_windowsize_h{"$1x$2"}++; next; } #if ($_ =~ /cdi=(\d+)/i) { $foundparam++; $_screendepth_h{"$1"}++; next; } - if ($_ =~ /^nojs=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"JavascriptDisabled"}++; } next; } + if ($_ =~ /^nojs=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"NoJavaScript"}++; } next; } if ($_ =~ /^java=(\w+)/i) { $foundparam++; if ($1 eq 'true') { $_misc_h{"JavaEnabled"}++; } next; } + if ($_ =~ /^svg=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"SVGSupport"}++; } next; } if ($_ =~ /^shk=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"DirectorSupport"}++; } next; } if ($_ =~ /^fla=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"FlashSupport"}++; } next; } if ($_ =~ /^rp=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"RealPlayerSupport"}++; } next; } if ($_ =~ /^mov=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"QuickTimeSupport"}++; } next; } if ($_ =~ /^wma=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"WindowsMediaPlayerSupport"}++; } next; } if ($_ =~ /^pdf=(\w+)/i) { $foundparam++; if ($1 eq 'y') { $_misc_h{"PDFSupport"}++; } next; } } if ($foundparam) { $_misc_h{"TotalMisc"}++; } @@ -7015,36 +7056,153 @@ if ($UpdateStats && $FrameName ne 'index my $uabrowser=$TmpBrowser{$UserAgent}; if (! $uabrowser) { my $found=1; # IE ? if ($UserAgent =~ /$regvermsie/o && $UserAgent !~ /$regnotie/o) { $_browser_h{"msie$2"}++; $TmpBrowser{$UserAgent}="msie$2"; } - # Firefox ? - elsif ($UserAgent =~ /$regverfirefox/o) { - $_browser_h{"firefox$1"}++; - $TmpBrowser{$UserAgent}="firefox$1"; - } - # Subversion ? - elsif ($UserAgent =~ /$regversvn/o) { - $_browser_h{"svn$1"}++; - $TmpBrowser{$UserAgent}="svn$1"; - } + # Opera ? + elsif ($UserAgent =~ /$regveropera/o) { + $_browser_h{"opera$1"}++; + $TmpBrowser{$UserAgent}="opera$1"; + } # Netscape 6.x, 7.x ... ? elsif ($UserAgent =~ /$regvernetscape/o) { $_browser_h{"netscape$1"}++; $TmpBrowser{$UserAgent}="netscape$1"; } + # Firefox ? + elsif ($UserAgent =~ /$regverfirefox/o && $UserAgent !~ /$regnotfirefox/o) { + $_browser_h{"firefox$1"}++; + $TmpBrowser{$UserAgent}="firefox$1"; + } + # MozillaGecko ? + elsif ($UserAgent =~ /$regvermozillagecko/o && $UserAgent !~ /$regnotmozillagecko/o) { + $_browser_h{"mozilla$1"}++; + $TmpBrowser{$UserAgent}="mozilla$1"; + } # Netscape 3.x, 4.x ... ? elsif ($UserAgent =~ /$regvermozilla/o && $UserAgent !~ /$regnotnetscape/o) { $_browser_h{"netscape$2"}++; $TmpBrowser{$UserAgent}="netscape$2"; } + # Safari ? + elsif ($UserAgent =~ /$regversafari/o) { + if ($1 == "48") { + $_browser_h{"safari0.8"}++; + $TmpBrowser{$UserAgent}="safari0.8"; + } + elsif ($1 == "51") { + $_browser_h{"safari0.8.1"}++; + $TmpBrowser{$UserAgent}="safari0.8.1"; + } + elsif ($1 == "60") { + $_browser_h{"safari0.8.2"}++; + $TmpBrowser{$UserAgent}="safari0.8.2"; + } + elsif ($1 == "73") { + $_browser_h{"safari0.9"}++; + $TmpBrowser{$UserAgent}="safari0.9"; + } + elsif ($1 == "74") { + $_browser_h{"safari0.9"}++; + $TmpBrowser{$UserAgent}="safari1.0b2"; + } + elsif ($1 == "85" || $1 == "85.5") { + $_browser_h{"safari1.0"}++; + $TmpBrowser{$UserAgent}="safari1.0"; + } + elsif ($1 == "85.6") { + $_browser_h{"safari1.0.1"}++; + $TmpBrowser{$UserAgent}="safari1.0.1"; + } + elsif ($1 == "85.7") { + $_browser_h{"safari1.0.2"}++; + $TmpBrowser{$UserAgent}="safari1.0.2"; + } + elsif ($1 == "85.8" || $1 == "85.8.1") { + $_browser_h{"safari1.0.3"}++; + $TmpBrowser{$UserAgent}="safari1.0.3"; + } + elsif ($1 == "100") { + $_browser_h{"safari1.1"}++; + $TmpBrowser{$UserAgent}="safari1.1"; + } + elsif ($1 == "100.1") { + $_browser_h{"safari1.1.1"}++; + $TmpBrowser{$UserAgent}="safari1.1.1"; + } + elsif ($1 == "125") { + $_browser_h{"safari1.2"}++; + $TmpBrowser{$UserAgent}="safari1.2"; + } + elsif ($1 == "125.1") { + $_browser_h{"safari1.2.1"}++; + $TmpBrowser{$UserAgent}="safari1.2.1"; + } + elsif ($1 == "125.7" || $1 == "125.8") { + $_browser_h{"safari1.2.2"}++; + $TmpBrowser{$UserAgent}="safari1.2.2"; + } + elsif ($1 == "125.9") { + $_browser_h{"safari1.2.3"}++; + $TmpBrowser{$UserAgent}="safari1.2.3"; + } + elsif ($1 == "125.11" || $1 == "125.12") { + $_browser_h{"safari1.2.4"}++; + $TmpBrowser{$UserAgent}="safari1.2.4"; + } + elsif ($1 == "146" || $1 == "148" || $1 == "168" || $1 == "185") { + $_browser_h{"safari1.3b"}++; + $TmpBrowser{$UserAgent}="safari1.3b"; + } + elsif ($1 == "312") { + $_browser_h{"safari1.3"}++; + $TmpBrowser{$UserAgent}="safari1.3"; + } + elsif ($1 == "312.3" ) { + $_browser_h{"safari1.3.1"}++; + $TmpBrowser{$UserAgent}="safari1.3.1"; + } + elsif ($1 == "312.5" || $1 == "312.6") { + $_browser_h{"safari1.3.2"}++; + $TmpBrowser{$UserAgent}="safari1.3.2"; + } + elsif ($1 == "412" || $1 == "412.2" || $1 == "412.2.2") { + $_browser_h{"safari2.0"}++; + $TmpBrowser{$UserAgent}="safari2.0"; + } + elsif ($1 == "412.5" ) { + $_browser_h{"safari2.0.1"}++; + $TmpBrowser{$UserAgent}="safari2.0.1"; + } + elsif ($1 == "416.12" || $1 == "416.13" ) { + $_browser_h{"safari2.0.2"}++; + $TmpBrowser{$UserAgent}="safari2.0.2"; + } + elsif ($1 == "417.8" || $1 == "417.9" || $1 == "417.9.2" || $1 == "417.9.3") { + $_browser_h{"safari2.0.3"}++; + $TmpBrowser{$UserAgent}="safari2.0.3"; + } + elsif ($1 == "419.3") { + $_browser_h{"safari2.0.4"}++; + $TmpBrowser{$UserAgent}="safari2.0.4"; + } + else { + $_browser_h{"safari(build_$1)"}++; + $TmpBrowser{$UserAgent}="safari(build_$1)"; + } + } + # Subversion ? + elsif ($UserAgent =~ /$regversvn/o) { + $_browser_h{"svn$1"}++; + $TmpBrowser{$UserAgent}="svn$1"; + } # Other known browsers ? else { $found=0; foreach (@BrowsersSearchIDOrder) { # Search ID in order of BrowsersSearchIDOrder if ($UserAgent =~ /$_/) { my $browser=&UnCompileRegex($_); # TODO If browser is in a family, use version $_browser_h{"$browser"}++; @@ -7595,29 +7753,26 @@ if (scalar keys %HTMLOutput) { # READING DATA #------------- &Init_HashArray(); # Lecture des fichiers history if ($DatabaseBreak eq 'month') { for (my $ix=12; $ix>=1; $ix--) { - my $stringforload=''; my $monthix=sprintf("%02s",$ix); if ($MonthRequired eq 'all' || $monthix eq $MonthRequired) { - $stringforload='all'; # Read full history file + &Read_History_With_TmpUpdate($YearRequired,$monthix,'','',0,0,"all"); # Read full history file + &Read_History_With_TmpUpdate($YearRequired-1,$monthix,'','',0,0,"general time"); # Read general and time sections. } elsif (($HTMLOutput{'main'} && $ShowMonthStats) || $HTMLOutput{'alldays'}) { - $stringforload='general time'; # Read general and time sections. - } - if ($stringforload) { - # On charge fichier - &Read_History_With_TmpUpdate($YearRequired,$monthix,'','',0,0,$stringforload); - } - } + &Read_History_With_TmpUpdate($YearRequired,$monthix,'','',0,0,"general time"); # Read general and time sections. + &Read_History_With_TmpUpdate($YearRequired-1,$monthix,'','',0,0,"general time"); # Read general and time sections. + } + } } if ($DatabaseBreak eq 'day') { my $stringforload='all'; my $monthix=sprintf("%02s",$MonthRequired); my $dayix=sprintf("%02s",$DayRequired); &Read_History_With_TmpUpdate($YearRequired,$monthix,$dayix,'',0,0,$stringforload); } if ($DatabaseBreak eq 'hour') { @@ -7765,16 +7920,28 @@ if (scalar keys %HTMLOutput) { } else { print ""; if ($MonthRequired eq 'all') { print "$Message[6] $YearRequired"; } else { print "$Message[5] $MonthNumLib{$MonthRequired} $YearRequired"; } print ""; } print "\n"; + + my $NewLinkParamsNoDate = $NewLinkParams; + $NewLinkParamsNoDate =~ s/(^|&|&)year=[^&]*//i; + $NewLinkParamsNoDate =~ s/(^|&|&)month=[^&]*//i; + $NewLinkParamsNoDate =~ s/(^|&|&)framename=[^&]*//i; + $NewLinkParamsNoDate =~ tr/&/&/s; $NewLinkParamsNoDate =~ s/^&//; $NewLinkParamsNoDate =~ s/&$//; + print "Current Month:"; + print ""; + print ""; + print "$MonthNumLib{$nowmonth} $nowyear"; + print ""; + print "\n"; } if ($QueryString !~ /buildpdf/i) { print "\n"; print "\n"; } else { print "\n"; } @@ -7821,32 +7988,33 @@ if (scalar keys %HTMLOutput) { %menutext=('month'=>$Message[162],'daysofmonth'=>$Message[138],'daysofweek'=>$Message[91],'hours'=>$Message[20]); ShowMenuCateg('when',$Message[93],'menu4.png',$frame,$targetpage,$linkanchor,$NewLinkParams,$NewLinkTarget,\%menu,\%menulink,\%menutext); # Who %menu=('countries'=>$ShowDomainsStats?1:0,'alldomains'=>$ShowDomainsStats?2:0,'visitors'=>$ShowHostsStats?3:0,'allhosts'=>$ShowHostsStats?4:0,'lasthosts'=>($ShowHostsStats =~ /L/i)?5:0,'unknownip'=>$ShowHostsStats?6:0,'logins'=>$ShowAuthenticatedUsers?7:0,'alllogins'=>$ShowAuthenticatedUsers?8:0,'lastlogins'=>($ShowAuthenticatedUsers =~ /L/i)?9:0,'emailsenders'=>$ShowEMailSenders?10:0,'allemails'=>$ShowEMailSenders?11:0,'lastemails'=>($ShowEMailSenders =~ /L/i)?12:0,'emailreceivers'=>$ShowEMailReceivers?13:0,'allemailr'=>$ShowEMailReceivers?14:0,'lastemailr'=>($ShowEMailReceivers =~ /L/i)?15:0,'robots'=>$ShowRobotsStats?16:0,'allrobots'=>$ShowRobotsStats?17:0,'lastrobots'=>($ShowRobotsStats =~ /L/i)?18:0,'worms'=>$ShowWormsStats?19:0); %menulink=('countries'=>1,'alldomains'=>2,'visitors'=>1,'allhosts'=>2,'lasthosts'=>2,'unknownip'=>2,'logins'=>1,'alllogins'=>2,'lastlogins'=>2,'emailsenders'=>1,'allemails'=>2,'lastemails'=>2,'emailreceivers'=>1,'allemailr'=>2,'lastemailr'=>2,'robots'=>1,'allrobots'=>2,'lastrobots'=>2,'worms'=>1); %menutext=('countries'=>$Message[148],'alldomains'=>$Message[80],'visitors'=>$Message[81],'allhosts'=>$Message[80],'lasthosts'=>$Message[9],'unknownip'=>$Message[45],'logins'=>$Message[94],'alllogins'=>$Message[80],'lastlogins'=>$Message[9],'emailsenders'=>$Message[131],'allemails'=>$Message[80],'lastemails'=>$Message[9],'emailreceivers'=>$Message[132],'allemailr'=>$Message[80],'lastemailr'=>$Message[9],'robots'=>$Message[53],'allrobots'=>$Message[80],'lastrobots'=>$Message[9],'worms'=>$Message[136]); ShowMenuCateg('who',$Message[92],'menu5.png',$frame,$targetpage,$linkanchor,$NewLinkParams,$NewLinkTarget,\%menu,\%menulink,\%menutext); # Navigation - $linetitle=&AtLeastOneNotNull($ShowSessionsStats,$ShowPagesStats,$ShowFileTypesStats,$ShowFileSizesStats,$ShowOSStats,$ShowBrowsersStats,$ShowScreenSizeStats); + $linetitle=&AtLeastOneNotNull($ShowSessionsStats,$ShowPagesStats,$ShowFileTypesStats,$ShowFileSizesStats,$ShowOSStats,$ShowBrowsersStats,$ShowScreenSizeStats,$ShowWindowSizeStats); if ($linetitle) { print "".($menuicon?" ":"")."$Message[72]:\n"; } if ($linetitle) { print ($frame?"\n":""); } if ($ShowSessionsStats) { print ($frame?"":""); print "$Message[117]"; print ($frame?"\n":"   "); } if ($ShowFileTypesStats) { print ($frame?"":""); print "$Message[73]"; print ($frame?"\n":"   "); } if ($ShowPagesStats) { print ($frame?"":""); print "$Message[29]\n"; print ($frame?"\n":"   "); } if ($ShowPagesStats) { print ($frame?"   \"...\" ":""); print "$Message[80]\n"; print ($frame?"\n":"   "); } if ($ShowPagesStats =~ /E/i) { print ($frame?"   \"...\" ":""); print "$Message[104]\n"; print ($frame?"\n":"   "); } if ($ShowPagesStats =~ /X/i) { print ($frame?"   \"...\" ":""); print "$Message[116]\n"; print ($frame?"\n":"   "); } if ($ShowOSStats) { print ($frame?"":""); print "$Message[59]"; print ($frame?"\n":"   "); } if ($ShowOSStats) { print ($frame?"   \"...\" ":""); print "$Message[58]\n"; print ($frame?"\n":"   "); } if ($ShowOSStats) { print ($frame?"   \"...\" ":""); print "$Message[0]\n"; print ($frame?"\n":"   "); } if ($ShowBrowsersStats) { print ($frame?"":""); print "$Message[21]"; print ($frame?"\n":"   "); } if ($ShowBrowsersStats) { print ($frame?"   \"...\" ":""); print "$Message[58]\n"; print ($frame?"\n":"   "); } if ($ShowBrowsersStats) { print ($frame?"   \"...\" ":""); print "$Message[0]\n"; print ($frame?"\n":"   "); } if ($ShowScreenSizeStats) { print ($frame?"":""); print "$Message[135]"; print ($frame?"\n":"   "); } + if ($ShowWindowSizeStats) { print ($frame?"":""); print "$Message[173]"; print ($frame?"\n":"   "); } if ($linetitle) { print ($frame?"":"\n"); } # Referers %menu=('referer'=>$ShowOriginStats?1:0,'refererse'=>$ShowOriginStats?2:0,'refererpages'=>$ShowOriginStats?3:0,'keys'=>($ShowKeyphrasesStats || $ShowKeywordsStats)?4:0,'keyphrases'=>$ShowKeyphrasesStats?5:0,'keywords'=>$ShowKeywordsStats?6:0); %menulink=('referer'=>1,'refererse'=>2,'refererpages'=>2,'keys'=>1,'keyphrases'=>2,'keywords'=>2); %menutext=('referer'=>$Message[37],'refererse'=>$Message[126],'refererpages'=>$Message[127],'keys'=>$Message[14],'keyphrases'=>$Message[120],'keywords'=>$Message[121]); ShowMenuCateg('referers',$Message[23],'menu7.png',$frame,$targetpage,$linkanchor,$NewLinkParams,$NewLinkTarget,\%menu,\%menulink,\%menutext); # Others %menu=('filetypes'=>($ShowFileTypesStats =~ /C/i)?1:0,'misc'=>$ShowMiscStats?2:0,'errors'=>($ShowHTTPErrorsStats||$ShowSMTPErrorsStats)?3:0,'clusters'=>$ShowClusterStats?5:0); @@ -8972,112 +9140,138 @@ if (scalar keys %HTMLOutput) { } &tab_end($LogType eq 'W' || $LogType eq 'S'?"* $Message[159]":""); } # BY MONTH #--------------------------------------------------------------------- if ($ShowMonthStats) { + # set up an ordered array with all the months we care about, starting at the "Required" month and year + my @statmonths; + my $curyear = $YearRequired; + my $curmonth = $MonthRequired eq 'all' ? 12 : $MonthRequired; + for (my $ix=1; $ix<=13; $ix++) { + my $monthix=sprintf("%02s",$curmonth); + $statmonths[$ix] = {year => $curyear, month => $curmonth}; + if(--$curmonth < 1) + { + $curmonth = 12; + --$curyear; + } + } + if ($Debug) { debug("ShowMonthStats",2); } print "$Center 
\n"; my $title="$Message[162]"; &tab_head("$title",0,0,'month'); print "\n"; print "
\n"; $average_nb=$average_u=$average_v=$average_p=$average_h=$average_k=0; $total_u=$total_v=$total_p=$total_h=$total_k=0; $max_v=$max_p=$max_h=$max_k=1; # Define total and max for (my $ix=1; $ix<=12; $ix++) { - my $monthix=sprintf("%02s",$ix); - $total_u+=$MonthUnique{$YearRequired.$monthix}||0; - $total_v+=$MonthVisits{$YearRequired.$monthix}||0; - $total_p+=$MonthPages{$YearRequired.$monthix}||0; - $total_h+=$MonthHits{$YearRequired.$monthix}||0; - $total_k+=$MonthBytes{$YearRequired.$monthix}||0; - #if (($MonthUnique{$YearRequired.$monthix}||0) > $max_v) { $max_v=$MonthUnique{$YearRequired.$monthix}; } - if (($MonthVisits{$YearRequired.$monthix}||0) > $max_v) { $max_v=$MonthVisits{$YearRequired.$monthix}; } - #if (($MonthPages{$YearRequired.$monthix}||0) > $max_p) { $max_p=$MonthPages{$YearRequired.$monthix}; } - if (($MonthHits{$YearRequired.$monthix}||0) > $max_h) { $max_h=$MonthHits{$YearRequired.$monthix}; } - if (($MonthBytes{$YearRequired.$monthix}||0) > $max_k) { $max_k=$MonthBytes{$YearRequired.$monthix}; } + my $curmonth = $statmonths[$ix]->{month}; + my $curyear = $statmonths[$ix]->{year}; + my $monthix=sprintf("%02s",$curmonth); + $total_u+=$MonthUnique{$curyear.$monthix}||0; + $total_v+=$MonthVisits{$curyear.$monthix}||0; + $total_p+=$MonthPages{$curyear.$monthix}||0; + $total_h+=$MonthHits{$curyear.$monthix}||0; + $total_k+=$MonthBytes{$curyear.$monthix}||0; + #if (($MonthUnique{$curyear.$monthix}||0) > $max_v) { $max_v=$MonthUnique{$curyear.$monthix}; } + if (($MonthVisits{$curyear.$monthix}||0) > $max_v) { $max_v=$MonthVisits{$curyear.$monthix}; } + #if (($MonthPages{$curyear.$monthix}||0) > $max_p) { $max_p=$MonthPages{$curyear.$monthix}; } + if (($MonthHits{$curyear.$monthix}||0) > $max_h) { $max_h=$MonthHits{$curyear.$monthix}; } + if (($MonthBytes{$curyear.$monthix}||0) > $max_k) { $max_k=$MonthBytes{$curyear.$monthix}; } } # Define average # TODO # Show bars for month if ($PluginsLoaded{'ShowGraph'}{'graphapplet'}) { my @blocklabel=(); for (my $ix=1; $ix<=12; $ix++) { - my $monthix=sprintf("%02s",$ix); - push @blocklabel,"$MonthNumLib{$monthix}\§$YearRequired"; + my $curmonth = $statmonths[$ix]->{month}; + my $curyear = $statmonths[$ix]->{year}; + my $monthix=sprintf("%02s",$curmonth); + push @blocklabel,"$MonthNumLib{$monthix}\§$curyear"; } my @vallabel=("$Message[11]","$Message[10]","$Message[56]","$Message[57]","$Message[75]"); my @valcolor=("$color_u","$color_v","$color_p","$color_h","$color_k"); my @valmax=($max_v,$max_v,$max_h,$max_h,$max_k); my @valtotal=($total_u,$total_v,$total_p,$total_h,$total_k); my @valaverage=(); #my @valaverage=($average_v,$average_p,$average_h,$average_k); my @valdata=(); my $xx=0; for (my $ix=1; $ix<=12; $ix++) { - my $monthix=sprintf("%02s",$ix); - $valdata[$xx++]=$MonthUnique{$YearRequired.$monthix}||0; - $valdata[$xx++]=$MonthVisits{$YearRequired.$monthix}||0; - $valdata[$xx++]=$MonthPages{$YearRequired.$monthix}||0; - $valdata[$xx++]=$MonthHits{$YearRequired.$monthix}||0; - $valdata[$xx++]=$MonthBytes{$YearRequired.$monthix}||0; + my $curmonth = $statmonths[$ix]->{month}; + my $curyear = $statmonths[$ix]->{year}; + my $monthix=sprintf("%02s",$curmonth); + $valdata[$xx++]=$MonthUnique{$curyear.$monthix}||0; + $valdata[$xx++]=$MonthVisits{$curyear.$monthix}||0; + $valdata[$xx++]=$MonthPages{$curyear.$monthix}||0; + $valdata[$xx++]=$MonthHits{$curyear.$monthix}||0; + $valdata[$xx++]=$MonthBytes{$curyear.$monthix}||0; } ShowGraph_graphapplet("$title","month",$ShowMonthStats,\@blocklabel,\@vallabel,\@valcolor,\@valmax,\@valtotal,\@valaverage,\@valdata); } else { print "\n"; print ""; print "\n"; - for (my $ix=1; $ix<=12; $ix++) { - my $monthix=sprintf("%02s",$ix); + for (my $ix=1; $ix<=13; $ix++) { + my $curmonth = ($ix != 13) ? ($statmonths[13-$ix]->{month}) : ($statmonths[13]->{month}); + my $curyear = ($ix != 13) ? ($statmonths[13-$ix]->{year}) : ($statmonths[13]->{year}); + my $monthix=sprintf("%02s",$curmonth); my $bredde_u=0; my $bredde_v=0;my $bredde_p=0;my $bredde_h=0;my $bredde_k=0; - if ($max_v > 0) { $bredde_u=int(($MonthUnique{$YearRequired.$monthix}||0)/$max_v*$BarHeight)+1; } - if ($max_v > 0) { $bredde_v=int(($MonthVisits{$YearRequired.$monthix}||0)/$max_v*$BarHeight)+1; } - if ($max_h > 0) { $bredde_p=int(($MonthPages{$YearRequired.$monthix}||0)/$max_h*$BarHeight)+1; } - if ($max_h > 0) { $bredde_h=int(($MonthHits{$YearRequired.$monthix}||0)/$max_h*$BarHeight)+1; } - if ($max_k > 0) { $bredde_k=int(($MonthBytes{$YearRequired.$monthix}||0)/$max_k*$BarHeight)+1; } + if ($max_v > 0) { $bredde_u=int(($MonthUnique{$curyear.$monthix}||0)/$max_v*$BarHeight)+1; } + if ($max_v > 0) { $bredde_v=int(($MonthVisits{$curyear.$monthix}||0)/$max_v*$BarHeight)+1; } + if ($max_h > 0) { $bredde_p=int(($MonthPages{$curyear.$monthix}||0)/$max_h*$BarHeight)+1; } + if ($max_h > 0) { $bredde_h=int(($MonthHits{$curyear.$monthix}||0)/$max_h*$BarHeight)+1; } + if ($max_k > 0) { $bredde_k=int(($MonthBytes{$curyear.$monthix}||0)/$max_k*$BarHeight)+1; } + if($ix == 13) { print "\n"; } print "\n"; } print ""; print "\n"; # Show lib for month print ""; # if (!$StaticLinks) { # print ""; # } # else { print ""; # } - for (my $ix=1; $ix<=12; $ix++) { - my $monthix=sprintf("%02s",$ix); -# if (!$StaticLinks) { -# print ""; -# } -# else { - print ""; -# } + for (my $ix=1; $ix<=13; $ix++) { + my $curmonth = ($ix != 13) ? ($statmonths[13-$ix]->{month}) : ($statmonths[13]->{month}); + my $curyear = ($ix != 13) ? ($statmonths[13-$ix]->{year}) : ($statmonths[13]->{year}); + my $monthix=sprintf("%02s",$curmonth); +# if (!$StaticLinks) { +# print ""; +# } +# else { + if($ix == 13) { print "\n"; } + print ""; +# } } -# if (!$StaticLinks) { +# if (!$StaticLinks) { # print ""; # } # else { print ""; # } print "\n"; print "
 "; - if ($ShowMonthStats =~ /U/i) { print ""; } - if ($ShowMonthStats =~ /V/i) { print ""; } - if ($ShowMonthStats =~ /P/i) { print ""; } - if ($ShowMonthStats =~ /H/i) { print ""; } - if ($ShowMonthStats =~ /B/i) { print ""; } + if ($ShowMonthStats =~ /U/i) { print ""; } + if ($ShowMonthStats =~ /V/i) { print ""; } + if ($ShowMonthStats =~ /P/i) { print ""; } + if ($ShowMonthStats =~ /H/i) { print ""; } + if ($ShowMonthStats =~ /B/i) { print ""; } print " 
<< $MonthNumLib{$monthix}
$YearRequired
".(! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'':''); - print "$MonthNumLib{$monthix}
$YearRequired"; - print (! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'
':''); - print "
$MonthNumLib{$monthix}
$curyear
    ".(! $StaticLinks && $monthix==$nowmonth && $curyear==$nowyear?'':''); + print "$MonthNumLib{$monthix}
$curyear"; + print (! $StaticLinks && $monthix==$nowmonth && $curyear==$nowyear?'
':''); + print "
>> 
\n"; } @@ -9088,29 +9282,38 @@ if (scalar keys %HTMLOutput) { print "\n"; print ""; if ($ShowMonthStats =~ /U/i) { print ""; } if ($ShowMonthStats =~ /V/i) { print ""; } if ($ShowMonthStats =~ /P/i) { print ""; } if ($ShowMonthStats =~ /H/i) { print ""; } if ($ShowMonthStats =~ /B/i) { print ""; } print "\n"; - for (my $ix=1; $ix<=12; $ix++) { - my $monthix=sprintf("%02s",$ix); + + for (my $ix=0; $ix<=12; $ix++) { + my $curmonth = ($ix != 0) ? ($statmonths[$ix]->{month}) : ($statmonths[13]->{month}); + my $curyear = ($ix != 0) ? ($statmonths[$ix]->{year}) : ($statmonths[13]->{year}); + my $monthix=sprintf("%02s",$curmonth); + my $NewLinkParamsNoDate = $NewLinkParams; + $NewLinkParamsNoDate =~ s/(^|&|&)year=[^&]*//i; + $NewLinkParamsNoDate =~ s/(^|&|&)month=[^&]*//i; + $NewLinkParamsNoDate =~ s/(^|&|&)framename=[^&]*//i; + $NewLinkParamsNoDate =~ tr/&/&/s; $NewLinkParamsNoDate =~ s/^&//; $NewLinkParamsNoDate =~ s/&$//; print ""; - print ""; - if ($ShowMonthStats =~ /U/i) { print ""; } - if ($ShowMonthStats =~ /V/i) { print ""; } - if ($ShowMonthStats =~ /P/i) { print ""; } - if ($ShowMonthStats =~ /H/i) { print ""; } - if ($ShowMonthStats =~ /B/i) { print ""; } + print ""; + if ($ShowMonthStats =~ /U/i) { print ""; } + if ($ShowMonthStats =~ /V/i) { print ""; } + if ($ShowMonthStats =~ /P/i) { print ""; } + if ($ShowMonthStats =~ /H/i) { print ""; } + if ($ShowMonthStats =~ /B/i) { print ""; } print "\n"; + if($ix == 0) { print "\n"; } } # Average row # TODO # Total row print ""; if ($ShowMonthStats =~ /U/i) { print ""; } if ($ShowMonthStats =~ /V/i) { print ""; } if ($ShowMonthStats =~ /P/i) { print ""; } @@ -10209,17 +10412,59 @@ if (scalar keys %HTMLOutput) { print ""; print ""; print "\n"; } &tab_end(); } print "\n \n\n"; - + + # BY WINDOW SIZE + #---------------------------- + if ($ShowWindowSizeStats) { + if ($Debug) { debug("ShowWindowSizeStats",2); } + print "$Center 
\n"; + my $Totalh=0; foreach (keys %_windowsize_h) { $Totalh+=$_windowsize_h{$_}; } + my $title="$Message[173] ($Message[77] $MaxNbOf{'WindowSizesShown'})"; + &tab_head("$title",0,0,'windowsizes'); + print "\n"; + my $total_h=0; + my $count=0; + &BuildKeyList($MaxNbOf{'WindowSizesShown'},$MinHit{'WindowSize'},\%_windowsize_h,\%_windowsize_h); + foreach my $key (@keylist) { + my $p=' '; + if ($Totalh) { $p=int($_windowsize_h{$key}/$Totalh*1000)/10; $p="$p %"; } + $total_h+=$_windowsize_h{$key}||0; + print ""; + if ($key eq 'Unknown') { + print ""; + print ""; + } + else { + my $windowsize=$key; + print ""; + print ""; + } + print "\n"; + $count++; + } + $rest_h=$Totalh-$total_h; + if ($rest_h > 0) { + # All others sessions + my $p=0; + if ($Totalh) { $p=int($rest_h/$Totalh*1000)/10; } + print ""; + print ""; + print "\n"; + } + &tab_end(); + } + print "\n \n\n"; + # BY REFERENCE #--------------------------- if ($ShowOriginStats) { if ($Debug) { debug("ShowOriginStats",2); } print "$Center 
\n"; my $Totalp=0; foreach (0..5) { $Totalp+=($_ != 4 || $IncludeInternalLinksInOriginSection)?$_from_p[$_]:0; } my $Totalh=0; foreach (0..5) { $Totalh+=($_ != 4 || $IncludeInternalLinksInOriginSection)?$_from_h[$_]:0; } &tab_head($Message[36],19,0,'referer'); @@ -10424,17 +10669,17 @@ if (scalar keys %HTMLOutput) { if ($new_browser_h{'msiecumul'}) { $_misc_h{'AddToFavourites'}=int(0.5+$_misc_h{'AddToFavourites'}*$Totalh/$new_browser_h{'msiecumul'}); } } my $title="$Message[139]"; &tab_head("$title",19,0,'misc'); print ""; print ""; print ""; print "\n"; - my %label=('AddToFavourites'=>$Message[137],'JavascriptDisabled'=>$Message[168],'JavaEnabled'=>$Message[140],'DirectorSupport'=>$Message[141], + my %label=('AddToFavourites'=>$Message[137],'NoJavaScript'=>$Message[168],'JavaEnabled'=>$Message[140],'SVGSupport'=>$Message[174],'DirectorSupport'=>$Message[141], 'FlashSupport'=>$Message[142],'RealPlayerSupport'=>$Message[143],'QuickTimeSupport'=>$Message[144], 'WindowsMediaPlayerSupport'=>$Message[145],'PDFSupport'=>$Message[146]); foreach my $key (@MiscListOrder) { my $mischar=substr($key,0,1); if ($ShowMiscStats !~ /$mischar/i) { next; } my $total=0; my $p; if ($MiscListCalc{$key} eq 'v') { $total=$TotalVisits; } diff -up8rN --strip-trailing-cr original/lib/browsers.pm custom/lib/browsers.pm --- original/lib/browsers.pm 2006-12-09 19:27:39.000000000 +0000 +++ custom/lib/browsers.pm 2006-12-03 21:56:25.000000000 +0000 @@ -36,17 +36,16 @@ # Most frequent standard web browsers are first in this list (except msie, netscape and firefox) 'firebird', 'go!zilla', 'icab', 'konqueror', 'links', 'lynx', 'omniweb', -'opera', # Other standard web browsers '22acidownload', 'aol\-iweng', 'amaya', 'amigavoyager', 'aweb', 'bonecho', 'bpftp', @@ -81,17 +80,16 @@ 'multizilla', 'ncsa_mosaic', 'netcaptor', 'netpositive', 'nutscrape', 'msfrontpageexpress', 'phoenix', 'shiira', # Must be before safari -'safari', 'tzgeturl', 'viking', 'webfetcher', 'webexplorer', 'webmirror', 'webvcr', # Site grabbers 'teleport', @@ -197,17 +195,16 @@ 'staroffice', 'gnus', 'nikto', 'microsoft\-webdav\-miniredir', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\scache\smanager', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sdav', 'microsoft\sdata\saccess\sinternet\spublishing\sprovider\sprotocol\sdiscovery', 'POE\-Component\-Client\-HTTP', -'mozilla', # Must be at end because a lot of browsers contains mozilla in string 'libwww', # Must be at end because some browser have both 'browser id' and 'libwww' 'lwp' ); # BrowsersHashIDLib # List of browser's name ('browser id in lower case', 'browser text') #--------------------------------------------------------------- %BrowsersHashIDLib = (
$Message[5]$Message[11]$Message[10]$Message[56]$Message[57]$Message[75]
".(! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'':''); - print "$MonthNumLib{$monthix} $YearRequired"; - print (! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'':''); - print "",$MonthUnique{$YearRequired.$monthix}?$MonthUnique{$YearRequired.$monthix}:"0","",$MonthVisits{$YearRequired.$monthix}?$MonthVisits{$YearRequired.$monthix}:"0","",$MonthPages{$YearRequired.$monthix}?$MonthPages{$YearRequired.$monthix}:"0","",$MonthHits{$YearRequired.$monthix}?$MonthHits{$YearRequired.$monthix}:"0","",Format_Bytes(int($MonthBytes{$YearRequired.$monthix}||0)),"".(! $StaticLinks && $monthix==$nowmonth && $curyear==$nowyear?'':''); + print "$MonthNumLib{$monthix} $curyear"; + print (! $StaticLinks && $monthix==$nowmonth && $curyear==$nowyear?'':''); + print "",$MonthUnique{$curyear.$monthix}?$MonthUnique{$curyear.$monthix}:"0","",$MonthVisits{$curyear.$monthix}?$MonthVisits{$curyear.$monthix}:"0","",$MonthPages{$curyear.$monthix}?$MonthPages{$curyear.$monthix}:"0","",$MonthHits{$curyear.$monthix}?$MonthHits{$curyear.$monthix}:"0","",Format_Bytes(int($MonthBytes{$curyear.$monthix}||0)),"
 
$Message[102]$total_u$total_v$total_p
$Message[2]".($rest_h?"$p %":" ")."
$Message[173]$Message[15]
$Message[0]$p$windowsize$p
$Message[2]".($rest_h?"$p %":" ")."
$Message[139]