[vhffs-dev] [509] Added scripts to provide statistics for download repository

[ Thread Index | Date Index | More vhffs.org/vhffs-dev Archives ]


Revision: 509
Author:   gradator
Date:     2007-03-11 11:37:54 +0000 (Sun, 11 Mar 2007)

Log Message:
-----------
Added scripts to provide statistics for download repository

Modified Paths:
--------------
    branches/vhffs_4.1/vhffs-api/src/Vhffs/Conf.pm
    branches/vhffs_4.1/vhffs-backend/conf/vhffs.conf
    trunk/vhffs-api/src/Vhffs/Conf.pm
    trunk/vhffs-backend/conf/vhffs.conf

Added Paths:
-----------
    branches/vhffs_4.1/vhffs-robots/misc/repository.awstats.sample
    branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_6.4_vhffs.patch
    branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_6.5_vhffs.patch
    branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_htaccess_example
    branches/vhffs_4.1/vhffs-robots/src/generate_repositorystats.pl
    trunk/vhffs-robots/misc/repository.awstats.sample
    trunk/vhffs-robots/misc/repository.awstats_6.4_vhffs.patch
    trunk/vhffs-robots/misc/repository.awstats_6.5_vhffs.patch
    trunk/vhffs-robots/misc/repository.awstats_htaccess_example
    trunk/vhffs-robots/src/generate_repositorystats.pl


Modified: branches/vhffs_4.1/vhffs-api/src/Vhffs/Conf.pm
===================================================================
--- branches/vhffs_4.1/vhffs-api/src/Vhffs/Conf.pm	2007-03-10 09:34:21 UTC (rev 508)
+++ branches/vhffs_4.1/vhffs-api/src/Vhffs/Conf.pm	2007-03-11 11:37:54 UTC (rev 509)
@@ -912,20 +912,14 @@
 	return( 0 );
 }
 
-
 sub get_web_config
 {
-	my $webconf = $Config{"services"}{"web"};
+	return $Config{"services"}{"web"};
+}
 
-	if( defined $webconf )
-	{
-		return $webconf;
-	}
-	else
-	{
-		return undef;
-	}
+sub get_repository_config
+{
+	return $Config{"services"}{"repository"};
 }
 
-
 1;

Modified: branches/vhffs_4.1/vhffs-backend/conf/vhffs.conf
===================================================================
--- branches/vhffs_4.1/vhffs-backend/conf/vhffs.conf	2007-03-10 09:34:21 UTC (rev 508)
+++ branches/vhffs_4.1/vhffs-backend/conf/vhffs.conf	2007-03-11 11:37:54 UTC (rev 509)
@@ -170,7 +170,7 @@
 		# - ...
 		log_incoming_root = /data/logs/web/incoming
 
-		# The number of maximum rotations, a rotation is made each time the robots to create stats is ran
+		# The number of maximum rotations, a rotation is made each time the robot to create stats is ran
 		log_incoming_rotations = 7
 
 		# Should I compress rotated logs ?
@@ -186,10 +186,10 @@
 		log_parsed_rotation = 7
 		log_parsed_compress = yes		
 
-		# Where to find the awstat sampe file ?
+		# Where to find the awstats sample file ?
 		log_awstats_sample = /usr/lib/vhffs/bots/misc/awstats.sample
 
-		# Where to find awstat (caution, you must apply the vhffs patch on)
+		# Where to find awstats (caution, you must apply the vhffs patch on)
 		log_awstats = /var/www/stats/awstats.pl
 
 		# Is apache running locally or not ? (If not you should use the ugly remote restart of apaches over nfs)
@@ -306,8 +306,43 @@
 
 	#Configuration of download repository
 	<repository>
+		# Prefix of URL displayed in the panel
 		repository_url	=	"http://download.vhffs.org/";
+
+		# The default quota
 		default_quota	=	1024
+
+		# Where to find log from downloads servers, each server should be in a separate directory, example :
+		# - /data/logs/repository/incoming/webserver0
+		# - /data/logs/repository/incoming/webserver1
+		# - ...
+		# and http log must be called http.log and ftp log ftp.log
+		log_incoming_root = /data/logs/repository/incoming
+
+		# The number of maximum rotations, a rotation is made each time the robot to create stats is ran
+		log_incoming_rotations = 7
+
+		# Should I compress rotated logs ?
+		log_incoming_compress = yes
+
+		# Where to put parsed logfile from each repository
+		log_parsed_root = /data/logs/repository/parsed
+
+		# Same as incoming
+		log_parsed_rotation = 7
+		log_parsed_compress = yes		
+
+		# Where to find the awstats sample file ?
+		log_awstats_sample = /usr/lib/vhffs/bots/misc/repository.awstats.sample
+
+		# Where to find awstats (caution, you must apply the vhffs patch on)
+		log_awstats = /data/logs/repository/awstats.pl
+
+		# Is apache running locally or not ? (If not you should use the ugly remote restart of apaches over nfs)
+		log_apachelocal = yes
+
+		# If it runs locally, where is apache2ctl ?
+		log_apachectl = /usr/sbin/apache2ctl
 	</repository>
 </services>
 

