diff --git a/apache/files/www-webalizer.sh b/apache/files/www-webalizer.sh new file mode 100755 index 0000000..e1da12e --- /dev/null +++ b/apache/files/www-webalizer.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +umask 022 + +for cfg in /etc/webalizer/http/*.conf /etc/webalizer/https/*.conf; do + test -f ${cfg} && /usr/bin/webalizer -c ${cfg} +done diff --git a/apache/manifests/init.pp b/apache/manifests/init.pp index f639ea9..6d739d4 100644 --- a/apache/manifests/init.pp +++ b/apache/manifests/init.pp @@ -143,6 +143,17 @@ define apache::site($aliases="", $root="", $config="", $redirect="") { } } + if !$redirect { + $site_fqdn = $name ? { + "default" => "${fqdn}", + default => "${name}", + } + apache::webalizer::site { "http/${site_fqdn}": + site_proto => "http", + site_fqdn => $site_fqdn, + } + } + } @@ -226,6 +237,15 @@ define apache::sslsite($root="", $config="", $ssl_cert="", $ssl_key="", $ssl_cha } } + $site_fqdn = $name ? { + "default" => "${fqdn}", + default => "${name}", + } + apache::webalizer::site { "https/${site_fqdn}": + site_proto => "https", + site_fqdn => $site_fqdn, + } + } @@ -378,3 +398,115 @@ class apache::mod::wsgi { } } + + +# Install and configure webalizer. +# +class apache::webalizer { + + package { "webalizer": + ensure => installed, + } + + file { [ "/srv/www/webalizer", + "/srv/www/webalizer/history", + "/srv/www/webalizer/history/http", + "/srv/www/webalizer/history/https", + "/srv/www/webalizer/html/http", + "/srv/www/webalizer/html/https", + "/srv/www/webalizer/html", ]: + ensure => directory, + mode => 0755, + owner => $operatingsystem ? { + debian => root, + ubuntu => root, + default => webalizer, + }, + group => root, + require => [ File["/srv/www"], Package["webalizer"], ], + } + + file { [ "/etc/webalizer", + "/etc/webalizer/http", + "/etc/webalizer/https", ]: + ensure => directory, + mode => 0644, + owner => root, + group => root, + } + + File["/etc/webalizer/http", "/etc/webalizer/https"] { + purge => true, + force => true, + recurse => true, + source => "puppet:///custom/empty", + } + + case $operatingsystem { + debian,ubuntu: { + file { "/etc/cron.daily/webalizer": + ensure => absent, + } + } + default: { + file { "/etc/cron.daily/00webalizer": + ensure => absent, + } + } + } + + file { "/usr/local/sbin/www-webalizer.sh": + ensure => present, + source => "puppet:///apache/www-webalizer.sh", + mode => 0755, + owner => root, + group => root, + require => Package["webalizer"], + } + + cron { "www-webalizer": + ensure => present, + command => "/usr/local/sbin/www-webalizer.sh", + user => $operatingsystem ? { + debian => root, + ubuntu => root, + default => webalizer, + }, + hour => 23, + minute => 59, + require => File["/usr/local/sbin/www-webalizer.sh"], + } + + File <| tag == "webalizer" |> + +} + + +define apache::webalizer::site($site_proto, $site_fqdn) { + + @file { "/etc/webalizer/${name}.conf": + ensure => present, + mode => 0644, + owner => root, + group => root, + content => template("apache/webalizer.conf.erb"), + require => File["/etc/webalizer/${site_proto}"], + tag => "webalizer", + } + + @file { [ "/srv/www/webalizer/history/${name}", + "/srv/www/webalizer/html/${name}", ]: + ensure => directory, + mode => 0755, + owner => $operatingsystem ? { + debian => root, + ubuntu => root, + default => webalizer, + }, + group => root, + require => [ File["/srv/www/webalizer/history/${site_proto}"], + File["/srv/www/webalizer/html/${site_proto}"], ], + tag => "webalizer", + } + +} diff --git a/apache/templates/webalizer.conf.erb b/apache/templates/webalizer.conf.erb new file mode 100644 index 0000000..dc0dec0 --- /dev/null +++ b/apache/templates/webalizer.conf.erb @@ -0,0 +1,569 @@ +# +# Sample Webalizer configuration file +# Copyright 1997-2000 by Bradford L. Barrett (brad@mrunix.net) +# +# Distributed under the GNU General Public License. See the +# files "Copyright" and "COPYING" provided with the webalizer +# distribution for additional information. +# +# This is a sample configuration file for the Webalizer (ver 2.01) +# Lines starting with pound signs '#' are comment lines and are +# ignored. Blank lines are skipped as well. Other lines are considered +# as configuration lines, and have the form "ConfigOption Value" where +# ConfigOption is a valid configuration keyword, and Value is the value +# to assign that configuration option. Invalid keyword/values are +# ignored, with appropriate warnings being displayed. There must be +# at least one space or tab between the keyword and its value. +# +# As of version 0.98, The Webalizer will look for a 'default' configuration +# file named "webalizer.conf" in the current directory, and if not found +# there, will look for "/etc/webalizer.conf". + + +# LogFile defines the web server log file to use. If not specified +# here or on on the command line, input will default to STDIN. If +# the log filename ends in '.gz' (ie: a gzip compressed file), it will +# be decompressed on the fly as it is being read. + +LogFile /srv/www/log/<%= name %>/access_log + +# LogType defines the log type being processed. Normally, the Webalizer +# expects a CLF or Combined web server log as input. Using this option, +# you can process ftp logs as well (xferlog as produced by wu-ftp and +# others), or Squid native logs. Values can be 'clf', 'ftp' or 'squid', +# with 'clf' the default. + +#LogType clf + +# OutputDir is where you want to put the output files. This should +# should be a full path name, however relative ones might work as well. +# If no output directory is specified, the current directory will be used. + +OutputDir /srv/www/webalizer/html/<%= name %> + +# HistoryName allows you to specify the name of the history file produced +# by the Webalizer. The history file keeps the data for up to 12 months +# worth of logs, used for generating the main HTML page (index.html). +# The default is a file named "webalizer.hist", stored in the specified +# output directory. If you specify just the filename (without a path), +# it will be kept in the specified output directory. Otherwise, the path +# is relative to the output directory, unless absolute (leading /). + +HistoryName /srv/www/webalizer/history/<%= name %>/webalizer.hist + +# Incremental processing allows multiple partial log files to be used +# instead of one huge one. Useful for large sites that have to rotate +# their log files more than once a month. The Webalizer will save its +# internal state before exiting, and restore it the next time run, in +# order to continue processing where it left off. This mode also causes +# The Webalizer to scan for and ignore duplicate records (records already +# processed by a previous run). See the README file for additional +# information. The value may be 'yes' or 'no', with a default of 'no'. +# The file 'webalizer.current' is used to store the current state data, +# and is located in the output directory of the program (unless changed +# with the IncrementalName option below). Please read at least the section +# on Incremental processing in the README file before you enable this option. + +Incremental yes + +# IncrementalName allows you to specify the filename for saving the +# incremental data in. It is similar to the HistoryName option where the +# name is relative to the specified output directory, unless an absolute +# filename is specified. The default is a file named "webalizer.current" +# kept in the normal output directory. If you don't specify "Incremental" +# as 'yes' then this option has no meaning. + +IncrementalName /srv/www/webalizer/history/<%= name %>/webalizer.current + +# ReportTitle is the text to display as the title. The hostname +# (unless blank) is appended to the end of this string (seperated with +# a space) to generate the final full title string. +# Default is (for english) "Usage Statistics for". + +#ReportTitle Usage Statistics for + +# HostName defines the hostname for the report. This is used in +# the title, and is prepended to the URL table items. This allows +# clicking on URL's in the report to go to the proper location in +# the event you are running the report on a 'virtual' web server, +# or for a server different than the one the report resides on. +# If not specified here, or on the command line, webalizer will +# try to get the hostname via a uname system call. If that fails, +# it will default to "localhost". + +HostName <%= site_fqdn %> + +# HTMLExtension allows you to specify the filename extension to use +# for generated HTML pages. Normally, this defaults to "html", but +# can be changed for sites who need it (like for PHP embeded pages). + +#HTMLExtension html + +# PageType lets you tell the Webalizer what types of URL's you +# consider a 'page'. Most people consider html and cgi documents +# as pages, while not images and audio files. If no types are +# specified, defaults will be used ('htm*', 'cgi' and HTMLExtension +# if different for web logs, 'txt' for ftp logs). + +PageType htm* +PageType cgi +PageType php +PageType shtml +#PageType phtml +#PageType php3 +#PageType pl + +# UseHTTPS should be used if the analysis is being run on a +# secure server, and links to urls should use 'https://' instead +# of the default 'http://'. If you need this, set it to 'yes'. +# Default is 'no'. This only changes the behaviour of the 'Top +# URL's' table. + +UseHTTPS <% if site_proto == 'https' %>yes<% else %>no<% end %> + +# DNSCache specifies the DNS cache filename to use for reverse DNS lookups. +# This file must be specified if you wish to perform name lookups on any IP +# addresses found in the log file. If an absolute path is not given as +# part of the filename (ie: starts with a leading '/'), then the name is +# relative to the default output directory. See the DNS.README file for +# additional information. + +DNSCache /srv/www/webalizer/history/dns_cache.db + +# DNSChildren allows you to specify how many "children" processes are +# run to perform DNS lookups to create or update the DNS cache file. +# If a number is specified, the DNS cache file will be created/updated +# each time the Webalizer is run, immediately prior to normal processing, +# by running the specified number of "children" processes to perform +# DNS lookups. If used, the DNS cache filename MUST be specified as +# well. The default value is zero (0), which disables DNS cache file +# creation/updates at run time. The number of children processes to +# run may be anywhere from 1 to 100, however a large number may effect +# normal system operations. Reasonable values should be between 5 and +# 20. See the DNS.README file for additional information. + +DNSChildren 10 + +# HTMLPre defines HTML code to insert at the very beginning of the +# file. Default is the DOCTYPE line shown below. Max line length +# is 80 characters, so use multiple HTMLPre lines if you need more. + +#HTMLPre + +# HTMLHead defines HTML code to insert within the
+# block, immediately after the