Added: branches/vhffs_4.1/vhffs-robots/misc/repository.awstats.sample
===================================================================
--- branches/vhffs_4.1/vhffs-robots/misc/repository.awstats.sample	2007-03-10 09:34:21 UTC (rev 508)
+++ branches/vhffs_4.1/vhffs-robots/misc/repository.awstats.sample	2007-03-11 11:37:54 UTC (rev 509)
@@ -0,0 +1,1323 @@
+LogFormat=1
+LogFile="MY_LOGPATH"
+SiteDomain="MY_DOMAINNAME"
+
+
+# Enter here all other possible domain names, addresses or virtual host
+# aliases someone can use to access your site. Try to keep only the minimum
+# number of possible names/addresses to have the best performances.
+# You can repeat the "SiteDomain" value in this list.
+# This parameter is used to analyze referer field in log file and to help
+# AWStats to know if a referer URL is a local URL of same site or an URL of
+# another site.
+# Note: Use space between each value.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Note: You can also use @/mypath/myfile if list of aliases are in a file.
+# Example: "www.myserver.com localhost 127.0.0.1 REGEX[mydomain\.(net|org)$]"
+#
+HostAliases="localhost 127.0.0.1"
+
+
+# If you want to have hosts reported by name instead of ip address, AWStats
+# need to make reverse DNS lookups (if not already done in your log file).
+# With DNSLookup to 0, all hosts will be reported by their IP addresses and
+# not by the full hostname of visitors (except if names are already available
+# in log file).
+# If you want/need to set DNSLookup to 1, don't forget that this will reduce
+# dramatically AWStats update process speed. Do not use on large web sites.
+# Note: Reverse DNS lookup is done on IPv4 only (Enable ipv6 plugin for IPv6).
+# Note: Result of DNS Lookup can be used to build the Country report. However
+# it is highly recommanded to enable the plugin 'geoipfree' or 'geoip' to
+# have an accurate Country report with no need of DNS Lookup.
+# Possible values:
+# 0 - No DNS Lookup
+# 1 - DNS Lookup is fully enabled
+# 2 - DNS Lookup is made only from static DNS cache file (if it exists)
+# Default: 2
+# 
+DNSLookup=1
+
+
+# When AWStats updates its statistics, it stores results of its analysis in 
+# files (AWStats database). All those files are written in the directory
+# defined by the "DirData" parameter. Set this value to the directory where
+# you want AWStats to save its database and working files into.
+# Warning: If you want to be able to use the "AllowToUpdateStatsFromBrowser"
+# feature (see later), you need "Write" permissions by web server user on this
+# directory (and "Modify" for Windows NTFS file systems).
+# Example: "/var/lib/awstats"
+# Example: "../data"
+# Example: "C:/awstats_data_dir"
+# Default: "."          (means same directory as awstats.pl)
+#
+DirData="MY_DATADIR"
+
+
+# Relative or absolute web URL of your awstats cgi-bin directory.
+# This parameter is used only when AWStats is run from command line
+# with -output option (to generate links in HTML reported page).
+# Example: "/awstats"
+# Default: "/cgi-bin"   (means awstats.pl is in "/yourwwwroot/cgi-bin")
+#
+DirCgi="/"
+
+
+# Relative or absolute web URL of your awstats icon directory.
+# If you build static reports ("... -output > outputpath/output.html"), enter
+# path of icon directory relative to the output directory 'outputpath'.
+# Example: "/awstatsicons"
+# Example: "../icon"
+# Default: "/icon" (means you must copy icon directories in "/mywwwroot/icon")
+#
+DirIcons="/awstats-icon"
+
+
+# When this parameter is set to 1, AWStats add a button on report page to
+# allow to "update" statistics from a web browser. Warning, when "update" is
+# made from a browser, AWStats is ran as a CGI by the web server user defined
+# in your web server (user "nobody" by default with Apache, "IUSR_XXX" with
+# IIS), so the "DirData" directory and all already existing history files
+# awstatsMMYYYY[.xxx].txt must be writable by this user. Change permissions if
+# necessary to "Read/Write" (and "Modify" for Windows NTFS file systems).
+# Warning: Update process can be long so you might experience "time out"
+# browser errors if you don't launch AWStats enough frequently.
+# When set to 0, update is only made when AWStats is ran from the command
+# line interface (or a task scheduler).
+# Possible values: 0 or 1
+# Default: 0
+#
+AllowToUpdateStatsFromBrowser=0
+
+
+# AWStats save and sort its database on a month basis, this allows to build
+# build a report quickly. However, if you choose the -month=all from command
+# line or value '-Year-' from CGI combo form to have a report for all year,
+# AWStats needs to reload all data for full year, and resort them completely,
+# requiring a large amount of time, memory and CPU. This might be a problem
+# for web hosting providers that offer AWStats for large sites, on shared
+# servers, to non CPU cautious customers.
+# For this reason, the 'full year' is only enabled on Command Line by default.
+# You can change this by setting this parameter to 0, 1, 2 or 3.
+# Possible values:
+#  0 - Never allowed
+#  1 - Allowed on CLI only, -Year- value in combo is not visible
+#  2 - Allowed on CLI only, -Year- value in combo is visible but not allowed
+#  3 - Possible on CLI and CGI
+# Default: 2
+#
+AllowFullYearView=2
+
+
+
+#-----------------------------------------------------------------------------
+# OPTIONAL SETUP SECTION (Not required but increase AWStats features)
+#-----------------------------------------------------------------------------
+
+# When the update process run, AWStats can set a lock file in TEMP or TMP
+# directory. This lock is to avoid to have 2 update processes running at the
+# same time to prevent unknown conflicts problems and avoid DoS attacks when
+# AllowToUpdateStatsFromBrowser is set to 1.
+# Because, when you use lock file, you can experience sometimes problems in
+# lock file not correctly removed (killed process for example requires that
+# you remove the file manualy), this option is not enabled by default (Do
+# not enable this option with no console server access).
+# Change : Effective immediatly
+# Possible values: 0 or 1
+# Default: 0
+#
+EnableLockForUpdate=0
+
+
+# AWStats can do reverse DNS lookups through a static DNS cache file that was
+# previously created manually. If no path is given in static DNS cache file
+# name, AWStats will search DirData directory. This file is never changed.
+# This option is not used if DNSLookup=0.
+# Note: DNS cache file format is 'minsince1970 ipaddress resolved_hostname'
+# or just 'ipaddress resolved_hostname'
+# Change : Effective for new updates only
+# Example: "/mydnscachedir/dnscache"
+# Default: "dnscache.txt"
+#
+DNSStaticCacheFile="dnscache.txt"
+
+
+# AWStats can do reverse DNS lookups through a DNS cache file that was created
+# by a previous run of AWStats. This file is erased and recreated after each
+# statistics update process. You don't need to create and/or edit it.
+# AWStats will read and save this file in DirData directory.
+# This option is used only if DNSLookup=1.
+# Note: If a DNSStaticCacheFile is available, AWStats will check for DNS
+# lookup in DNSLastUpdateCacheFile after checking into DNSStaticCacheFile.
+# Change : Effective for new updates only
+# Example: "/mydnscachedir/dnscachelastupdate"
+# Default: "dnscachelastupdate.txt"
+#
+DNSLastUpdateCacheFile="dnscachelastupdate.txt"
+
+
+# You can specify specific IP addresses that should NOT be looked up in DNS.
+# This option is used only if DNSLookup=1.
+# Note: Use space between each value.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "123.123.123.123 REGEX[^192\.168\.]"
+# Default: ""
+#
+SkipDNSLookupFor=""
+
+
+# The following two parameters allow you to protect a config file from being
+# read by AWStats when called from a browser if web user has not been
+# authenticated. Your AWStats program must be in a web protected "realm" (With
+# Apache, you can use .htaccess files to do so. With other web servers, see
+# your server setup manual).
+# Change : Effective immediatly
+# Possible values: 0 or 1
+# Default: 0
+#
+AllowAccessFromWebToAuthenticatedUsersOnly=0
+
+
+# This parameter give the list of all authorized authenticated users to view
+# statistics for this domain/config file. This parameter is used only if
+# AllowAccessFromWebToAuthenticatedUsersOnly is set to 1.
+# Change : Effective immediatly
+# Example: "user1 user2"
+# Example: "__REMOTE_USER__"
+# Default: ""
+#
+AllowAccessFromWebToFollowingAuthenticatedUsers=""
+
+
+# When this parameter is define to something, the IP address of the user that
+# read its statistics from a browser (when AWStats is used as a CGI) is
+# checked and must match one of the IP address values or ranges.
+# Change : Effective immediatly
+# Example: "127.0.0.1 123.123.123.1-123.123.123.255"
+# Default: ""
+#
+AllowAccessFromWebToFollowingIPAddresses=""
+
+
+# If the "DirData" directory (see above) does not exists, AWStats return an
+# error. However, you can ask AWStats to create it.
+# This option can be used by some Web Hosting Providers that has defined a 
+# dynamic value for DirData (for example DirData="/home/__REMOTE_USER__") and
+# don't want to have to create a new directory each time they add a new user.
+# Change : Effective immediatly
+# Possible values: 0 or 1
+# Default: 0
+#
+CreateDirDataIfNotExists=0
+
+
+# You can choose in which format the Awstats history database is saved.
+# Note: Using "xml" format make AWStats building database files three times
+# larger than using "text" format.
+# Change : Database format is switched after next update
+# Possible values: text or xml
+# Default: text
+#
+BuildHistoryFormat=text
+
+
+# If you prefer having the report output pages be built as XML compliant pages
+# instead of simple HTML pages, you can set this to 'xhtml' (May not works
+# properly with old browsers).
+# Change : Effective immediatly
+# Possible values: html or xhtml
+# Default: html
+#
+BuildReportFormat=html
+
+
+# AWStats databases can be updated from command line of from a browser (when
+# used as a cgi program). So AWStats database files need write permission
+# for both command line user and default web server user (nobody for Unix,
+# IUSR_xxx for IIS/Windows,...).
+# To avoid permission's problems between update process (run by an admin user)
+# and CGI process (ran by a low level user), AWStats can save its database 
+# files with read and write permissions for everyone.
+# By default, AWStats keep default user permissions on updated files. If you 
+# set AllowToUpdateStatsFromBrowser to 1, you can change this parameter to 1.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+SaveDatabaseFilesWithPermissionsForEveryone=0
+
+
+# AWStats can purge log file, after analyzing it. Note that AWStats is able
+# to detect new lines in a log file, to process only them, so you can launch
+# AWStats as often as you want, even with this parameter to 0.
+# With 0, no purge is made, so you must use a scheduled task or a web server
+# that make this purge frequently.
+# With 1, the purge of the log file is made each time AWStats update is ran.
+# This parameter doesn't work with IIS (This web server doesn't let its log
+# file to be purged).
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+PurgeLogFile=0
+
+
+# When PurgeLogFile is setup to 1, AWStats will clean your log file after
+# processing it. You can however keep an archive file (saved in "DirData") of
+# all processed log records by setting this to 1 (For example if you want to
+# use another log analyzer).
+# This parameter is not used if PurgeLogFile=0
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+ArchiveLogRecords=0
+
+
+# Each time you run the update process, AWStats overwrite the 'historic file'
+# for the month (awstatsMMYYYY[.*].txt) with the updated one.
+# When write errors occurs (IO, disk full,...), this historic file can be
+# corrupted and must be deleted. Because this file contains information of all
+# past processed log files, you will loose old stats if removed. So you can
+# ask AWStats to save last non corrupted file in a .bak file. This file is
+# stored in "DirData" directory with other 'historic files'.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+KeepBackupOfHistoricFiles=0
+
+
+# Default index page name for your web server.
+# Change : Effective for new updates only
+# Example: "index.php index.html default.html"
+# Default: "index.html"
+#
+DefaultFile="index.html"
+
+
+# Do not include access from clients that match following criteria.
+# If your log file contains IP adresses in host field, you must enter here
+# matching IP adresses criteria.
+# If DNS lookup is already done in your log file, you must enter here hostname
+# criteria, else enter ip address criteria.
+# The opposite parameter of "SkipHosts" is "OnlyHosts".
+# Note: Use space between each value. This parameter is not case sensitive.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]"
+# Example: "localhost REGEX[^.*\.localdomain$]"
+# Default: ""
+#
+SkipHosts=""
+
+
+# Do not include access from clients with a user agent that match following
+# criteria. If you want to exclude a robot, you should update the robots.pm
+# file instead of this parameter.
+# The opposite parameter of "SkipUserAgents" is "OnlyUserAgents".
+# Note: Use space between each value. This parameter is not case sensitive.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "konqueror REGEX[ua_test_v\d\.\d]"
+# Default: ""
+#
+SkipUserAgents=""
+
+
+# Use SkipFiles to ignore access to URLs that match one of following entries.
+# You can enter a list of not important URLs (like framed menus, hidden pages,
+# etc...) to exclude them from statistics. You must enter here exact relative
+# URL as found in log file, or a matching REGEX value.
+# For example, to ignore /badpage.html, just add "/badpage.html". To ignore
+# all pages in a particular directory, add "REGEX[^\/directorytoexclude]".
+# The opposite parameter of "SkipFiles" is "OnlyFiles".
+# Note: Use space between each value. This parameter is or not case sensitive
+# depending on URLNotCaseSensitive parameter.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "/badpage.html REGEX[^\/excludedirectory]"
+# Default: ""
+#
+SkipFiles=""
+
+
+# Include in stats, only accesses from hosts that match one of following
+# entries. For example, if you want AWStats to filter access to keep only
+# stats for visits from particular hosts, you can add those hosts names in
+# this parameter.
+# If DNS lookup is already done in your log file, you must enter here hostname
+# criteria, else enter ip address criteria.
+# The opposite parameter of "OnlyHosts" is "SkipHosts".
+# Note: Use space between each value. This parameter is not case sensitive.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]"
+# Default: ""
+#
+OnlyHosts=""
+
+
+# Include in stats, only accesses from user agent that match one of following
+# entries. For example, if you want AWStats to filter access to keep only
+# stats for visits from particular browsers, you can add their user agents
+# string in this parameter.
+# The opposite parameter of "OnlyUserAgents" is "SkipUserAgents".
+# Note: Use space between each value. This parameter is not case sensitive.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "msie"
+# Default: ""
+#
+OnlyUserAgents=""
+
+
+# Include in stats, only accesses to URLs that match one of following entries.
+# For example, if you want AWStats to filter access to keep only stats that
+# match a particular string, like a particular directory, you can add this
+# directory name in this parameter.
+# The opposite parameter of "OnlyFiles" is "SkipFiles".
+# Note: Use space between each value. This parameter is or not case sensitive
+# depending on URLNotCaseSensitive parameter.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "REGEX[marketing_directory] REGEX[office\/.*\.(csv|sxw)$]"
+# Default: ""
+#
+OnlyFiles=""
+
+
+# Add here a list of kind of url (file extension) that must be counted as
+# "Hit only" and not as a "Hit" and "Page/Download". You can set here all
+# images extensions as they are hit downloaded that must be counted but they
+# are not viewed pages. URLs with such extensions are not included in the TOP
+# Pages/URL report.
+# Note: If you want to exclude particular URLs from stats (No Pages and no
+# Hits reported), you must use SkipFiles parameter.
+# Change : Effective for new updates only
+# Example: "css js class gif jpg jpeg png bmp ico zip arj gz z wav mp3 wma mpg"
+# Example: ""
+# Default: "css js class gif jpg jpeg png bmp ico"
+#
+NotPageList="css js class gif jpg jpeg png bmp ico swf"
+
+
+# By default, AWStats considers that records found in web log file are
+# successful hits if HTTP code returned by server is a valid HTTP code (200
+# and 304). Any other code are reported in HTTP status chart.
+# Note that HTTP 'control codes', like redirection (302, 305) are not added by
+# default in this list as they are not pages seen by a visitor but are
+# protocol exchange codes to tell the browser to ask another page. Because
+# this other page will be counted and seen with a 200 or 304 code, if you 
+# add such codes, you will have 2 pages viewed reported for only one in facts.
+# Change : Effective for new updates only
+# Example: "200 304 302 305"
+# Default: "200 304"
+#
+ValidHTTPCodes="200 304"
+
+
+# By default, AWStats considers that records found in mail log file are
+# successful mail transfers if field that represent return code in analyzed
+# log file match values defined by this parameter.
+# Change : Effective for new updates only
+# Example: "1 250 200"
+# Default: "1 250"
+#
+ValidSMTPCodes="1 250"
+
+
+# Some web servers on some Operating systems (IIS-Windows) considers that a
+# login with same value but different case are the same login. To tell AWStats
+# to also considers them as one, set this parameter to 1.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+# 
+AuthenticatedUsersNotCaseSensitive=0
+
+
+# Some web servers on some Operating systems (IIS-Windows) considers that two
+# URLs with same value but different case are the same URL. To tell AWStats to
+# also considers them as one, set this parameter to 1.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+# 
+URLNotCaseSensitive=0
+
+
+# Keep or remove the anchor string you can find in some URLs.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+URLWithAnchor=0
+
+
+# In URL links, "?" char is used to add parameter's list in URLs. Syntax is:
+# /mypage.html?param1=value1&param2=value2
+# However, some servers/sites use also others chars to isolate dynamic part of
+# their URLs. You can complete this list with all such characters.
+# Change : Effective for new updates only
+# Example: "?;,"
+# Default: "?;"
+#
+URLQuerySeparators="?;"
+
+
+# Keep or remove the query string to the URL in the statistics for individual
+# pages. This is primarily used to differentiate between the URLs of dynamic
+# pages. If set to 1, mypage.html?id=x and mypage.html?id=y are counted as two
+# different pages.
+# Warning, when set to 1, memory required to run AWStats is dramatically
+# increased if you have a lot of changing URLs (for example URLs with a random
+# id inside). Such web sites should not set this option to 1 or use seriously
+# the next parameter URLWithQueryWithOnlyFollowingParameters (or eventually 
+# URLWithQueryWithoutFollowingParameters).
+# Change : Effective for new updates only
+# Possible values:
+# 0 - URLs are cleaned from the query string (ie: "/mypage.html")
+# 1 - Full URL with query string is used     (ie: "/mypage.html?p=x&q=y")
+# Default: 0
+# 
+URLWithQuery=0
+
+
+# When URLWithQuery is on, you will get the full URL with all parameters in
+# URL reports. But among thoose parameters, sometimes you don't need a
+# particular parameter because it does not identify the page or because it's
+# a random ID changing for each access even if URL points to same page. In
+# such cases, it is higly recommanded to ask AWStats to keep only parameters
+# you need (if you know them) before counting, manipulating and storing URL.
+# Enter here list of wanted parameters. For example, with "param", one hit on
+# /mypage.cgi?param=abc&id=Yo4UomP9d  and  /mypage.cgi?param=abc&id=Mu8fdxl3r
+# will be reported as 2 hits on /mypage.cgi?param=abc
+# This parameter is not used when URLWithQuery is 0 and can't be used with
+# URLWithQueryWithoutFollowingParameters.
+# Change : Effective for new updates only
+# Example: "param"
+# Default: ""
+# 
+URLWithQueryWithOnlyFollowingParameters=""
+
+
+# When URLWithQuery is on, you will get the full URL with all parameters in
+# URL reports. But among thoose parameters, sometimes you don't need a
+# particular parameter because it does not identify the page or because it's
+# a random ID changing for each access even if URL points to same page. In
+# such cases, it is higly recommanded to ask AWStats to remove such parameters
+# from the URL before counting, manipulating and storing URL. Enter here list
+# of all non wanted parameters. For example if you enter "id", one hit on
+# /mypage.cgi?param=abc&id=Yo4UomP9d  and  /mypage.cgi?param=abc&id=Mu8fdxl3r
+# will be reported as 2 hits on /mypage.cgi?param=abc
+# This parameter is not used when URLWithQuery is 0 and can't be used with
+# URLWithQueryWithOnlyFollowingParameters.
+# Change : Effective for new updates only
+# Example: "PHPSESSID jsessionid"
+# Default: ""
+# 
+URLWithQueryWithoutFollowingParameters=""
+
+
+# Keep or remove the query string to the referrer URL in the statistics for
+# external referrer pages. This is used to differentiate between the URLs of
+# dynamic referrer pages. If set to 1, mypage.html?id=x and mypage.html?id=y
+# are counted as two different referrer pages.
+# Change : Effective for new updates only
+# Possible values:
+# 0 - Referrer URLs are cleaned from the query string (ie: "/mypage.html")
+# 1 - Full URL with query string is used      (ie: "/mypage.html?p=x&q=y")
+# Default: 0
+# 
+URLReferrerWithQuery=0
+
+
+# AWStats can detect setup problems or show you important informations to have
+# a better use. Keep this to 1, except if AWStats says you can change it.
+# Change : Effective immediatly
+# Possible values: 0 or 1
+# Default: 1
+#
+WarningMessages=1
+
+
+# When an error occurs, AWStats output a message related to errors. If you
+# want (in most cases for security reasons) to have no error messages, you
+# can set this parameter to your personalized generic message.
+# Change : Effective immediatly
+# Example: "An error occured. Contact your Administrator"
+# Default: ""
+#
+ErrorMessages=""
+
+
+# AWStat can be run with debug=x parameter to output various informations
+# to help in debugging or solving troubles. If you want to allow this (not
+# enabled by default for security reasons), set this parameter to 0.
+# Change : Effective immediatly
+# Possible values: 0 or 1
+# Default: 0
+#
+DebugMessages=0
+
+
+# To help you to detect if your log format is good, AWStats report an error
+# if all the first NbOfLinesForCorruptedLog lines have a format that does not
+# match the LogFormat parameter.
+# However, some worm virus attack on your web server can result in a very high
+# number of corrupted lines in your log. So if you experience awstats stop
+# because of bad virus records at the beginning of your log file, you can
+# increase this parameter (very rare).
+# Change : Effective for new updates only
+# Default: 50
+#
+NbOfLinesForCorruptedLog=50
+
+
+# For some particular integration needs, you may want to have CGI links to
+# point to another script than awstats.pl.
+# Use the name of this script in WrapperScript parameter.
+# Change : Effective immediatly
+# Example: "awstatslauncher.pl"
+# Default: ""
+#
+WrapperScript=""
+
+
+# DecodeUA must be set to 1 if you use Roxen web server. This server converts
+# all spaces in user agent field into %20. This make the AWStats robots, os
+# and browsers detection fail in some cases. Just change it to 1 if and only
+# if your web server is Roxen.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+DecodeUA=0
+
+
+# MiscTrackerUrl can be used to make AWStats able to detect some miscellanous
+# things, that can not be tracked on other way, like:
+# - Javascript disabled
+# - Java enabled
+# - Screen size
+# - Color depth
+# - Macromedia Director plugin
+# - Macromedia Shockwave plugin
+# - Realplayer G2 plugin
+# - QuickTime plugin
+# - Mediaplayer plugin
+# - Acrobat PDF plugin
+# To enable all this features, you must copy the awstats_misc_tracker.js file
+# into a /js/ directory stored in your web document root and add the following
+# HTML code at the end of your index page (but before </BODY>) :
+#
+# <script language=javascript src="/js/awstats_misc_tracker.js"></script>
+# <noscript><img src="/js/awstats_misc_tracker.js?nojs=y" height=0 width=0 border=0 style="display: none"></noscript>
+#
+# If code is not added in index page, all those detection capabilities will be
+# disabled. You must also check that ShowScreenSizeStats and ShowMiscStats
+# parameters are set to 1 to make results appear in AWStats report page.
+# If you want to use another directory than /js/, you must also change the
+# awstatsmisctrackerurl variable into the awstats_misc_tracker.js file.
+# Change : Effective for new updates only.
+# Possible value: URL of javascript tracker file added in your HTML code.
+# Default: "/js/awstats_misc_tracker.js"
+#
+MiscTrackerUrl="/js/awstats_misc_tracker.js"
+
+
+
+#-----------------------------------------------------------------------------
+# OPTIONAL ACCURACY SETUP SECTION (Not required but increase AWStats features)
+#-----------------------------------------------------------------------------
+
+# Following values allows you to define accuracy of AWStats entities (robots,
+# browsers, os, referers, file types) detection.
+# It might be a good idea for large web sites or ISP that provides AWStats to
+# high number of customers, to set this parameter to 1 (or 0), instead of 2.
+# Possible values:
+#  0 = No detection,
+#  1 = Medium/Standard detection
+#  2 = Full detection
+# Change : Effective for new updates only
+# Default: 2 (0 for LevelForWormsDetection)
+#
+LevelForBrowsersDetection=2         # 0 disables Browsers detection.
+                                    # 2 reduces AWStats speed by 2%
+LevelForOSDetection=2               # 0 disables OS detection.
+                                    # 2 reduces AWStats speed by 3%
+LevelForRefererAnalyze=2            # 0 disables Origin detection.
+                                    # 2 reduces AWStats speed by 14%
+LevelForRobotsDetection=2           # 0 disables Robots detection.
+                                    # 2 reduces AWStats speed by 2.5%
+LevelForSearchEnginesDetection=2    # 0 disables Search engines detection.
+                                    # 2 reduces AWStats speed by 9%
+LevelForKeywordsDetection=2         # 0 disables Keyphrases/Keywords detection.
+                                    # 2 reduces AWStats speed by 1%
+LevelForFileTypesDetection=2        # 0 disables File types detection.
+                                    # 2 reduces AWStats speed by 1%
+LevelForWormsDetection=0            # 0 disables Worms detection.
+                                    # 2 reduces AWStats speed by 15%
+
+
+
+#-----------------------------------------------------------------------------
+# OPTIONAL APPEARANCE SETUP SECTION (Not required but increase AWStats features)
+#-----------------------------------------------------------------------------
+
+# When you use AWStats as a CGI, you can have the reports shown in HTML frames.
+# Frames are only available for report viewed dynamically. When you build
+# pages from command line, this option is not used and no frames are built.
+# Possible values: 0 or 1
+# Default: 1
+#
+UseFramesWhenCGI=1
+
+
+# This parameter ask your browser to open detailed reports into a different
+# window than the main page.
+# Possible values:
+# 0 - Open all in same browser window
+# 1 - Open detailed reports in another window except if using frames
+# 2 - Open always in a different window even if reports are framed
+# Default: 1
+#
+DetailedReportsOnNewWindows=1
+
+
+# You can add, in the HTML report page, a cache lifetime (in seconds) that
+# will be returned to browser in HTTP header answer by server.
+# This parameter is not used when report are built with -staticlinks option.
+# Example: 3600
+# Default: 0
+#
+Expires=0
+
+
+# To avoid too large web pages, you can ask AWStats to limit number of rows of
+# all reported charts to this number when no other limit apply.
+# Default: 1000
+#
+MaxRowsInHTMLOutput=1000
+
+
+# Set your primary language (ISO-639-1 language codes).
+# Possible value:
+#  Albanian=al, Bosnian=ba, Bulgarian=bg, Catalan=ca,
+#  Chinese (Taiwan)=tw, Chinese (Simpliefied)=cn, Czech=cz, Danish=dk,
+#  Dutch=nl, English=en, Estonian=et, Euskara=eu, Finnish=fi,
+#  French=fr, Galician=gl, German=de, Greek=gr, Hebrew=he, Hungarian=hu,
+#  Icelandic=is, Indonesian=id, Italian=it, Japanese=jp, Korean=kr,
+#  Latvian=lv, Norwegian (Nynorsk)=nn, Norwegian (Bokmal)=nb, Polish=pl,
+#  Portuguese=pt, Portuguese (Brazilian)=br, Romanian=ro, Russian=ru,
+#  Serbian=sr, Slovak=sk, Slovenian=si, Spanish=es, Swedish=se, Turkish=tr,
+#  Ukrainian=ua, Welsh=cy.
+#  First available language accepted by browser=auto
+# Default: "auto"
+#
+Lang="auto"
+
+
+# Set the location of language files.
+# Example: "/usr/share/awstats/lang"
+# Default: "./lang" (means lang directory is in same location than awstats.pl)
+#
+DirLang="/usr/share/awstats/lang"
+
+
+# Show menu header with reports' links
+# Possible values: 0 or 1
+# Default: 1
+#
+ShowMenu=1					
+
+
+# You choose here which reports you want to see in the main page and what you
+# want to see in those reports.
+# Possible values:
+#  0  - Report is not shown at all
+#  1  - Report is shown in main page with an entry in menu and default columns
+# XYZ - Report shows column informations defined by code X,Y,Z...
+#       X,Y,Z... are code letters among the following:
+#        U = Unique visitors
+#        V = Visits
+#        P = Number of pages
+#        H = Number of hits (or mails)
+#        B = Bandwith (or total mail size for mail logs)
+#        L = Last access date
+#        E = Entry pages
+#        X = Exit pages
+#        C = Web compression (mod_gzip,mod_deflate)
+#        M = Average mail size (mail logs)
+#
+
+# Show monthly summary
+# Context: Web, Streaming, Mail, Ftp
+# Default: UVPHB, Possible column codes: UVPHB
+ShowSummary=UVPHB
+
+# Show monthly chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: UVPHB, Possible column codes: UVPHB
+ShowMonthStats=UVPHB
+
+# Show days of month chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: VPHB, Possible column codes: VPHB
+ShowDaysOfMonthStats=VPHB
+
+# Show days of week chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: PHB, Possible column codes: PHB
+ShowDaysOfWeekStats=PHB
+
+# Show hourly chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: PHB, Possible column codes: PHB
+ShowHoursStats=PHB
+
+# Show domains/country chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: PHB, Possible column codes: PHB
+ShowDomainsStats=PHB
+
+# Show hosts chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: PHBL, Possible column codes: PHBL
+ShowHostsStats=PHBL
+
+# Show authenticated users chart
+# Context: Web, Streaming, Ftp
+# Default: 0, Possible column codes: PHBL
+ShowAuthenticatedUsers=0
+
+# Show robots chart
+# Context: Web, Streaming
+# Default: HBL, Possible column codes: HBL
+ShowRobotsStats=HBL
+
+# Show worms chart
+# Context: Web, Streaming
+# Default: 0 (If set to other than 0, see also LevelForWormsDetection), Possible column codes: HBL
+ShowWormsStats=0
+
+# Show email senders chart (For use when analyzing mail log files)
+# Context: Mail
+# Default: 0, Possible column codes: HBML
+ShowEMailSenders=0
+
+# Show email receivers chart (For use when analyzing mail log files)
+# Context: Mail
+# Default: 0, Possible column codes: HBML
+ShowEMailReceivers=0
+
+# Show session chart
+# Context: Web, Streaming, Ftp
+# Default: 1, Possible column codes: None
+ShowSessionsStats=1
+
+# Show pages-url chart.
+# Context: Web, Streaming, Ftp
+# Default: PBEX, Possible column codes: PBEX
+ShowPagesStats=PBEX
+
+# Show file types chart.
+# Context: Web, Streaming, Ftp
+# Default: HB, Possible column codes: HBC
+ShowFileTypesStats=HB
+
+# Show file size chart (Not yet available)
+# Context: Web, Streaming, Mail, Ftp
+# Default: 1, Possible column codes: None
+ShowFileSizesStats=0		
+
+# Show operating systems chart
+# Context: Web, Streaming, Ftp
+# Default: 1, Possible column codes: None
+ShowOSStats=1
+
+# Show browsers chart
+# Context: Web, Streaming
+# Default: 1, Possible column codes: None
+ShowBrowsersStats=1
+
+# Show screen size chart
+# Context: Web, Streaming
+# Default: 0 (If set to 1, see also MiscTrackerUrl), Possible column codes: None
+ShowScreenSizeStats=0
+
+# Show origin chart
+# Context: Web, Streaming
+# Default: PH, Possible column codes: PH
+ShowOriginStats=PH
+
+# Show keyphrases chart
+# Context: Web, Streaming
+# Default: 1, Possible column codes: None
+ShowKeyphrasesStats=1
+
+# Show keywords chart
+# Context: Web, Streaming
+# Default: 1, Possible column codes: None
+ShowKeywordsStats=1
+
+# Show misc chart
+# Context: Web, Streaming
+# Default: a (See also MiscTrackerUrl parameter), Possible column codes: anjdfrqwp
+ShowMiscStats=a
+
+# Show http errors chart
+# Context: Web, Streaming
+# Default: 1, Possible column codes: None
+ShowHTTPErrorsStats=1
+
+# Show smtp errors chart (For use when analyzing mail log files)
+# Context: Mail
+# Default: 0, Possible column codes: None
+ShowSMTPErrorsStats=0
+
+# Show the cluster report (Your LogFormat must contains the %cluster tag)
+# Context: Web, Streaming, Ftp
+# Default: 0, Possible column codes: PHB
+ShowClusterStats=0
+
+
+# Some graphical reports are followed by the data array of values.
+# If you don't want this array (to reduce report size for example), you can
+# set thoose options to 0.
+# Possible values: 0 or 1
+# Default: 1
+#
+# Data array values for the ShowMonthStats report
+AddDataArrayMonthStats=1
+# Data array values for the ShowDaysOfMonthStats report
+AddDataArrayShowDaysOfMonthStats=1
+# Data array values for the ShowDaysOfWeekStats report
+AddDataArrayShowDaysOfWeekStats=1
+# Data array values for the ShowHoursStats report
+AddDataArrayShowHoursStats=1
+
+
+# In the Origin chart, you have stats on where your hits came from. You can
+# includes hits on pages that comes from pages of same sites in this chart.
+# Possible values: 0 or 1
+# Default: 0
+#
+IncludeInternalLinksInOriginSection=0
+
+
+# Following parameter can be used to choose maximum number of lines shown for
+# the particular following report.
+#
+# Stats by countries/domains
+MaxNbOfDomain = 10
+MinHitDomain  = 1
+# Stats by hosts
+MaxNbOfHostsShown = 10
+MinHitHost    = 1
+# Stats by authenticated users
+MaxNbOfLoginShown = 10
+MinHitLogin   = 1
+# Stats by robots
+MaxNbOfRobotShown = 10
+MinHitRobot   = 1
+# Stats by pages
+MaxNbOfPageShown = 10
+MinHitFile    = 1
+# Stats by OS
+MaxNbOfOsShown = 10
+MinHitOs      = 1
+# Stats by browsers
+MaxNbOfBrowsersShown = 10
+MinHitBrowser = 1
+# Stats by screen size
+MaxNbOfScreenSizesShown = 5
+MinHitScreenSize = 1
+# Stats by window size (following 2 parameters are not yet used)
+MaxNbOfWindowSizesShown = 5
+MinHitWindowSize = 1
+# Stats by referers
+MaxNbOfRefererShown = 10
+MinHitRefer   = 1
+# Stats for keyphrases
+MaxNbOfKeyphrasesShown = 10
+MinHitKeyphrase = 1
+# Stats for keywords
+MaxNbOfKeywordsShown = 10
+MinHitKeyword = 1
+# Stats for sender or receiver emails
+MaxNbOfEMailsShown = 20
+MinHitEMail   = 1
+
+
+# Choose if you want the week report to start on sunday or monday
+# Possible values:
+# 0 - Week start on sunday
+# 1 - Week start on monday
+# Default: 1
+#
+FirstDayOfWeek=1
+
+
+# List of visible flags that links to other language translations.
+# See Lang parameter for list of allowed flag/language codes.
+# If you don't want any flag link, set ShowFlagLinks to "".
+# This parameter is used only if ShowMenu parameter is set to 1.
+# Possible values: "" or "language_codes_separated_by_space"
+# Example: "en es fr nl de"
+# Default: ""
+#
+ShowFlagLinks=""
+
+
+# Each URL, shown in stats report views, are links you can click.
+# Possible values: 0 or 1
+# Default: 1
+#
+ShowLinksOnUrl=1
+
+
+# When AWStats build HTML links in its report pages, it starts thoose link
+# with "http://";. However some links might be HTTPS links, so you can enter
+# here the root of all your HTTPS links. If all your site is a SSL web site,
+# just enter "/".
+# This parameter is not used if ShowLinksOnUrl is 0.
+# Example: "/shopping"
+# Example: "/"
+# Default: ""
+#
+UseHTTPSLinkForUrl=""
+
+
+# Maximum length of URL part shown on stats page (number of characters).
+# This affects only URL visible text, link still work.
+# Default: 64
+#
+MaxLengthOfShownURL=64
+
+
+# You can enter HTML code that will be added at the top of AWStats reports.
+# Default: ""
+#
+HTMLHeadSection=""
+
+
+# You can enter HTML code that will be added at the end of AWStats reports.
+# Great to add advert ban.
+# Default: ""
+#
+HTMLEndSection=""
+
+
+# You can set Logo and LogoLink to use your own logo.
+# Logo must be the name of image file (must be in $DirIcons/other directory).
+# LogoLink is the expected URL when clicking on Logo.
+# Default: "awstats_logo6.png"
+#
+Logo="awstats_logo6.png"
+LogoLink="http://awstats.sourceforge.net";
+
+
+# Value of maximum bar width/height for horizontal/vertical HTML graphics bar.
+# Default: 260/90
+#
+BarWidth   = 260
+BarHeight  = 90
+
+
+# You can ask AWStats to use a particular CSS (Cascading Style Sheet) to
+# change its look. To create a style sheet, you can use samples provided with
+# AWStats in wwwroot/css directory.
+# Example: "/awstatscss/awstats_bw.css"
+# Example: "/css/awstats_bw.css"
+# Default: ""
+#
+StyleSheet=""
+
+
+# Those colors parameters can be used (if StyleSheet parameter is not used)
+# to change AWStats look.
+# Example: color_name="RRGGBB"	# RRGGBB is Red Green Blue components in Hex
+#
+color_Background="FFFFFF"		# Background color for main page (Default = "FFFFFF")
+color_TableBGTitle="CCCCDD"		# Background color for table title (Default = "CCCCDD")
+color_TableTitle="000000"		# Table title font color (Default = "000000")
+color_TableBG="CCCCDD"			# Background color for table (Default = "CCCCDD")
+color_TableRowTitle="FFFFFF"	# Table row title font color (Default = "FFFFFF")
+color_TableBGRowTitle="ECECEC"	# Background color for row title (Default = "ECECEC")
+color_TableBorder="ECECEC"		# Table border color (Default = "ECECEC")
+color_text="000000"				# Color of text (Default = "000000")
+color_textpercent="606060"		# Color of text for percent values (Default = "606060")
+color_titletext="000000"		# Color of text title within colored Title Rows (Default = "000000")
+color_weekend="EAEAEA"			# Color for week-end days (Default = "EAEAEA")
+color_link="0011BB"				# Color of HTML links (Default = "0011BB")
+color_hover="605040"			# Color of HTML on-mouseover links (Default = "605040") 
+color_u="FFAA66"				# Background color for number of unique visitors (Default = "FFAA66")
+color_v="F4F090"				# Background color for number of visites (Default = "F4F090")
+color_p="4477DD"				# Background color for number of pages (Default = "4477DD")
+color_h="66DDEE"				# Background color for number of hits (Default = "66DDEE")
+color_k="2EA495"				# Background color for number of bytes (Default = "2EA495")
+color_s="8888DD"				# Background color for number of search (Default = "8888DD")
+color_e="CEC2E8"				# Background color for number of entry pages (Default = "CEC2E8")
+color_x="C1B2E2"				# Background color for number of exit pages (Default = "C1B2E2")
+
+
+
+#-----------------------------------------------------------------------------
+# PLUGINS
+#-----------------------------------------------------------------------------
+
+# Add here all plugins file you want to load.
+# Plugin files must be .pm files stored in 'plugins' directory.
+# Uncomment LoadPlugin lines to enable a plugin after checking that perl
+# modules required by the plugin are installed.
+
+# Plugin: Tooltips
+# Perl modules required: None
+# Add some tooltips help on HTML report pages.
+# Note that enabled this kind of help will increased HTML report pages size,
+# so server load and bandwidth.
+#
+#LoadPlugin="tooltips"
+
+# Plugin: DecodeUTFKeys
+# Perl modules required: Encode and URI::Escape
+# Allow AWStats to show correctly (in language charset) keywords/keyphrases
+# strings even if they were UTF8 coded by the referer search engine.
+#
+#LoadPlugin="decodeutfkeys"
+
+# Plugin: IPv6
+# Perl modules required: Net::IP and Net::DNS
+# This plugin gives AWStats capability to make reverse DNS lookup on IPv6
+# addresses.
+# Note: If you are interesting in having country report, you should use the
+# geoipfree or geoip plugin instead of enabled reverse DNS lookup.
+#
+#LoadPlugin="ipv6"
+
+# Plugin: HashFiles
+# Perl modules required: Storable
+# AWStats DNS cache files are read/saved as native hash files. This increase
+# DNS cache files loading speed, above all for very large web sites.
+#
+LoadPlugin="hashfiles"
+
+# Plugin: GeoIP
+# Perl modules required: Geo::IP or Geo::IP::PurePerl (from Maxmind)
+# Country chart is built from an Internet IP-Country database.
+# This plugin is useless for intranet only log files.
+# Note: You must choose between using this plugin (need Perl Geo::IP module 
+# from Maxmind, database more up to date) or the GeoIPfree plugin (need
+# Perl Geo::IPfree module, database less up to date).
+# This plugin reduces AWStats speed of 8% !
+#
+#LoadPlugin="geoip GEOIP_STANDARD"
+
+# Plugin: GeoIPfree
+# Perl modules required: Geo::IPfree version 0.2+ (from Graciliano M.P.)
+# Country chart is built from an Internet IP-Country database.
+# This plugin is useless for intranet only log files.
+# Note: You must choose between using this plugin (need Perl Geo::IPfree
+# module, database less up to date) or the GeoIP plugin (need Perl Geo::IP
+# module from Maxmind, database more up to date).
+# Note: Activestate provide a corrupted version of Geo::IPfree 0.2 Perl
+# module, so install it from elsewhere (from www.cpan.org for example).
+# This plugin reduces AWStats speed of 10% !
+#
+#LoadPlugin="geoipfree"
+
+# Plugin: GeoIP_Region_Maxmind
+# Perl modules required: Geo::IP (from Maxmind)
+# This plugin add a chart of hits by regions. Only regions for US and 
+# Canada can be detected.
+# Note: This plugin need Maxmind GeoIP Perl module AND the region database.
+# Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState
+# on Windows but it works great on Linux with default Perl.
+# You need to purchase a license from Maxmind to get/use the Region database.
+# This plugin reduces AWStats speed.
+#
+#LoadPlugin="geoip_region_maxmind GEOIP_STANDARD /pathto/GeoIPRegion.dat"
+
+# Plugin: GeoIP_City_Maxmind
+# Perl modules required: Geo::IP (from Maxmind)
+# This plugin add a chart of hits by cities.
+# Note: This plugin need Maxmind GeoIP Perl module AND the city database.
+# Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState
+# on Windows but it works great on Linux with default Perl.
+# You need to purchase a license from Maxmind to get/use the City database.
+# This plugin reduces AWStats speed.
+#
+#LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /pathto/GeoIPCity.dat"
+
+# Plugin: GeoIP_ISP_Maxmind
+# Perl modules required: Geo::IP (from Maxmind)
+# This plugin add a chart of hits by ISP.
+# Note: This plugin need Maxmind GeoIP Perl module AND the ISP database.
+# Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState
+# on Windows but it works great on Linux with default Perl.
+# You need to purchase a license from Maxmind to get/use the ISP database.
+# This plugin reduces AWStats speed.
+#
+#LoadPlugin="geoip_isp_maxmind GEOIP_STANDARD /pathto/GeoIPISP.dat"
+
+# Plugin: GeoIP_Org_Maxmind
+# Perl modules required: Geo::IP (from Maxmind)
+# This plugin add a chart of hits by Organization name
+# Note: This plugin need Maxmind GeoIP Perl module AND the Org database.
+# Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState
+# on Windows but it works great on Linux with default Perl.
+# You need to purchase a license from Maxmind to get/use the Org database.
+# This plugin reduces AWStats speed.
+#
+#LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /pathto/GeoIPOrg.dat"
+
+# Plugin: UserInfo
+# Perl modules required: None
+# Add a text (Firtname, Lastname, Office Department, ...) in authenticated user
+# reports for each login value.
+# A text file called userinfo.myconfig.txt, with two fields (first is login,
+# second is text to show, separated by a tab char) must be created in DirData
+# directory.
+#
+#LoadPlugin="userinfo"
+
+# Plugin: HostInfo
+# Perl modules required: Net::XWhois
+# Add a column into host chart with a link to open a popup window that shows
+# info on host (like whois records).
+#
+#LoadPlugin="hostinfo"
+
+# Plugin: ClusterInfo
+# Perl modules required: None
+# Add a text (for example a full hostname) in cluster reports for each cluster
+# number.
+# A text file called clusterinfo.myconfig.txt, with two fields (first is
+# cluster number, second is text to show) separated by a tab char. must be
+# created into DirData directory.
+# Note this plugin is useless if ShowClusterStats is set to 0 or if you don't
+# use a personalized log format that contains %cluster tag.
+#
+#LoadPlugin="clusterinfo"
+
+# Plugin: UrlAliases
+# Perl modules required: None
+# Add a text (Page title, description...) in URL reports before URL value.
+# A text file called urlalias.myconfig.txt, with two fields (first is URL,
+# second is text to show, separated by a tab char) must be created into
+# DirData directory.
+#
+#LoadPlugin="urlalias"
+
+# Plugin: TimeHiRes
+# Perl modules required: Time::HiRes (if Perl < 5.8)
+# Time reported by -showsteps option is in millisecond. For debug purpose.
+#
+#LoadPlugin="timehires"		
+
+# Plugin: TimeZone
+# Perl modules required: Time::Local
+# Allow AWStats to correct a bad timezone for user of some IIS that use
+# GMT date in its log instead of local server time.
+# This module is useless for Apache and most IIS version.
+# This plugin reduces AWStats speed of 40% !!!!!!!
+#
+#LoadPlugin="timezone +2"
+
+# Plugin: Rawlog
+# Perl modules required: None
+# This plugin adds a form in AWStats main page to allow users to see raw
+# content of current log files. A filter is also available.
+#
+#LoadPlugin="rawlog"
+
+# Plugin: GraphApplet
+# Perl modules required: None
+# Supported charts are built by a 3D graphic applet.
+#
+#LoadPlugin="graphapplet /awstatsclasses"				# EXPERIMENTAL FEATURE
+
+
+
+#-----------------------------------------------------------------------------
+# EXTRA SECTIONS
+#-----------------------------------------------------------------------------
+
+# You can define your own charts, you choose here what are rows and columns
+# keys. This feature is particularly usefull for marketing purpose, tracking
+# products orders for example.
+# For this, edit all parameters of Extra section. Each set of parameter is a
+# different chart. For several charts, duplicate section changing the number.
+# Note: Each Extra section reduces AWStats speed by 8%.
+#
+# WARNING: A wrong setup of Extra section might result in too large arrays
+# that will consume all your memory, making AWStats unusable after several
+# updates, so be sure to setup it correctly.
+# In most cases, you don't need this feature.
+#
+# ExtraSectionNameX is title of your personalized chart.
+# ExtraSectionCodeFilterX is list of codes the record code field must match.
+#   Put an empty string for no test on code.
+# ExtraSectionConditionX are conditions you can use to count or not the hit,
+#   Use one of the field condition (URL,QUERY_STRING,REFERER,UA,HOST,extraX)
+#   and a regex to match, after a coma. Use "||" for "OR".
+# ExtraSectionFirstColumnTitleX is the first column title of the chart.
+# ExtraSectionFirstColumnValuesX is a string to tell AWStats which field to
+#   extract value from (URL,QUERY_STRING,REFERER,UA,HOST,extraX)
+#   and how to extract the value (using regex syntax). Each different value
+#   found will appear in first column of report on a different row. Be sure
+#   that list of different possible values will not grow indefinitely.
+# ExtraSectionFirstColumnFormatX is the string used to write value.
+# ExtraSectionStatTypesX are things you want to count. You can use standard
+#   code letters (P for pages,H for hits,B for bandwidth,L for last access).
+# ExtraSectionAddAverageRowX add a row at bottom of chart with average values.
+# ExtraSectionAddSumRowX add a row at bottom of chart with sum values.
+# MaxNbOfExtraX is maximum number of rows shown in chart.
+# MinHitExtraX is minimum number of hits required to be shown in chart.
+#
+
+# Example to report the 20 products the most ordered by "order.cgi" script
+#ExtraSectionName1="Product orders"
+#ExtraSectionCodeFilter1="200 304"
+#ExtraSectionCondition1="URL,\/cgi\-bin\/order\.cgi||URL,\/cgi\-bin\/order2\.cgi"
+#ExtraSectionFirstColumnTitle1="Product ID"
+#ExtraSectionFirstColumnValues1="QUERY_STRING,productid=([^&]+)"
+#ExtraSectionFirstColumnFormat1="%s"
+#ExtraSectionStatTypes1=PL
+#ExtraSectionAddAverageRow1=0
+#ExtraSectionAddSumRow1=1
+#MaxNbOfExtra1=20
+#MinHitExtra1=1
+
+
+# There is also a global parameter ExtraTrackedRowsLimit that limit the
+# number of possible rows an ExtraSection can report. This parameter is
+# here to protect too much memory use when you make a bad setup in your
+# ExtraSection. It applies to all ExtraSection independently meaning that
+# none ExtraSection can report more rows than value defined by ExtraTrackedRowsLimit.
+# If you know an ExtraSection will report more rows than its value, you should
+# increase this parameter or AWStats will stop with an error.
+# Example: 2000
+# Default: 500
+#
+ExtraTrackedRowsLimit=500
+
+
+#-----------------------------------------------------------------------------
+# INCLUDES
+#-----------------------------------------------------------------------------
+
+# You can include other config files using the directive with the name of the
+# config file.
+# This is particularly usefull for users who have a lot of virtual servers, so
+# a lot of config files and want to maintain common values in only one file.
+# Note that when a variable is defined both in a config file and in an
+# included file, AWStats will use the last value read for parameters that
+# contains one value and AWStats will concat all values from both files for
+# parameters that are lists of value.
+#
+
+Include "/etc/awstats/awstats.conf.local"
+

Added: branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_6.4_vhffs.patch
===================================================================
--- branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_6.4_vhffs.patch	2007-03-10 09:34:21 UTC (rev 508)
+++ branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_6.4_vhffs.patch	2007-03-11 11:37:54 UTC (rev 509)
@@ -0,0 +1,24 @@
+--- /usr/lib/cgi-bin/awstats.pl	2006-05-26 09:38:54.000000000 +0200
++++ awstats.pl	2007-03-01 00:05:51.000000000 +0100
+@@ -1091,10 +1091,10 @@
+ 	my $configdir=shift;
+ 	my @PossibleConfigDir=();
+ 
+-	if ($configdir && $ENV{"AWSTATS_ENABLE_CONFIG_DIR"}) {
+-	    @PossibleConfigDir=("$configdir");
+-	}
+-	else { @PossibleConfigDir=("$DIR","/etc/awstats","/usr/local/etc/awstats","/etc","/etc/opt/awstats"); }
++	my $vhffsconfigdir = '/data/logs/repository/parsed/'.$SiteConfig.'/awstats';
++	@PossibleConfigDir=("$vhffsconfigdir");
+ 
+ 	# Open config file
+ 	$FileConfig=$FileSuffix='';
+@@ -5740,7 +5740,7 @@
+ else { @DOWIndex = (0,1,2,3,4,5,6); }
+ 
+ # Should we link to ourselves or to a wrapper script
+-$AWScript=($WrapperScript?"$WrapperScript":"$DirCgi$PROG.$Extension");
++$AWScript=($WrapperScript?"$WrapperScript":"/$DirCgi$PROG.$Extension");
+ 
+ # Print html header (Need HTMLOutput,Expires,Lang,StyleSheet,HTMLHeadSectionExpires defined by Read_Config, PageCode defined by Read_Language_Data)
+ if (! $HeaderHTMLSent) { &html_head; }

Added: branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_6.5_vhffs.patch
===================================================================
--- branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_6.5_vhffs.patch	2007-03-10 09:34:21 UTC (rev 508)
+++ branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_6.5_vhffs.patch	2007-03-11 11:37:54 UTC (rev 509)
@@ -0,0 +1,24 @@
+--- /usr/lib/cgi-bin/awstats.pl	2006-05-26 09:38:54.000000000 +0200
++++ /data/logs/repository/awstats.pl	2007-03-11 12:12:03.000000000 +0100
+@@ -1091,10 +1091,9 @@
+ 	my $configdir=shift;
+ 	my @PossibleConfigDir=();
+ 
+-	if ($configdir && $ENV{"AWSTATS_ENABLE_CONFIG_DIR"}) {
+-	    @PossibleConfigDir=("$configdir");
+-	}
+-	else { @PossibleConfigDir=("$DIR","/etc/awstats","/usr/local/etc/awstats","/etc","/etc/opt/awstats"); }
++	my $vhffsconfigdir = '/data/logs/repository/parsed/'.$SiteConfig.'/awstats';
++	@PossibleConfigDir=("$vhffsconfigdir");
+ 
+ 	# Open config file
+ 	$FileConfig=$FileSuffix='';
+@@ -5740,7 +5739,7 @@
+ else { @DOWIndex = (0,1,2,3,4,5,6); }
+ 
+ # Should we link to ourselves or to a wrapper script
+-$AWScript=($WrapperScript?"$WrapperScript":"$DirCgi$PROG.$Extension");
++$AWScript=($WrapperScript?"$WrapperScript":"/$DirCgi$PROG.$Extension");
+ 
+ # Print html header (Need HTMLOutput,Expires,Lang,StyleSheet,HTMLHeadSectionExpires defined by Read_Config, PageCode defined by Read_Language_Data)
+ if (! $HeaderHTMLSent) { &html_head; }

Added: branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_htaccess_example
===================================================================
--- branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_htaccess_example	2007-03-10 09:34:21 UTC (rev 508)
+++ branches/vhffs_4.1/vhffs-robots/misc/repository.awstats_htaccess_example	2007-03-11 11:37:54 UTC (rev 509)
@@ -0,0 +1,4 @@
+RewriteEngine on
+RewriteRule ^([a-zA-Z0-9\.\-]+)/$ /awstats.pl?config=$1
+RewriteRule ^([a-zA-Z0-9\.\-]+)/([0-9]{4})/$ /awstats.pl?config=$1&year=$2
+RewriteRule ^([a-zA-Z0-9\.\-]+)/([0-9]{4})/([0-9]{2})/$ /awstats.pl?config=$1&year=$2&month=$3

Added: branches/vhffs_4.1/vhffs-robots/src/generate_repositorystats.pl
===================================================================
--- branches/vhffs_4.1/vhffs-robots/src/generate_repositorystats.pl	2007-03-10 09:34:21 UTC (rev 508)
+++ branches/vhffs_4.1/vhffs-robots/src/generate_repositorystats.pl	2007-03-11 11:37:54 UTC (rev 509)
@@ -0,0 +1,245 @@
+#!/usr/bin/perl -w
+# Copyright (c) vhffs project and its contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without 
+# modification, are permitted provided that the following conditions 
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright 
+#   notice, this list of conditions and the following disclaimer.
+#2. Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in 
+#   the documentation and/or other materials provided with the 
+#   distribution.
+#3. Neither the name of vhffs nor the names of its contributors 
+#   may be used to endorse or promote products derived from this 
+#   software without specific prior written permission.
+#
+#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+#"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+#LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+#FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+#COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+#INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+#BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+#LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+#CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+# POSSIBILITY OF SUCH DAMAGE.
+
+
+#Your logs must be in format : "%V %h %l %u %t \"%r\" %>s %b"
+#So, add in your httpd.conf following lines :
+#LogFormat "%V %h %l %u %t \"%r\" %>s %b" vhffs
+#CustomLog /var/log/apache2/http.log vhffs
+
+use strict;
+use lib "/usr/share/vhffs/api/";
+use Vhffs::Main;
+use Vhffs::Conf;
+use Vhffs::Functions;
+use Vhffs::Services::Repository;
+
+
+my $vhffs = init Vhffs::Main;
+die "ERROR: Cannot init VHFFS !!!" if( ! defined $vhffs );
+
+my $repos = Vhffs::Services::Repository::getall( $vhffs , Vhffs::Constants::ACTIVATED );
+die "ERROR: Cannot fetch the list of repository\n" if( ! defined $repos );
+
+my $repoconf = Vhffs::Conf::get_repository_config();
+die "ERROR: A full repository configuration is needed to generate stats\n" if ( ! defined $repoconf );
+
+my $conf_datadir = Vhffs::Conf::get_datadir;
+my $log_incoming_root = $repoconf->{"log_incoming_root"};
+my $log_incoming_rotations = $repoconf->{"log_incoming_rotations"};
+my $log_incoming_compress = ( $repoconf->{"log_incoming_compress"} eq 'yes' ) ? 1 : 0;
+my $log_parsed_root = $repoconf->{"log_parsed_root"};
+my $log_parsed_rotation = $repoconf->{"log_parsed_rotation"};
+my $log_parsed_compress = ( $repoconf->{"log_parsed_compress"} eq 'yes' ) ? 1 : 0;
+my $log_awstats = $repoconf->{"log_awstats"};
+my $awstats_sample = $repoconf->{"log_awstats_sample"};
+my $log_apachelocal = ( $repoconf->{"log_apachelocal"} eq 'yes' ) ? 1 : 0;
+my $log_apachectl = $repoconf->{"log_apachectl"};
+
+die "ERROR: ".$log_incoming_root." is not a directory" if( ! -d $log_incoming_root );
+die "ERROR: ".$log_parsed_root." is not a directory" if( ! -d $log_parsed_root );
+die "ERROR: ".$log_awstats." does no exist" if( ! -f $log_awstats );
+die "ERROR: cannot find the awstat sample at ".$awstats_sample if( ! -f $awstats_sample );
+die "ERROR: cannot find the apache2ctl binary at ".$log_apachectl if( $log_apachelocal  &&  ! -f $log_apachectl );
+
+my %repositorys;
+foreach ( @{$repos} )  {
+	$repositorys{$_->get_name} = 1;
+}
+
+my @downloadservers;
+my $downloadserver;
+my @files;
+
+# -- Rotate servers logs (all *.log files, I know that the suffix is hardcoded but I don't
+#    bother to add a configuration entry for that, it's already too complicated, and, who would
+#    like anything other than .log ? ).
+
+opendir( DIR , $log_incoming_root );
+@files = readdir( DIR );
+
+foreach( @files )  {
+	next if( /\./ );
+	if( -d $log_incoming_root."/".$_ )  {
+		push @downloadservers, $_;
+	}
+}
+closedir( DIR );
+
+foreach $downloadserver ( @downloadservers )  {
+	opendir ( DIR , $log_incoming_root."/".$downloadserver );
+	@files = readdir( DIR );
+
+	foreach ( @files )  {
+		if( /.*\.log$/ )  {
+			Vhffs::Functions::rotate_log( $log_incoming_root."/".$downloadserver."/".$_ , $log_incoming_rotations , $log_incoming_compress );
+		}
+	}
+
+	# put a file to tell webserver to restart (ugly signaling over nfs, I know I know... but IT WORKS, it is secure, and doesn't consume too much CPU !)
+	open( FILECYCLE , "> ".$log_incoming_root."/".$downloadserver."/cycleok" );
+	print FILECYCLE "";
+	close( FILECYCLE );
+}
+
+# Restart locally or wait 180 seconds to be sure all apache are restarted (welcome to the land of pigs)
+if( $log_apachelocal )  {
+	my $cmd = $log_apachectl." graceful";
+	system ( $cmd );
+} else {
+	sleep ( 180 );
+}
+
+# Deleting previous logs
+unlink $log_incoming_root."/mergedlog" if( -f $log_incoming_root."/mergedlog" );
+unlink $log_incoming_root."/rejectlog" if( -f $log_incoming_root."/rejectlog" );
+
+# Merge all logs
+my $cmd = "mergelog ".$log_incoming_root."/*/http.log.0 ".$log_incoming_root."/*/ftp.log.0 > ".$log_incoming_root."/mergedlog";
+system ( $cmd );
+
+# Parse http logs
+my $prev = "";
+my $ddir = $conf_datadir."/repository/";
+$ddir =~ s%[/]{2,}%/%g;
+
+open( MERGEDIN , "< ".$log_incoming_root."/mergedlog" );
+open( REJECTOUT, "> ".$log_incoming_root."/rejectlog" );
+
+while( my $line = <MERGEDIN> )  {
+
+	$line =~ s/\n//;
+
+	# is it a ftp or http log ?
+	my ( undef , undef , $type , undef ) = split( /\ /, $line, 4);
+
+	# modify loglines to produce an uniformised output for ftp and http
+	if( $type eq 'ftp' )  {
+
+		# remove the "/data/repository/" part of the query
+		$line =~ s%$ddir%%g;
+		$line =~ s%$%\ \"\-\"\ \"\-\"%;
+
+		# add HTTP/1.1 at the end of the query
+		my ( $part1 , $part2 ) = split( /\]/, $line, 2);
+		my ( $part21 , $part22 , $part23 ) = split( /\"/ , $part2 , 3);
+
+		$line = $part1.']'.$part21.'"'.$part22.' HTTP/1.1"'.$part23;
+
+	}  else  {
+
+		# remove the http:// part of the query if it exists
+		my ( $part1 , $part2 ) = split( /\]/, $line, 2);
+		my ( $part21 , $part22 , $part23 ) = split( /\"/ , $part2 , 3);
+
+		if( $part22 =~ /^\w+\ http:\/\/.+$/ ) {
+			my ( $part221 , undef ) = split( /\ / , $part22 , 2);
+			my ( undef, undef, undef, $part222) = split( /\// , $part22 , 4);
+
+			$line = $part1.']'.$part21.'"'.$part221.' /'.$part222.'"'.$part23;
+		}
+	}
+
+	# now fetch the download area and modify the logline to discard download area information
+	my ( $part1 , $part2 ) = split( /\]/, $line, 2);
+	my ( $part21 , $part22 , $part23 ) = split( /\"/ , $part2 , 3);
+
+	my ( $part221 , $area , $part223 ) = split( /\// , $part22 , 3);
+	my $log = $part1.']'.$part21.'"'.$part221.'/'.$part223.'"'.$part23;
+
+	# append log line to the concerned download area
+	if ( defined $area && defined $log )  {
+
+		# We are _NOT_ hosting this repository
+		if( ! exists $repositorys{$area} )  {
+
+			print REJECTOUT $area." ".$log."\n";
+		}
+
+		# We host this repository
+		else  {
+			# the repository changed
+			if ( $prev ne $area )  {
+				my $dir = $log_parsed_root."/".$area."/logs";
+				Vhffs::Functions::create_dir($dir) if ( ! -d $dir );
+
+				my $lff = $dir."/access.log";
+				close(FILEOUT);
+				open( FILEOUT , ">> ".$lff );
+				$prev = $area;
+			}
+
+			print FILEOUT $log."\n";
+		}
+	}
+}
+
+close(MERGEDIN);
+close(REJECTOUT);
+close(FILEOUT);
+
+
+# Create a configuration file and generate statistic for each website
+foreach ( @{$repos} )
+{
+	my $reponame = $_->get_name;
+
+	my $weblogdir = $log_parsed_root."/".$reponame;
+	my $logpath = $weblogdir."/logs/access.log";
+	my $datadir = $weblogdir."/awstats";
+	my $conffile = $datadir."/awstats.".$reponame.".conf";
+
+	next if ( ! -f $logpath );
+	Vhffs::Functions::create_dir($datadir) if ( ! -d $datadir );
+
+	# Create the config file
+	open( AWFILEIN , "< ".$awstats_sample );
+	open( AWFILEOUT , "> ".$conffile );
+
+	while( my $line = <AWFILEIN> )
+	{
+		$line =~ s/MY_DOMAINNAME/$reponame/g;
+		$line =~ s/MY_LOGPATH/$logpath/g;
+		$line =~ s/MY_DATADIR/$datadir/g;
+		
+		print AWFILEOUT $line;
+	}
+
+	close( AWFILEOUT );
+	close( AWFILEIN );
+
+	# Generate statistics
+	$cmd = $log_awstats." -config=".$reponame." -update 2>/dev/null 1>/dev/null";
+	system( $cmd );
+
+	# Rotate logs for this website
+	Vhffs::Functions::rotate_log( $logpath , $log_parsed_rotation , $log_parsed_compress );
+}


Property changes on: branches/vhffs_4.1/vhffs-robots/src/generate_repositorystats.pl
___________________________________________________________________
Name: svn:executable
   + *

Modified: trunk/vhffs-api/src/Vhffs/Conf.pm
===================================================================
--- trunk/vhffs-api/src/Vhffs/Conf.pm	2007-03-10 09:34:21 UTC (rev 508)
+++ trunk/vhffs-api/src/Vhffs/Conf.pm	2007-03-11 11:37:54 UTC (rev 509)
@@ -926,20 +926,14 @@
 	return( 0 );
 }
 
-
 sub get_web_config
 {
-	my $webconf = $Config{"services"}{"web"};
+	return $Config{"services"}{"web"};
+}
 
-	if( defined $webconf )
-	{
-		return $webconf;
-	}
-	else
-	{
-		return undef;
-	}
+sub get_repository_config
+{
+	return $Config{"services"}{"repository"};
 }
 
-
 1;

Modified: trunk/vhffs-backend/conf/vhffs.conf
===================================================================
--- trunk/vhffs-backend/conf/vhffs.conf	2007-03-10 09:34:21 UTC (rev 508)
+++ trunk/vhffs-backend/conf/vhffs.conf	2007-03-11 11:37:54 UTC (rev 509)
@@ -187,7 +187,7 @@
 		# - ...
 		log_incoming_root = /data/logs/web/incoming
 
-		# The number of maximum rotations, a rotation is made each time the robots to create stats is ran
+		# The number of maximum rotations, a rotation is made each time the robot to create stats is ran
 		log_incoming_rotations = 7
 
 		# Should I compress rotated logs ?
@@ -203,10 +203,10 @@
 		log_parsed_rotation = 7
 		log_parsed_compress = yes		
 
-		# Where to find the awstat sampe file ?
+		# Where to find the awstats sample file ?
 		log_awstats_sample = /usr/lib/vhffs/bots/misc/awstats.sample
 
-		# Where to find awstat (caution, you must apply the vhffs patch on)
+		# Where to find awstats (caution, you must apply the vhffs patch on)
 		log_awstats = /var/www/stats/awstats.pl
 
 		# Is apache running locally or not ? (If not you should use the ugly remote restart of apaches over nfs)
@@ -342,8 +342,43 @@
 
 	#Configuration of download repository
 	<repository>
+		# Prefix of URL displayed in the panel
 		repository_url	=	"http://download.vhffs.org/";
+
+		# The default quota
 		default_quota	=	1024
+
+		# Where to find log from downloads servers, each server should be in a separate directory, example :
+		# - /data/logs/repository/incoming/webserver0
+		# - /data/logs/repository/incoming/webserver1
+		# - ...
+		# and http log must be called http.log and ftp log ftp.log
+		log_incoming_root = /data/logs/repository/incoming
+
+		# The number of maximum rotations, a rotation is made each time the robot to create stats is ran
+		log_incoming_rotations = 7
+
+		# Should I compress rotated logs ?
+		log_incoming_compress = yes
+
+		# Where to put parsed logfile from each repository
+		log_parsed_root = /data/logs/repository/parsed
+
+		# Same as incoming
+		log_parsed_rotation = 7
+		log_parsed_compress = yes		
+
+		# Where to find the awstats sample file ?
+		log_awstats_sample = /usr/lib/vhffs/bots/misc/repository.awstats.sample
+
+		# Where to find awstats (caution, you must apply the vhffs patch on)
+		log_awstats = /data/logs/repository/awstats.pl
+
+		# Is apache running locally or not ? (If not you should use the ugly remote restart of apaches over nfs)
+		log_apachelocal = yes
+
+		# If it runs locally, where is apache2ctl ?
+		log_apachectl = /usr/sbin/apache2ctl
 	</repository>
 </services>
 

Added: trunk/vhffs-robots/misc/repository.awstats.sample
===================================================================
--- trunk/vhffs-robots/misc/repository.awstats.sample	2007-03-10 09:34:21 UTC (rev 508)
+++ trunk/vhffs-robots/misc/repository.awstats.sample	2007-03-11 11:37:54 UTC (rev 509)
@@ -0,0 +1,1323 @@
+LogFormat=1
+LogFile="MY_LOGPATH"
+SiteDomain="MY_DOMAINNAME"
+
+
+# Enter here all other possible domain names, addresses or virtual host
+# aliases someone can use to access your site. Try to keep only the minimum
+# number of possible names/addresses to have the best performances.
+# You can repeat the "SiteDomain" value in this list.
+# This parameter is used to analyze referer field in log file and to help
+# AWStats to know if a referer URL is a local URL of same site or an URL of
+# another site.
+# Note: Use space between each value.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Note: You can also use @/mypath/myfile if list of aliases are in a file.
+# Example: "www.myserver.com localhost 127.0.0.1 REGEX[mydomain\.(net|org)$]"
+#
+HostAliases="localhost 127.0.0.1"
+
+
+# If you want to have hosts reported by name instead of ip address, AWStats
+# need to make reverse DNS lookups (if not already done in your log file).
+# With DNSLookup to 0, all hosts will be reported by their IP addresses and
+# not by the full hostname of visitors (except if names are already available
+# in log file).
+# If you want/need to set DNSLookup to 1, don't forget that this will reduce
+# dramatically AWStats update process speed. Do not use on large web sites.
+# Note: Reverse DNS lookup is done on IPv4 only (Enable ipv6 plugin for IPv6).
+# Note: Result of DNS Lookup can be used to build the Country report. However
+# it is highly recommanded to enable the plugin 'geoipfree' or 'geoip' to
+# have an accurate Country report with no need of DNS Lookup.
+# Possible values:
+# 0 - No DNS Lookup
+# 1 - DNS Lookup is fully enabled
+# 2 - DNS Lookup is made only from static DNS cache file (if it exists)
+# Default: 2
+# 
+DNSLookup=1
+
+
+# When AWStats updates its statistics, it stores results of its analysis in 
+# files (AWStats database). All those files are written in the directory
+# defined by the "DirData" parameter. Set this value to the directory where
+# you want AWStats to save its database and working files into.
+# Warning: If you want to be able to use the "AllowToUpdateStatsFromBrowser"
+# feature (see later), you need "Write" permissions by web server user on this
+# directory (and "Modify" for Windows NTFS file systems).
+# Example: "/var/lib/awstats"
+# Example: "../data"
+# Example: "C:/awstats_data_dir"
+# Default: "."          (means same directory as awstats.pl)
+#
+DirData="MY_DATADIR"
+
+
+# Relative or absolute web URL of your awstats cgi-bin directory.
+# This parameter is used only when AWStats is run from command line
+# with -output option (to generate links in HTML reported page).
+# Example: "/awstats"
+# Default: "/cgi-bin"   (means awstats.pl is in "/yourwwwroot/cgi-bin")
+#
+DirCgi="/"
+
+
+# Relative or absolute web URL of your awstats icon directory.
+# If you build static reports ("... -output > outputpath/output.html"), enter
+# path of icon directory relative to the output directory 'outputpath'.
+# Example: "/awstatsicons"
+# Example: "../icon"
+# Default: "/icon" (means you must copy icon directories in "/mywwwroot/icon")
+#
+DirIcons="/awstats-icon"
+
+
+# When this parameter is set to 1, AWStats add a button on report page to
+# allow to "update" statistics from a web browser. Warning, when "update" is
+# made from a browser, AWStats is ran as a CGI by the web server user defined
+# in your web server (user "nobody" by default with Apache, "IUSR_XXX" with
+# IIS), so the "DirData" directory and all already existing history files
+# awstatsMMYYYY[.xxx].txt must be writable by this user. Change permissions if
+# necessary to "Read/Write" (and "Modify" for Windows NTFS file systems).
+# Warning: Update process can be long so you might experience "time out"
+# browser errors if you don't launch AWStats enough frequently.
+# When set to 0, update is only made when AWStats is ran from the command
+# line interface (or a task scheduler).
+# Possible values: 0 or 1
+# Default: 0
+#
+AllowToUpdateStatsFromBrowser=0
+
+
+# AWStats save and sort its database on a month basis, this allows to build
+# build a report quickly. However, if you choose the -month=all from command
+# line or value '-Year-' from CGI combo form to have a report for all year,
+# AWStats needs to reload all data for full year, and resort them completely,
+# requiring a large amount of time, memory and CPU. This might be a problem
+# for web hosting providers that offer AWStats for large sites, on shared
+# servers, to non CPU cautious customers.
+# For this reason, the 'full year' is only enabled on Command Line by default.
+# You can change this by setting this parameter to 0, 1, 2 or 3.
+# Possible values:
+#  0 - Never allowed
+#  1 - Allowed on CLI only, -Year- value in combo is not visible
+#  2 - Allowed on CLI only, -Year- value in combo is visible but not allowed
+#  3 - Possible on CLI and CGI
+# Default: 2
+#
+AllowFullYearView=2
+
+
+
+#-----------------------------------------------------------------------------
+# OPTIONAL SETUP SECTION (Not required but increase AWStats features)
+#-----------------------------------------------------------------------------
+
+# When the update process run, AWStats can set a lock file in TEMP or TMP
+# directory. This lock is to avoid to have 2 update processes running at the
+# same time to prevent unknown conflicts problems and avoid DoS attacks when
+# AllowToUpdateStatsFromBrowser is set to 1.
+# Because, when you use lock file, you can experience sometimes problems in
+# lock file not correctly removed (killed process for example requires that
+# you remove the file manualy), this option is not enabled by default (Do
+# not enable this option with no console server access).
+# Change : Effective immediatly
+# Possible values: 0 or 1
+# Default: 0
+#
+EnableLockForUpdate=0
+
+
+# AWStats can do reverse DNS lookups through a static DNS cache file that was
+# previously created manually. If no path is given in static DNS cache file
+# name, AWStats will search DirData directory. This file is never changed.
+# This option is not used if DNSLookup=0.
+# Note: DNS cache file format is 'minsince1970 ipaddress resolved_hostname'
+# or just 'ipaddress resolved_hostname'
+# Change : Effective for new updates only
+# Example: "/mydnscachedir/dnscache"
+# Default: "dnscache.txt"
+#
+DNSStaticCacheFile="dnscache.txt"
+
+
+# AWStats can do reverse DNS lookups through a DNS cache file that was created
+# by a previous run of AWStats. This file is erased and recreated after each
+# statistics update process. You don't need to create and/or edit it.
+# AWStats will read and save this file in DirData directory.
+# This option is used only if DNSLookup=1.
+# Note: If a DNSStaticCacheFile is available, AWStats will check for DNS
+# lookup in DNSLastUpdateCacheFile after checking into DNSStaticCacheFile.
+# Change : Effective for new updates only
+# Example: "/mydnscachedir/dnscachelastupdate"
+# Default: "dnscachelastupdate.txt"
+#
+DNSLastUpdateCacheFile="dnscachelastupdate.txt"
+
+
+# You can specify specific IP addresses that should NOT be looked up in DNS.
+# This option is used only if DNSLookup=1.
+# Note: Use space between each value.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "123.123.123.123 REGEX[^192\.168\.]"
+# Default: ""
+#
+SkipDNSLookupFor=""
+
+
+# The following two parameters allow you to protect a config file from being
+# read by AWStats when called from a browser if web user has not been
+# authenticated. Your AWStats program must be in a web protected "realm" (With
+# Apache, you can use .htaccess files to do so. With other web servers, see
+# your server setup manual).
+# Change : Effective immediatly
+# Possible values: 0 or 1
+# Default: 0
+#
+AllowAccessFromWebToAuthenticatedUsersOnly=0
+
+
+# This parameter give the list of all authorized authenticated users to view
+# statistics for this domain/config file. This parameter is used only if
+# AllowAccessFromWebToAuthenticatedUsersOnly is set to 1.
+# Change : Effective immediatly
+# Example: "user1 user2"
+# Example: "__REMOTE_USER__"
+# Default: ""
+#
+AllowAccessFromWebToFollowingAuthenticatedUsers=""
+
+
+# When this parameter is define to something, the IP address of the user that
+# read its statistics from a browser (when AWStats is used as a CGI) is
+# checked and must match one of the IP address values or ranges.
+# Change : Effective immediatly
+# Example: "127.0.0.1 123.123.123.1-123.123.123.255"
+# Default: ""
+#
+AllowAccessFromWebToFollowingIPAddresses=""
+
+
+# If the "DirData" directory (see above) does not exists, AWStats return an
+# error. However, you can ask AWStats to create it.
+# This option can be used by some Web Hosting Providers that has defined a 
+# dynamic value for DirData (for example DirData="/home/__REMOTE_USER__") and
+# don't want to have to create a new directory each time they add a new user.
+# Change : Effective immediatly
+# Possible values: 0 or 1
+# Default: 0
+#
+CreateDirDataIfNotExists=0
+
+
+# You can choose in which format the Awstats history database is saved.
+# Note: Using "xml" format make AWStats building database files three times
+# larger than using "text" format.
+# Change : Database format is switched after next update
+# Possible values: text or xml
+# Default: text
+#
+BuildHistoryFormat=text
+
+
+# If you prefer having the report output pages be built as XML compliant pages
+# instead of simple HTML pages, you can set this to 'xhtml' (May not works
+# properly with old browsers).
+# Change : Effective immediatly
+# Possible values: html or xhtml
+# Default: html
+#
+BuildReportFormat=html
+
+
+# AWStats databases can be updated from command line of from a browser (when
+# used as a cgi program). So AWStats database files need write permission
+# for both command line user and default web server user (nobody for Unix,
+# IUSR_xxx for IIS/Windows,...).
+# To avoid permission's problems between update process (run by an admin user)
+# and CGI process (ran by a low level user), AWStats can save its database 
+# files with read and write permissions for everyone.
+# By default, AWStats keep default user permissions on updated files. If you 
+# set AllowToUpdateStatsFromBrowser to 1, you can change this parameter to 1.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+SaveDatabaseFilesWithPermissionsForEveryone=0
+
+
+# AWStats can purge log file, after analyzing it. Note that AWStats is able
+# to detect new lines in a log file, to process only them, so you can launch
+# AWStats as often as you want, even with this parameter to 0.
+# With 0, no purge is made, so you must use a scheduled task or a web server
+# that make this purge frequently.
+# With 1, the purge of the log file is made each time AWStats update is ran.
+# This parameter doesn't work with IIS (This web server doesn't let its log
+# file to be purged).
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+PurgeLogFile=0
+
+
+# When PurgeLogFile is setup to 1, AWStats will clean your log file after
+# processing it. You can however keep an archive file (saved in "DirData") of
+# all processed log records by setting this to 1 (For example if you want to
+# use another log analyzer).
+# This parameter is not used if PurgeLogFile=0
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+ArchiveLogRecords=0
+
+
+# Each time you run the update process, AWStats overwrite the 'historic file'
+# for the month (awstatsMMYYYY[.*].txt) with the updated one.
+# When write errors occurs (IO, disk full,...), this historic file can be
+# corrupted and must be deleted. Because this file contains information of all
+# past processed log files, you will loose old stats if removed. So you can
+# ask AWStats to save last non corrupted file in a .bak file. This file is
+# stored in "DirData" directory with other 'historic files'.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+KeepBackupOfHistoricFiles=0
+
+
+# Default index page name for your web server.
+# Change : Effective for new updates only
+# Example: "index.php index.html default.html"
+# Default: "index.html"
+#
+DefaultFile="index.html"
+
+
+# Do not include access from clients that match following criteria.
+# If your log file contains IP adresses in host field, you must enter here
+# matching IP adresses criteria.
+# If DNS lookup is already done in your log file, you must enter here hostname
+# criteria, else enter ip address criteria.
+# The opposite parameter of "SkipHosts" is "OnlyHosts".
+# Note: Use space between each value. This parameter is not case sensitive.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]"
+# Example: "localhost REGEX[^.*\.localdomain$]"
+# Default: ""
+#
+SkipHosts=""
+
+
+# Do not include access from clients with a user agent that match following
+# criteria. If you want to exclude a robot, you should update the robots.pm
+# file instead of this parameter.
+# The opposite parameter of "SkipUserAgents" is "OnlyUserAgents".
+# Note: Use space between each value. This parameter is not case sensitive.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "konqueror REGEX[ua_test_v\d\.\d]"
+# Default: ""
+#
+SkipUserAgents=""
+
+
+# Use SkipFiles to ignore access to URLs that match one of following entries.
+# You can enter a list of not important URLs (like framed menus, hidden pages,
+# etc...) to exclude them from statistics. You must enter here exact relative
+# URL as found in log file, or a matching REGEX value.
+# For example, to ignore /badpage.html, just add "/badpage.html". To ignore
+# all pages in a particular directory, add "REGEX[^\/directorytoexclude]".
+# The opposite parameter of "SkipFiles" is "OnlyFiles".
+# Note: Use space between each value. This parameter is or not case sensitive
+# depending on URLNotCaseSensitive parameter.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "/badpage.html REGEX[^\/excludedirectory]"
+# Default: ""
+#
+SkipFiles=""
+
+
+# Include in stats, only accesses from hosts that match one of following
+# entries. For example, if you want AWStats to filter access to keep only
+# stats for visits from particular hosts, you can add those hosts names in
+# this parameter.
+# If DNS lookup is already done in your log file, you must enter here hostname
+# criteria, else enter ip address criteria.
+# The opposite parameter of "OnlyHosts" is "SkipHosts".
+# Note: Use space between each value. This parameter is not case sensitive.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]"
+# Default: ""
+#
+OnlyHosts=""
+
+
+# Include in stats, only accesses from user agent that match one of following
+# entries. For example, if you want AWStats to filter access to keep only
+# stats for visits from particular browsers, you can add their user agents
+# string in this parameter.
+# The opposite parameter of "OnlyUserAgents" is "SkipUserAgents".
+# Note: Use space between each value. This parameter is not case sensitive.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "msie"
+# Default: ""
+#
+OnlyUserAgents=""
+
+
+# Include in stats, only accesses to URLs that match one of following entries.
+# For example, if you want AWStats to filter access to keep only stats that
+# match a particular string, like a particular directory, you can add this
+# directory name in this parameter.
+# The opposite parameter of "OnlyFiles" is "SkipFiles".
+# Note: Use space between each value. This parameter is or not case sensitive
+# depending on URLNotCaseSensitive parameter.
+# Note: You can use regular expression values writing value with REGEX[value].
+# Change : Effective for new updates only
+# Example: "REGEX[marketing_directory] REGEX[office\/.*\.(csv|sxw)$]"
+# Default: ""
+#
+OnlyFiles=""
+
+
+# Add here a list of kind of url (file extension) that must be counted as
+# "Hit only" and not as a "Hit" and "Page/Download". You can set here all
+# images extensions as they are hit downloaded that must be counted but they
+# are not viewed pages. URLs with such extensions are not included in the TOP
+# Pages/URL report.
+# Note: If you want to exclude particular URLs from stats (No Pages and no
+# Hits reported), you must use SkipFiles parameter.
+# Change : Effective for new updates only
+# Example: "css js class gif jpg jpeg png bmp ico zip arj gz z wav mp3 wma mpg"
+# Example: ""
+# Default: "css js class gif jpg jpeg png bmp ico"
+#
+NotPageList="css js class gif jpg jpeg png bmp ico swf"
+
+
+# By default, AWStats considers that records found in web log file are
+# successful hits if HTTP code returned by server is a valid HTTP code (200
+# and 304). Any other code are reported in HTTP status chart.
+# Note that HTTP 'control codes', like redirection (302, 305) are not added by
+# default in this list as they are not pages seen by a visitor but are
+# protocol exchange codes to tell the browser to ask another page. Because
+# this other page will be counted and seen with a 200 or 304 code, if you 
+# add such codes, you will have 2 pages viewed reported for only one in facts.
+# Change : Effective for new updates only
+# Example: "200 304 302 305"
+# Default: "200 304"
+#
+ValidHTTPCodes="200 304"
+
+
+# By default, AWStats considers that records found in mail log file are
+# successful mail transfers if field that represent return code in analyzed
+# log file match values defined by this parameter.
+# Change : Effective for new updates only
+# Example: "1 250 200"
+# Default: "1 250"
+#
+ValidSMTPCodes="1 250"
+
+
+# Some web servers on some Operating systems (IIS-Windows) considers that a
+# login with same value but different case are the same login. To tell AWStats
+# to also considers them as one, set this parameter to 1.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+# 
+AuthenticatedUsersNotCaseSensitive=0
+
+
+# Some web servers on some Operating systems (IIS-Windows) considers that two
+# URLs with same value but different case are the same URL. To tell AWStats to
+# also considers them as one, set this parameter to 1.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+# 
+URLNotCaseSensitive=0
+
+
+# Keep or remove the anchor string you can find in some URLs.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+URLWithAnchor=0
+
+
+# In URL links, "?" char is used to add parameter's list in URLs. Syntax is:
+# /mypage.html?param1=value1&param2=value2
+# However, some servers/sites use also others chars to isolate dynamic part of
+# their URLs. You can complete this list with all such characters.
+# Change : Effective for new updates only
+# Example: "?;,"
+# Default: "?;"
+#
+URLQuerySeparators="?;"
+
+
+# Keep or remove the query string to the URL in the statistics for individual
+# pages. This is primarily used to differentiate between the URLs of dynamic
+# pages. If set to 1, mypage.html?id=x and mypage.html?id=y are counted as two
+# different pages.
+# Warning, when set to 1, memory required to run AWStats is dramatically
+# increased if you have a lot of changing URLs (for example URLs with a random
+# id inside). Such web sites should not set this option to 1 or use seriously
+# the next parameter URLWithQueryWithOnlyFollowingParameters (or eventually 
+# URLWithQueryWithoutFollowingParameters).
+# Change : Effective for new updates only
+# Possible values:
+# 0 - URLs are cleaned from the query string (ie: "/mypage.html")
+# 1 - Full URL with query string is used     (ie: "/mypage.html?p=x&q=y")
+# Default: 0
+# 
+URLWithQuery=0
+
+
+# When URLWithQuery is on, you will get the full URL with all parameters in
+# URL reports. But among thoose parameters, sometimes you don't need a
+# particular parameter because it does not identify the page or because it's
+# a random ID changing for each access even if URL points to same page. In
+# such cases, it is higly recommanded to ask AWStats to keep only parameters
+# you need (if you know them) before counting, manipulating and storing URL.
+# Enter here list of wanted parameters. For example, with "param", one hit on
+# /mypage.cgi?param=abc&id=Yo4UomP9d  and  /mypage.cgi?param=abc&id=Mu8fdxl3r
+# will be reported as 2 hits on /mypage.cgi?param=abc
+# This parameter is not used when URLWithQuery is 0 and can't be used with
+# URLWithQueryWithoutFollowingParameters.
+# Change : Effective for new updates only
+# Example: "param"
+# Default: ""
+# 
+URLWithQueryWithOnlyFollowingParameters=""
+
+
+# When URLWithQuery is on, you will get the full URL with all parameters in
+# URL reports. But among thoose parameters, sometimes you don't need a
+# particular parameter because it does not identify the page or because it's
+# a random ID changing for each access even if URL points to same page. In
+# such cases, it is higly recommanded to ask AWStats to remove such parameters
+# from the URL before counting, manipulating and storing URL. Enter here list
+# of all non wanted parameters. For example if you enter "id", one hit on
+# /mypage.cgi?param=abc&id=Yo4UomP9d  and  /mypage.cgi?param=abc&id=Mu8fdxl3r
+# will be reported as 2 hits on /mypage.cgi?param=abc
+# This parameter is not used when URLWithQuery is 0 and can't be used with
+# URLWithQueryWithOnlyFollowingParameters.
+# Change : Effective for new updates only
+# Example: "PHPSESSID jsessionid"
+# Default: ""
+# 
+URLWithQueryWithoutFollowingParameters=""
+
+
+# Keep or remove the query string to the referrer URL in the statistics for
+# external referrer pages. This is used to differentiate between the URLs of
+# dynamic referrer pages. If set to 1, mypage.html?id=x and mypage.html?id=y
+# are counted as two different referrer pages.
+# Change : Effective for new updates only
+# Possible values:
+# 0 - Referrer URLs are cleaned from the query string (ie: "/mypage.html")
+# 1 - Full URL with query string is used      (ie: "/mypage.html?p=x&q=y")
+# Default: 0
+# 
+URLReferrerWithQuery=0
+
+
+# AWStats can detect setup problems or show you important informations to have
+# a better use. Keep this to 1, except if AWStats says you can change it.
+# Change : Effective immediatly
+# Possible values: 0 or 1
+# Default: 1
+#
+WarningMessages=1
+
+
+# When an error occurs, AWStats output a message related to errors. If you
+# want (in most cases for security reasons) to have no error messages, you
+# can set this parameter to your personalized generic message.
+# Change : Effective immediatly
+# Example: "An error occured. Contact your Administrator"
+# Default: ""
+#
+ErrorMessages=""
+
+
+# AWStat can be run with debug=x parameter to output various informations
+# to help in debugging or solving troubles. If you want to allow this (not
+# enabled by default for security reasons), set this parameter to 0.
+# Change : Effective immediatly
+# Possible values: 0 or 1
+# Default: 0
+#
+DebugMessages=0
+
+
+# To help you to detect if your log format is good, AWStats report an error
+# if all the first NbOfLinesForCorruptedLog lines have a format that does not
+# match the LogFormat parameter.
+# However, some worm virus attack on your web server can result in a very high
+# number of corrupted lines in your log. So if you experience awstats stop
+# because of bad virus records at the beginning of your log file, you can
+# increase this parameter (very rare).
+# Change : Effective for new updates only
+# Default: 50
+#
+NbOfLinesForCorruptedLog=50
+
+
+# For some particular integration needs, you may want to have CGI links to
+# point to another script than awstats.pl.
+# Use the name of this script in WrapperScript parameter.
+# Change : Effective immediatly
+# Example: "awstatslauncher.pl"
+# Default: ""
+#
+WrapperScript=""
+
+
+# DecodeUA must be set to 1 if you use Roxen web server. This server converts
+# all spaces in user agent field into %20. This make the AWStats robots, os
+# and browsers detection fail in some cases. Just change it to 1 if and only
+# if your web server is Roxen.
+# Change : Effective for new updates only
+# Possible values: 0 or 1
+# Default: 0
+#
+DecodeUA=0
+
+
+# MiscTrackerUrl can be used to make AWStats able to detect some miscellanous
+# things, that can not be tracked on other way, like:
+# - Javascript disabled
+# - Java enabled
+# - Screen size
+# - Color depth
+# - Macromedia Director plugin
+# - Macromedia Shockwave plugin
+# - Realplayer G2 plugin
+# - QuickTime plugin
+# - Mediaplayer plugin
+# - Acrobat PDF plugin
+# To enable all this features, you must copy the awstats_misc_tracker.js file
+# into a /js/ directory stored in your web document root and add the following
+# HTML code at the end of your index page (but before </BODY>) :
+#
+# <script language=javascript src="/js/awstats_misc_tracker.js"></script>
+# <noscript><img src="/js/awstats_misc_tracker.js?nojs=y" height=0 width=0 border=0 style="display: none"></noscript>
+#
+# If code is not added in index page, all those detection capabilities will be
+# disabled. You must also check that ShowScreenSizeStats and ShowMiscStats
+# parameters are set to 1 to make results appear in AWStats report page.
+# If you want to use another directory than /js/, you must also change the
+# awstatsmisctrackerurl variable into the awstats_misc_tracker.js file.
+# Change : Effective for new updates only.
+# Possible value: URL of javascript tracker file added in your HTML code.
+# Default: "/js/awstats_misc_tracker.js"
+#
+MiscTrackerUrl="/js/awstats_misc_tracker.js"
+
+
+
+#-----------------------------------------------------------------------------
+# OPTIONAL ACCURACY SETUP SECTION (Not required but increase AWStats features)
+#-----------------------------------------------------------------------------
+
+# Following values allows you to define accuracy of AWStats entities (robots,
+# browsers, os, referers, file types) detection.
+# It might be a good idea for large web sites or ISP that provides AWStats to
+# high number of customers, to set this parameter to 1 (or 0), instead of 2.
+# Possible values:
+#  0 = No detection,
+#  1 = Medium/Standard detection
+#  2 = Full detection
+# Change : Effective for new updates only
+# Default: 2 (0 for LevelForWormsDetection)
+#
+LevelForBrowsersDetection=2         # 0 disables Browsers detection.
+                                    # 2 reduces AWStats speed by 2%
+LevelForOSDetection=2               # 0 disables OS detection.
+                                    # 2 reduces AWStats speed by 3%
+LevelForRefererAnalyze=2            # 0 disables Origin detection.
+                                    # 2 reduces AWStats speed by 14%
+LevelForRobotsDetection=2           # 0 disables Robots detection.
+                                    # 2 reduces AWStats speed by 2.5%
+LevelForSearchEnginesDetection=2    # 0 disables Search engines detection.
+                                    # 2 reduces AWStats speed by 9%
+LevelForKeywordsDetection=2         # 0 disables Keyphrases/Keywords detection.
+                                    # 2 reduces AWStats speed by 1%
+LevelForFileTypesDetection=2        # 0 disables File types detection.
+                                    # 2 reduces AWStats speed by 1%
+LevelForWormsDetection=0            # 0 disables Worms detection.
+                                    # 2 reduces AWStats speed by 15%
+
+
+
+#-----------------------------------------------------------------------------
+# OPTIONAL APPEARANCE SETUP SECTION (Not required but increase AWStats features)
+#-----------------------------------------------------------------------------
+
+# When you use AWStats as a CGI, you can have the reports shown in HTML frames.
+# Frames are only available for report viewed dynamically. When you build
+# pages from command line, this option is not used and no frames are built.
+# Possible values: 0 or 1
+# Default: 1
+#
+UseFramesWhenCGI=1
+
+
+# This parameter ask your browser to open detailed reports into a different
+# window than the main page.
+# Possible values:
+# 0 - Open all in same browser window
+# 1 - Open detailed reports in another window except if using frames
+# 2 - Open always in a different window even if reports are framed
+# Default: 1
+#
+DetailedReportsOnNewWindows=1
+
+
+# You can add, in the HTML report page, a cache lifetime (in seconds) that
+# will be returned to browser in HTTP header answer by server.
+# This parameter is not used when report are built with -staticlinks option.
+# Example: 3600
+# Default: 0
+#
+Expires=0
+
+
+# To avoid too large web pages, you can ask AWStats to limit number of rows of
+# all reported charts to this number when no other limit apply.
+# Default: 1000
+#
+MaxRowsInHTMLOutput=1000
+
+
+# Set your primary language (ISO-639-1 language codes).
+# Possible value:
+#  Albanian=al, Bosnian=ba, Bulgarian=bg, Catalan=ca,
+#  Chinese (Taiwan)=tw, Chinese (Simpliefied)=cn, Czech=cz, Danish=dk,
+#  Dutch=nl, English=en, Estonian=et, Euskara=eu, Finnish=fi,
+#  French=fr, Galician=gl, German=de, Greek=gr, Hebrew=he, Hungarian=hu,
+#  Icelandic=is, Indonesian=id, Italian=it, Japanese=jp, Korean=kr,
+#  Latvian=lv, Norwegian (Nynorsk)=nn, Norwegian (Bokmal)=nb, Polish=pl,
+#  Portuguese=pt, Portuguese (Brazilian)=br, Romanian=ro, Russian=ru,
+#  Serbian=sr, Slovak=sk, Slovenian=si, Spanish=es, Swedish=se, Turkish=tr,
+#  Ukrainian=ua, Welsh=cy.
+#  First available language accepted by browser=auto
+# Default: "auto"
+#
+Lang="auto"
+
+
+# Set the location of language files.
+# Example: "/usr/share/awstats/lang"
+# Default: "./lang" (means lang directory is in same location than awstats.pl)
+#
+DirLang="/usr/share/awstats/lang"
+
+
+# Show menu header with reports' links
+# Possible values: 0 or 1
+# Default: 1
+#
+ShowMenu=1					
+
+
+# You choose here which reports you want to see in the main page and what you
+# want to see in those reports.
+# Possible values:
+#  0  - Report is not shown at all
+#  1  - Report is shown in main page with an entry in menu and default columns
+# XYZ - Report shows column informations defined by code X,Y,Z...
+#       X,Y,Z... are code letters among the following:
+#        U = Unique visitors
+#        V = Visits
+#        P = Number of pages
+#        H = Number of hits (or mails)
+#        B = Bandwith (or total mail size for mail logs)
+#        L = Last access date
+#        E = Entry pages
+#        X = Exit pages
+#        C = Web compression (mod_gzip,mod_deflate)
+#        M = Average mail size (mail logs)
+#
+
+# Show monthly summary
+# Context: Web, Streaming, Mail, Ftp
+# Default: UVPHB, Possible column codes: UVPHB
+ShowSummary=UVPHB
+
+# Show monthly chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: UVPHB, Possible column codes: UVPHB
+ShowMonthStats=UVPHB
+
+# Show days of month chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: VPHB, Possible column codes: VPHB
+ShowDaysOfMonthStats=VPHB
+
+# Show days of week chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: PHB, Possible column codes: PHB
+ShowDaysOfWeekStats=PHB
+
+# Show hourly chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: PHB, Possible column codes: PHB
+ShowHoursStats=PHB
+
+# Show domains/country chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: PHB, Possible column codes: PHB
+ShowDomainsStats=PHB
+
+# Show hosts chart
+# Context: Web, Streaming, Mail, Ftp
+# Default: PHBL, Possible column codes: PHBL
+ShowHostsStats=PHBL
+
+# Show authenticated users chart
+# Context: Web, Streaming, Ftp
+# Default: 0, Possible column codes: PHBL
+ShowAuthenticatedUsers=0
+
+# Show robots chart
+# Context: Web, Streaming
+# Default: HBL, Possible column codes: HBL
+ShowRobotsStats=HBL
+
+# Show worms chart
+# Context: Web, Streaming
+# Default: 0 (If set to other than 0, see also LevelForWormsDetection), Possible column codes: HBL
+ShowWormsStats=0
+
+# Show email senders chart (For use when analyzing mail log files)
+# Context: Mail
+# Default: 0, Possible column codes: HBML
+ShowEMailSenders=0
+
+# Show email receivers chart (For use when analyzing mail log files)
+# Context: Mail
+# Default: 0, Possible column codes: HBML
+ShowEMailReceivers=0
+
+# Show session chart
+# Context: Web, Streaming, Ftp
+# Default: 1, Possible column codes: None
+ShowSessionsStats=1
+
+# Show pages-url chart.
+# Context: Web, Streaming, Ftp
+# Default: PBEX, Possible column codes: PBEX
+ShowPagesStats=PBEX
+
+# Show file types chart.
+# Context: Web, Streaming, Ftp
+# Default: HB, Possible column codes: HBC
+ShowFileTypesStats=HB
+
+# Show file size chart (Not yet available)
+# Context: Web, Streaming, Mail, Ftp
+# Default: 1, Possible column codes: None
+ShowFileSizesStats=0		
+
+# Show operating systems chart
+# Context: Web, Streaming, Ftp
+# Default: 1, Possible column codes: None
+ShowOSStats=1
+
+# Show browsers chart
+# Context: Web, Streaming
+# Default: 1, Possible column codes: None
+ShowBrowsersStats=1
+
+# Show screen size chart
+# Context: Web, Streaming
+# Default: 0 (If set to 1, see also MiscTrackerUrl), Possible column codes: None
+ShowScreenSizeStats=0
+
+# Show origin chart
+# Context: Web, Streaming
+# Default: PH, Possible column codes: PH
+ShowOriginStats=PH
+
+# Show keyphrases chart
+# Context: Web, Streaming
+# Default: 1, Possible column codes: None
+ShowKeyphrasesStats=1
+
+# Show keywords chart
+# Context: Web, Streaming
+# Default: 1, Possible column codes: None
+ShowKeywordsStats=1
+
+# Show misc chart
+# Context: Web, Streaming
+# Default: a (See also MiscTrackerUrl parameter), Possible column codes: anjdfrqwp
+ShowMiscStats=a
+
+# Show http errors chart
+# Context: Web, Streaming
+# Default: 1, Possible column codes: None
+ShowHTTPErrorsStats=1
+
+# Show smtp errors chart (For use when analyzing mail log files)
+# Context: Mail
+# Default: 0, Possible column codes: None
+ShowSMTPErrorsStats=0
+
+# Show the cluster report (Your LogFormat must contains the %cluster tag)
+# Context: Web, Streaming, Ftp
+# Default: 0, Possible column codes: PHB
+ShowClusterStats=0
+
+
+# Some graphical reports are followed by the data array of values.
+# If you don't want this array (to reduce report size for example), you can
+# set thoose options to 0.
+# Possible values: 0 or 1
+# Default: 1
+#
+# Data array values for the ShowMonthStats report
+AddDataArrayMonthStats=1
+# Data array values for the ShowDaysOfMonthStats report
+AddDataArrayShowDaysOfMonthStats=1
+# Data array values for the ShowDaysOfWeekStats report
+AddDataArrayShowDaysOfWeekStats=1
+# Data array values for the ShowHoursStats report
+AddDataArrayShowHoursStats=1
+
+
+# In the Origin chart, you have stats on where your hits came from. You can
+# includes hits on pages that comes from pages of same sites in this chart.
+# Possible values: 0 or 1
+# Default: 0
+#
+IncludeInternalLinksInOriginSection=0
+
+
+# Following parameter can be used to choose maximum number of lines shown for
+# the particular following report.
+#
+# Stats by countries/domains
+MaxNbOfDomain = 10
+MinHitDomain  = 1
+# Stats by hosts
+MaxNbOfHostsShown = 10
+MinHitHost    = 1
+# Stats by authenticated users
+MaxNbOfLoginShown = 10
+MinHitLogin   = 1
+# Stats by robots
+MaxNbOfRobotShown = 10
+MinHitRobot   = 1
+# Stats by pages
+MaxNbOfPageShown = 10
+MinHitFile    = 1
+# Stats by OS
+MaxNbOfOsShown = 10
+MinHitOs      = 1
+# Stats by browsers
+MaxNbOfBrowsersShown = 10
+MinHitBrowser = 1
+# Stats by screen size
+MaxNbOfScreenSizesShown = 5
+MinHitScreenSize = 1
+# Stats by window size (following 2 parameters are not yet used)
+MaxNbOfWindowSizesShown = 5
+MinHitWindowSize = 1
+# Stats by referers
+MaxNbOfRefererShown = 10
+MinHitRefer   = 1
+# Stats for keyphrases
+MaxNbOfKeyphrasesShown = 10
+MinHitKeyphrase = 1
+# Stats for keywords
+MaxNbOfKeywordsShown = 10
+MinHitKeyword = 1
+# Stats for sender or receiver emails
+MaxNbOfEMailsShown = 20
+MinHitEMail   = 1
+
+
+# Choose if you want the week report to start on sunday or monday
+# Possible values:
+# 0 - Week start on sunday
+# 1 - Week start on monday
+# Default: 1
+#
+FirstDayOfWeek=1
+
+
+# List of visible flags that links to other language translations.
+# See Lang parameter for list of allowed flag/language codes.
+# If you don't want any flag link, set ShowFlagLinks to "".
+# This parameter is used only if ShowMenu parameter is set to 1.
+# Possible values: "" or "language_codes_separated_by_space"
+# Example: "en es fr nl de"
+# Default: ""
+#
+ShowFlagLinks=""
+
+
+# Each URL, shown in stats report views, are links you can click.
+# Possible values: 0 or 1
+# Default: 1
+#
+ShowLinksOnUrl=1
+
+
+# When AWStats build HTML links in its report pages, it starts thoose link
+# with "http://";. However some links might be HTTPS links, so you can enter
+# here the root of all your HTTPS links. If all your site is a SSL web site,
+# just enter "/".
+# This parameter is not used if ShowLinksOnUrl is 0.
+# Example: "/shopping"
+# Example: "/"
+# Default: ""
+#
+UseHTTPSLinkForUrl=""
+
+
+# Maximum length of URL part shown on stats page (number of characters).
+# This affects only URL visible text, link still work.
+# Default: 64
+#
+MaxLengthOfShownURL=64
+
+
+# You can enter HTML code that will be added at the top of AWStats reports.
+# Default: ""
+#
+HTMLHeadSection=""
+
+
+# You can enter HTML code that will be added at the end of AWStats reports.
+# Great to add advert ban.
+# Default: ""
+#
+HTMLEndSection=""
+
+
+# You can set Logo and LogoLink to use your own logo.
+# Logo must be the name of image file (must be in $DirIcons/other directory).
+# LogoLink is the expected URL when clicking on Logo.
+# Default: "awstats_logo6.png"
+#
+Logo="awstats_logo6.png"
+LogoLink="http://awstats.sourceforge.net";
+
+
+# Value of maximum bar width/height for horizontal/vertical HTML graphics bar.
+# Default: 260/90
+#
+BarWidth   = 260
+BarHeight  = 90
+
+
+# You can ask AWStats to use a particular CSS (Cascading Style Sheet) to
+# change its look. To create a style sheet, you can use samples provided with
+# AWStats in wwwroot/css directory.
+# Example: "/awstatscss/awstats_bw.css"
+# Example: "/css/awstats_bw.css"
+# Default: ""
+#
+StyleSheet=""
+
+
+# Those colors parameters can be used (if StyleSheet parameter is not used)
+# to change AWStats look.
+# Example: color_name="RRGGBB"	# RRGGBB is Red Green Blue components in Hex
+#
+color_Background="FFFFFF"		# Background color for main page (Default = "FFFFFF")
+color_TableBGTitle="CCCCDD"		# Background color for table title (Default = "CCCCDD")
+color_TableTitle="000000"		# Table title font color (Default = "000000")
+color_TableBG="CCCCDD"			# Background color for table (Default = "CCCCDD")
+color_TableRowTitle="FFFFFF"	# Table row title font color (Default = "FFFFFF")
+color_TableBGRowTitle="ECECEC"	# Background color for row title (Default = "ECECEC")
+color_TableBorder="ECECEC"		# Table border color (Default = "ECECEC")
+color_text="000000"				# Color of text (Default = "000000")
+color_textpercent="606060"		# Color of text for percent values (Default = "606060")
+color_titletext="000000"		# Color of text title within colored Title Rows (Default = "000000")
+color_weekend="EAEAEA"			# Color for week-end days (Default = "EAEAEA")
+color_link="0011BB"				# Color of HTML links (Default = "0011BB")
+color_hover="605040"			# Color of HTML on-mouseover links (Default = "605040") 
+color_u="FFAA66"				# Background color for number of unique visitors (Default = "FFAA66")
+color_v="F4F090"				# Background color for number of visites (Default = "F4F090")
+color_p="4477DD"				# Background color for number of pages (Default = "4477DD")
+color_h="66DDEE"				# Background color for number of hits (Default = "66DDEE")
+color_k="2EA495"				# Background color for number of bytes (Default = "2EA495")
+color_s="8888DD"				# Background color for number of search (Default = "8888DD")
+color_e="CEC2E8"				# Background color for number of entry pages (Default = "CEC2E8")
+color_x="C1B2E2"				# Background color for number of exit pages (Default = "C1B2E2")
+
+
+
+#-----------------------------------------------------------------------------
+# PLUGINS
+#-----------------------------------------------------------------------------
+
+# Add here all plugins file you want to load.
+# Plugin files must be .pm files stored in 'plugins' directory.
+# Uncomment LoadPlugin lines to enable a plugin after checking that perl
+# modules required by the plugin are installed.
+
+# Plugin: Tooltips
+# Perl modules required: None
+# Add some tooltips help on HTML report pages.
+# Note that enabled this kind of help will increased HTML report pages size,
+# so server load and bandwidth.
+#
+#LoadPlugin="tooltips"
+
+# Plugin: DecodeUTFKeys
+# Perl modules required: Encode and URI::Escape
+# Allow AWStats to show correctly (in language charset) keywords/keyphrases
+# strings even if they were UTF8 coded by the referer search engine.
+#
+#LoadPlugin="decodeutfkeys"
+
+# Plugin: IPv6
+# Perl modules required: Net::IP and Net::DNS
+# This plugin gives AWStats capability to make reverse DNS lookup on IPv6
+# addresses.
+# Note: If you are interesting in having country report, you should use the
+# geoipfree or geoip plugin instead of enabled reverse DNS lookup.
+#
+#LoadPlugin="ipv6"
+
+# Plugin: HashFiles
+# Perl modules required: Storable
+# AWStats DNS cache files are read/saved as native hash files. This increase
+# DNS cache files loading speed, above all for very large web sites.
+#
+LoadPlugin="hashfiles"
+
+# Plugin: GeoIP
+# Perl modules required: Geo::IP or Geo::IP::PurePerl (from Maxmind)
+# Country chart is built from an Internet IP-Country database.
+# This plugin is useless for intranet only log files.
+# Note: You must choose between using this plugin (need Perl Geo::IP module 
+# from Maxmind, database more up to date) or the GeoIPfree plugin (need
+# Perl Geo::IPfree module, database less up to date).
+# This plugin reduces AWStats speed of 8% !
+#
+#LoadPlugin="geoip GEOIP_STANDARD"
+
+# Plugin: GeoIPfree
+# Perl modules required: Geo::IPfree version 0.2+ (from Graciliano M.P.)
+# Country chart is built from an Internet IP-Country database.
+# This plugin is useless for intranet only log files.
+# Note: You must choose between using this plugin (need Perl Geo::IPfree
+# module, database less up to date) or the GeoIP plugin (need Perl Geo::IP
+# module from Maxmind, database more up to date).
+# Note: Activestate provide a corrupted version of Geo::IPfree 0.2 Perl
+# module, so install it from elsewhere (from www.cpan.org for example).
+# This plugin reduces AWStats speed of 10% !
+#
+#LoadPlugin="geoipfree"
+
+# Plugin: GeoIP_Region_Maxmind
+# Perl modules required: Geo::IP (from Maxmind)
+# This plugin add a chart of hits by regions. Only regions for US and 
+# Canada can be detected.
+# Note: This plugin need Maxmind GeoIP Perl module AND the region database.
+# Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState
+# on Windows but it works great on Linux with default Perl.
+# You need to purchase a license from Maxmind to get/use the Region database.
+# This plugin reduces AWStats speed.
+#
+#LoadPlugin="geoip_region_maxmind GEOIP_STANDARD /pathto/GeoIPRegion.dat"
+
+# Plugin: GeoIP_City_Maxmind
+# Perl modules required: Geo::IP (from Maxmind)
+# This plugin add a chart of hits by cities.
+# Note: This plugin need Maxmind GeoIP Perl module AND the city database.
+# Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState
+# on Windows but it works great on Linux with default Perl.
+# You need to purchase a license from Maxmind to get/use the City database.
+# This plugin reduces AWStats speed.
+#
+#LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /pathto/GeoIPCity.dat"
+
+# Plugin: GeoIP_ISP_Maxmind
+# Perl modules required: Geo::IP (from Maxmind)
+# This plugin add a chart of hits by ISP.
+# Note: This plugin need Maxmind GeoIP Perl module AND the ISP database.
+# Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState
+# on Windows but it works great on Linux with default Perl.
+# You need to purchase a license from Maxmind to get/use the ISP database.
+# This plugin reduces AWStats speed.
+#
+#LoadPlugin="geoip_isp_maxmind GEOIP_STANDARD /pathto/GeoIPISP.dat"
+
+# Plugin: GeoIP_Org_Maxmind
+# Perl modules required: Geo::IP (from Maxmind)
+# This plugin add a chart of hits by Organization name
+# Note: This plugin need Maxmind GeoIP Perl module AND the Org database.
+# Note: I get some problem with Maxmind Geo::IP Perl module with ActiveState
+# on Windows but it works great on Linux with default Perl.
+# You need to purchase a license from Maxmind to get/use the Org database.
+# This plugin reduces AWStats speed.
+#
+#LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /pathto/GeoIPOrg.dat"
+
+# Plugin: UserInfo
+# Perl modules required: None
+# Add a text (Firtname, Lastname, Office Department, ...) in authenticated user
+# reports for each login value.
+# A text file called userinfo.myconfig.txt, with two fields (first is login,
+# second is text to show, separated by a tab char) must be created in DirData
+# directory.
+#
+#LoadPlugin="userinfo"
+
+# Plugin: HostInfo
+# Perl modules required: Net::XWhois
+# Add a column into host chart with a link to open a popup window that shows
+# info on host (like whois records).
+#
+#LoadPlugin="hostinfo"
+
+# Plugin: ClusterInfo
+# Perl modules required: None
+# Add a text (for example a full hostname) in cluster reports for each cluster
+# number.
+# A text file called clusterinfo.myconfig.txt, with two fields (first is
+# cluster number, second is text to show) separated by a tab char. must be
+# created into DirData directory.
+# Note this plugin is useless if ShowClusterStats is set to 0 or if you don't
+# use a personalized log format that contains %cluster tag.
+#
+#LoadPlugin="clusterinfo"
+
+# Plugin: UrlAliases
+# Perl modules required: None
+# Add a text (Page title, description...) in URL reports before URL value.
+# A text file called urlalias.myconfig.txt, with two fields (first is URL,
+# second is text to show, separated by a tab char) must be created into
+# DirData directory.
+#
+#LoadPlugin="urlalias"
+
+# Plugin: TimeHiRes
+# Perl modules required: Time::HiRes (if Perl < 5.8)
+# Time reported by -showsteps option is in millisecond. For debug purpose.
+#
+#LoadPlugin="timehires"		
+
+# Plugin: TimeZone
+# Perl modules required: Time::Local
+# Allow AWStats to correct a bad timezone for user of some IIS that use
+# GMT date in its log instead of local server time.
+# This module is useless for Apache and most IIS version.
+# This plugin reduces AWStats speed of 40% !!!!!!!
+#
+#LoadPlugin="timezone +2"
+
+# Plugin: Rawlog
+# Perl modules required: None
+# This plugin adds a form in AWStats main page to allow users to see raw
+# content of current log files. A filter is also available.
+#
+#LoadPlugin="rawlog"
+
+# Plugin: GraphApplet
+# Perl modules required: None
+# Supported charts are built by a 3D graphic applet.
+#
+#LoadPlugin="graphapplet /awstatsclasses"				# EXPERIMENTAL FEATURE
+
+
+
+#-----------------------------------------------------------------------------
+# EXTRA SECTIONS
+#-----------------------------------------------------------------------------
+
+# You can define your own charts, you choose here what are rows and columns
+# keys. This feature is particularly usefull for marketing purpose, tracking
+# products orders for example.
+# For this, edit all parameters of Extra section. Each set of parameter is a
+# different chart. For several charts, duplicate section changing the number.
+# Note: Each Extra section reduces AWStats speed by 8%.
+#
+# WARNING: A wrong setup of Extra section might result in too large arrays
+# that will consume all your memory, making AWStats unusable after several
+# updates, so be sure to setup it correctly.
+# In most cases, you don't need this feature.
+#
+# ExtraSectionNameX is title of your personalized chart.
+# ExtraSectionCodeFilterX is list of codes the record code field must match.
+#   Put an empty string for no test on code.
+# ExtraSectionConditionX are conditions you can use to count or not the hit,
+#   Use one of the field condition (URL,QUERY_STRING,REFERER,UA,HOST,extraX)
+#   and a regex to match, after a coma. Use "||" for "OR".
+# ExtraSectionFirstColumnTitleX is the first column title of the chart.
+# ExtraSectionFirstColumnValuesX is a string to tell AWStats which field to
+#   extract value from (URL,QUERY_STRING,REFERER,UA,HOST,extraX)
+#   and how to extract the value (using regex syntax). Each different value
+#   found will appear in first column of report on a different row. Be sure
+#   that list of different possible values will not grow indefinitely.
+# ExtraSectionFirstColumnFormatX is the string used to write value.
+# ExtraSectionStatTypesX are things you want to count. You can use standard
+#   code letters (P for pages,H for hits,B for bandwidth,L for last access).
+# ExtraSectionAddAverageRowX add a row at bottom of chart with average values.
+# ExtraSectionAddSumRowX add a row at bottom of chart with sum values.
+# MaxNbOfExtraX is maximum number of rows shown in chart.
+# MinHitExtraX is minimum number of hits required to be shown in chart.
+#
+
+# Example to report the 20 products the most ordered by "order.cgi" script
+#ExtraSectionName1="Product orders"
+#ExtraSectionCodeFilter1="200 304"
+#ExtraSectionCondition1="URL,\/cgi\-bin\/order\.cgi||URL,\/cgi\-bin\/order2\.cgi"
+#ExtraSectionFirstColumnTitle1="Product ID"
+#ExtraSectionFirstColumnValues1="QUERY_STRING,productid=([^&]+)"
+#ExtraSectionFirstColumnFormat1="%s"
+#ExtraSectionStatTypes1=PL
+#ExtraSectionAddAverageRow1=0
+#ExtraSectionAddSumRow1=1
+#MaxNbOfExtra1=20
+#MinHitExtra1=1
+
+
+# There is also a global parameter ExtraTrackedRowsLimit that limit the
+# number of possible rows an ExtraSection can report. This parameter is
+# here to protect too much memory use when you make a bad setup in your
+# ExtraSection. It applies to all ExtraSection independently meaning that
+# none ExtraSection can report more rows than value defined by ExtraTrackedRowsLimit.
+# If you know an ExtraSection will report more rows than its value, you should
+# increase this parameter or AWStats will stop with an error.
+# Example: 2000
+# Default: 500
+#
+ExtraTrackedRowsLimit=500
+
+
+#-----------------------------------------------------------------------------
+# INCLUDES
+#-----------------------------------------------------------------------------
+
+# You can include other config files using the directive with the name of the
+# config file.
+# This is particularly usefull for users who have a lot of virtual servers, so
+# a lot of config files and want to maintain common values in only one file.
+# Note that when a variable is defined both in a config file and in an
+# included file, AWStats will use the last value read for parameters that
+# contains one value and AWStats will concat all values from both files for
+# parameters that are lists of value.
+#
+
+Include "/etc/awstats/awstats.conf.local"
+

Added: trunk/vhffs-robots/misc/repository.awstats_6.4_vhffs.patch
===================================================================
--- trunk/vhffs-robots/misc/repository.awstats_6.4_vhffs.patch	2007-03-10 09:34:21 UTC (rev 508)
+++ trunk/vhffs-robots/misc/repository.awstats_6.4_vhffs.patch	2007-03-11 11:37:54 UTC (rev 509)
@@ -0,0 +1,24 @@
+--- /usr/lib/cgi-bin/awstats.pl	2006-05-26 09:38:54.000000000 +0200
++++ awstats.pl	2007-03-01 00:05:51.000000000 +0100
+@@ -1091,10 +1091,10 @@
+ 	my $configdir=shift;
+ 	my @PossibleConfigDir=();
+ 
+-	if ($configdir && $ENV{"AWSTATS_ENABLE_CONFIG_DIR"}) {
+-	    @PossibleConfigDir=("$configdir");
+-	}
+-	else { @PossibleConfigDir=("$DIR","/etc/awstats","/usr/local/etc/awstats","/etc","/etc/opt/awstats"); }
++	my $vhffsconfigdir = '/data/logs/repository/parsed/'.$SiteConfig.'/awstats';
++	@PossibleConfigDir=("$vhffsconfigdir");
+ 
+ 	# Open config file
+ 	$FileConfig=$FileSuffix='';
+@@ -5740,7 +5740,7 @@
+ else { @DOWIndex = (0,1,2,3,4,5,6); }
+ 
+ # Should we link to ourselves or to a wrapper script
+-$AWScript=($WrapperScript?"$WrapperScript":"$DirCgi$PROG.$Extension");
++$AWScript=($WrapperScript?"$WrapperScript":"/$DirCgi$PROG.$Extension");
+ 
+ # Print html header (Need HTMLOutput,Expires,Lang,StyleSheet,HTMLHeadSectionExpires defined by Read_Config, PageCode defined by Read_Language_Data)
+ if (! $HeaderHTMLSent) { &html_head; }

Added: trunk/vhffs-robots/misc/repository.awstats_6.5_vhffs.patch
===================================================================
--- trunk/vhffs-robots/misc/repository.awstats_6.5_vhffs.patch	2007-03-10 09:34:21 UTC (rev 508)
+++ trunk/vhffs-robots/misc/repository.awstats_6.5_vhffs.patch	2007-03-11 11:37:54 UTC (rev 509)
@@ -0,0 +1,24 @@
+--- /usr/lib/cgi-bin/awstats.pl	2006-05-26 09:38:54.000000000 +0200
++++ /data/logs/repository/awstats.pl	2007-03-11 12:12:03.000000000 +0100
+@@ -1091,10 +1091,9 @@
+ 	my $configdir=shift;
+ 	my @PossibleConfigDir=();
+ 
+-	if ($configdir && $ENV{"AWSTATS_ENABLE_CONFIG_DIR"}) {
+-	    @PossibleConfigDir=("$configdir");
+-	}
+-	else { @PossibleConfigDir=("$DIR","/etc/awstats","/usr/local/etc/awstats","/etc","/etc/opt/awstats"); }
++	my $vhffsconfigdir = '/data/logs/repository/parsed/'.$SiteConfig.'/awstats';
++	@PossibleConfigDir=("$vhffsconfigdir");
+ 
+ 	# Open config file
+ 	$FileConfig=$FileSuffix='';
+@@ -5740,7 +5739,7 @@
+ else { @DOWIndex = (0,1,2,3,4,5,6); }
+ 
+ # Should we link to ourselves or to a wrapper script
+-$AWScript=($WrapperScript?"$WrapperScript":"$DirCgi$PROG.$Extension");
++$AWScript=($WrapperScript?"$WrapperScript":"/$DirCgi$PROG.$Extension");
+ 
+ # Print html header (Need HTMLOutput,Expires,Lang,StyleSheet,HTMLHeadSectionExpires defined by Read_Config, PageCode defined by Read_Language_Data)
+ if (! $HeaderHTMLSent) { &html_head; }

Added: trunk/vhffs-robots/misc/repository.awstats_htaccess_example
===================================================================
--- trunk/vhffs-robots/misc/repository.awstats_htaccess_example	2007-03-10 09:34:21 UTC (rev 508)
+++ trunk/vhffs-robots/misc/repository.awstats_htaccess_example	2007-03-11 11:37:54 UTC (rev 509)
@@ -0,0 +1,4 @@
+RewriteEngine on
+RewriteRule ^([a-zA-Z0-9\.\-]+)/$ /awstats.pl?config=$1
+RewriteRule ^([a-zA-Z0-9\.\-]+)/([0-9]{4})/$ /awstats.pl?config=$1&year=$2
+RewriteRule ^([a-zA-Z0-9\.\-]+)/([0-9]{4})/([0-9]{2})/$ /awstats.pl?config=$1&year=$2&month=$3

Added: trunk/vhffs-robots/src/generate_repositorystats.pl
===================================================================
--- trunk/vhffs-robots/src/generate_repositorystats.pl	2007-03-10 09:34:21 UTC (rev 508)
+++ trunk/vhffs-robots/src/generate_repositorystats.pl	2007-03-11 11:37:54 UTC (rev 509)
@@ -0,0 +1,244 @@
+#!/usr/bin/perl -w
+# Copyright (c) vhffs project and its contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without 
+# modification, are permitted provided that the following conditions 
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright 
+#   notice, this list of conditions and the following disclaimer.
+#2. Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in 
+#   the documentation and/or other materials provided with the 
+#   distribution.
+#3. Neither the name of vhffs nor the names of its contributors 
+#   may be used to endorse or promote products derived from this 
+#   software without specific prior written permission.
+#
+#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+#"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+#LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+#FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+#COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+#INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+#BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+#LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+#CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+# POSSIBILITY OF SUCH DAMAGE.
+
+
+#Your logs must be in format : "%V %h %l %u %t \"%r\" %>s %b"
+#So, add in your httpd.conf following lines :
+#LogFormat "%V %h %l %u %t \"%r\" %>s %b" vhffs
+#CustomLog /var/log/apache2/http.log vhffs
+
+use strict;
+use Vhffs::Main;
+use Vhffs::Conf;
+use Vhffs::Functions;
+use Vhffs::Services::Repository;
+
+
+my $vhffs = init Vhffs::Main;
+die "ERROR: Cannot init VHFFS !!!" if( ! defined $vhffs );
+
+my $repos = Vhffs::Services::Repository::getall( $vhffs , Vhffs::Constants::ACTIVATED );
+die "ERROR: Cannot fetch the list of repository\n" if( ! defined $repos );
+
+my $repoconf = Vhffs::Conf::get_repository_config();
+die "ERROR: A full repository configuration is needed to generate stats\n" if ( ! defined $repoconf );
+
+my $conf_datadir = Vhffs::Conf::get_datadir;
+my $log_incoming_root = $repoconf->{"log_incoming_root"};
+my $log_incoming_rotations = $repoconf->{"log_incoming_rotations"};
+my $log_incoming_compress = ( $repoconf->{"log_incoming_compress"} eq 'yes' ) ? 1 : 0;
+my $log_parsed_root = $repoconf->{"log_parsed_root"};
+my $log_parsed_rotation = $repoconf->{"log_parsed_rotation"};
+my $log_parsed_compress = ( $repoconf->{"log_parsed_compress"} eq 'yes' ) ? 1 : 0;
+my $log_awstats = $repoconf->{"log_awstats"};
+my $awstats_sample = $repoconf->{"log_awstats_sample"};
+my $log_apachelocal = ( $repoconf->{"log_apachelocal"} eq 'yes' ) ? 1 : 0;
+my $log_apachectl = $repoconf->{"log_apachectl"};
+
+die "ERROR: ".$log_incoming_root." is not a directory" if( ! -d $log_incoming_root );
+die "ERROR: ".$log_parsed_root." is not a directory" if( ! -d $log_parsed_root );
+die "ERROR: ".$log_awstats." does no exist" if( ! -f $log_awstats );
+die "ERROR: cannot find the awstat sample at ".$awstats_sample if( ! -f $awstats_sample );
+die "ERROR: cannot find the apache2ctl binary at ".$log_apachectl if( $log_apachelocal  &&  ! -f $log_apachectl );
+
+my %repositorys;
+foreach ( @{$repos} )  {
+	$repositorys{$_->get_name} = 1;
+}
+
+my @downloadservers;
+my $downloadserver;
+my @files;
+
+# -- Rotate servers logs (all *.log files, I know that the suffix is hardcoded but I don't
+#    bother to add a configuration entry for that, it's already too complicated, and, who would
+#    like anything other than .log ? ).
+
+opendir( DIR , $log_incoming_root );
+@files = readdir( DIR );
+
+foreach( @files )  {
+	next if( /\./ );
+	if( -d $log_incoming_root."/".$_ )  {
+		push @downloadservers, $_;
+	}
+}
+closedir( DIR );
+
+foreach $downloadserver ( @downloadservers )  {
+	opendir ( DIR , $log_incoming_root."/".$downloadserver );
+	@files = readdir( DIR );
+
+	foreach ( @files )  {
+		if( /.*\.log$/ )  {
+			Vhffs::Functions::rotate_log( $log_incoming_root."/".$downloadserver."/".$_ , $log_incoming_rotations , $log_incoming_compress );
+		}
+	}
+
+	# put a file to tell webserver to restart (ugly signaling over nfs, I know I know... but IT WORKS, it is secure, and doesn't consume too much CPU !)
+	open( FILECYCLE , "> ".$log_incoming_root."/".$downloadserver."/cycleok" );
+	print FILECYCLE "";
+	close( FILECYCLE );
+}
+
+# Restart locally or wait 180 seconds to be sure all apache are restarted (welcome to the land of pigs)
+if( $log_apachelocal )  {
+	my $cmd = $log_apachectl." graceful";
+	system ( $cmd );
+} else {
+	sleep ( 180 );
+}
+
+# Deleting previous logs
+unlink $log_incoming_root."/mergedlog" if( -f $log_incoming_root."/mergedlog" );
+unlink $log_incoming_root."/rejectlog" if( -f $log_incoming_root."/rejectlog" );
+
+# Merge all logs
+my $cmd = "mergelog ".$log_incoming_root."/*/http.log.0 ".$log_incoming_root."/*/ftp.log.0 > ".$log_incoming_root."/mergedlog";
+system ( $cmd );
+
+# Parse http logs
+my $prev = "";
+my $ddir = $conf_datadir."/repository/";
+$ddir =~ s%[/]{2,}%/%g;
+
+open( MERGEDIN , "< ".$log_incoming_root."/mergedlog" );
+open( REJECTOUT, "> ".$log_incoming_root."/rejectlog" );
+
+while( my $line = <MERGEDIN> )  {
+
+	$line =~ s/\n//;
+
+	# is it a ftp or http log ?
+	my ( undef , undef , $type , undef ) = split( /\ /, $line, 4);
+
+	# modify loglines to produce an uniformised output for ftp and http
+	if( $type eq 'ftp' )  {
+
+		# remove the "/data/repository/" part of the query
+		$line =~ s%$ddir%%g;
+		$line =~ s%$%\ \"\-\"\ \"\-\"%;
+
+		# add HTTP/1.1 at the end of the query
+		my ( $part1 , $part2 ) = split( /\]/, $line, 2);
+		my ( $part21 , $part22 , $part23 ) = split( /\"/ , $part2 , 3);
+
+		$line = $part1.']'.$part21.'"'.$part22.' HTTP/1.1"'.$part23;
+
+	}  else  {
+
+		# remove the http:// part of the query if it exists
+		my ( $part1 , $part2 ) = split( /\]/, $line, 2);
+		my ( $part21 , $part22 , $part23 ) = split( /\"/ , $part2 , 3);
+
+		if( $part22 =~ /^\w+\ http:\/\/.+$/ ) {
+			my ( $part221 , undef ) = split( /\ / , $part22 , 2);
+			my ( undef, undef, undef, $part222) = split( /\// , $part22 , 4);
+
+			$line = $part1.']'.$part21.'"'.$part221.' /'.$part222.'"'.$part23;
+		}
+	}
+
+	# now fetch the download area and modify the logline to discard download area information
+	my ( $part1 , $part2 ) = split( /\]/, $line, 2);
+	my ( $part21 , $part22 , $part23 ) = split( /\"/ , $part2 , 3);
+
+	my ( $part221 , $area , $part223 ) = split( /\// , $part22 , 3);
+	my $log = $part1.']'.$part21.'"'.$part221.'/'.$part223.'"'.$part23;
+
+	# append log line to the concerned download area
+	if ( defined $area && defined $log )  {
+
+		# We are _NOT_ hosting this repository
+		if( ! exists $repositorys{$area} )  {
+
+			print REJECTOUT $area." ".$log."\n";
+		}
+
+		# We host this repository
+		else  {
+			# the repository changed
+			if ( $prev ne $area )  {
+				my $dir = $log_parsed_root."/".$area."/logs";
+				Vhffs::Functions::create_dir($dir) if ( ! -d $dir );
+
+				my $lff = $dir."/access.log";
+				close(FILEOUT);
+				open( FILEOUT , ">> ".$lff );
+				$prev = $area;
+			}
+
+			print FILEOUT $log."\n";
+		}
+	}
+}
+
+close(MERGEDIN);
+close(REJECTOUT);
+close(FILEOUT);
+
+
+# Create a configuration file and generate statistic for each website
+foreach ( @{$repos} )
+{
+	my $reponame = $_->get_name;
+
+	my $weblogdir = $log_parsed_root."/".$reponame;
+	my $logpath = $weblogdir."/logs/access.log";
+	my $datadir = $weblogdir."/awstats";
+	my $conffile = $datadir."/awstats.".$reponame.".conf";
+
+	next if ( ! -f $logpath );
+	Vhffs::Functions::create_dir($datadir) if ( ! -d $datadir );
+
+	# Create the config file
+	open( AWFILEIN , "< ".$awstats_sample );
+	open( AWFILEOUT , "> ".$conffile );
+
+	while( my $line = <AWFILEIN> )
+	{
+		$line =~ s/MY_DOMAINNAME/$reponame/g;
+		$line =~ s/MY_LOGPATH/$logpath/g;
+		$line =~ s/MY_DATADIR/$datadir/g;
+		
+		print AWFILEOUT $line;
+	}
+
+	close( AWFILEOUT );
+	close( AWFILEIN );
+
+	# Generate statistics
+	$cmd = $log_awstats." -config=".$reponame." -update 2>/dev/null 1>/dev/null";
+	system( $cmd );
+
+	# Rotate logs for this website
+	Vhffs::Functions::rotate_log( $logpath , $log_parsed_rotation , $log_parsed_compress );
+}


Property changes on: trunk/vhffs-robots/src/generate_repositorystats.pl
___________________________________________________________________
Name: svn:executable
   + *


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/