Viewing file: awstats_updateall.pl (5.38 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl #------------------------------------------------------------------------------ # Launch update process for all config files found in a particular directory. # See COPYING.TXT file about AWStats GNU General Public License. #------------------------------------------------------------------------------ # $Revision: 1.15 $ - $Author: eldy $ - $Date: 2006/07/23 22:57:48 $
#------------------------------------------------------------------------------ # Defines #------------------------------------------------------------------------------ my $REVISION='$Revision: 1.15 $'; $REVISION =~ /\s(.*)\s/; $REVISION=$1; my $VERSION="1.0 (build $REVISION)";
# Default value of DIRCONFIG my $DIRCONFIG = "/etc/awstats";
my $Debug=0;
my $Awstats='awstats.pl';
my $AwstatsDir=''; my $AwstatsProg=''; my $LastLine='';
#------------------------------------------------------------------------------ # Functions #------------------------------------------------------------------------------
#------------------------------------------------------------------------------ # Function: Write error message and exit # Parameters: $message # Input: None # Output: None # Return: None #------------------------------------------------------------------------------ sub error { print STDERR "Error: $_[0].\n"; exit 1; }
#------------------------------------------------------------------------------ # Function: Write debug message and exit # Parameters: $string $level # Input: %HTMLOutput $Debug=required level $DEBUGFORCED=required level forced # Output: None # Return: None #------------------------------------------------------------------------------ sub debug { my $level = $_[1] || 1; if ($Debug >= $level) { my $debugstring = $_[0]; if ($ENV{"GATEWAY_INTERFACE"}) { $debugstring =~ s/^ /   /; $debugstring .= "<br />"; } print localtime(time)." - DEBUG $level - $debugstring\n"; } }
#------------------------------------------------------------------------------ # MAIN #------------------------------------------------------------------------------
# Change default value if options are used my $helpfound=0;my $nowfound=0; my %confexcluded=(); for (0..@ARGV-1) { if ($ARGV[$_] =~ /^-*h/i) { $helpfound=1; last; } if ($ARGV[$_] =~ /^-*awstatsprog=(.*)/i) { $Awstats="$1"; next; } if ($ARGV[$_] =~ /^-*configdir=(.*)/i) { $DIRCONFIG="$1"; next; } if ($ARGV[$_] =~ /^-*excludeconf=(.*)/i) { #try to get the different files to exclude @conftoexclude = split(/,/, $1); foreach (@conftoexclude) { $confexcluded{"$_"}=1; } next; } if ($ARGV[$_] =~ /^-*debug=(\d+)/i) { $Debug=$1; next; } if ($ARGV[$_] =~ /^-*lastline=(\d+)/i) { $LastLine=$1; next; } if ($ARGV[$_] =~ /^now/i) { $nowfound=1; next; } }
# Show usage help my $DIR; my $PROG; my $Extension; ($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1; if (!$nowfound || $helpfound || ! @ARGV) { print "----- $PROG $VERSION (c) Laurent Destailleur -----\n"; print "awstats_updateall launches update process for all AWStats config files (except\n"; print "awstats.model.conf) found in a particular directory, so you can easily setup a\n"; print "cron/scheduler job. The scanned directory is by default $DIRCONFIG.\n"; print "\n"; print "Usage: $PROG.$Extension now [options]\n"; print "\n"; print "Where options are:\n"; print " -awstatsprog=pathtoawstatspl\n"; print " -configdir=directorytoscan\n"; print " -excludeconf=conftoexclude[,conftoexclude2,...] (Note: awstats.model.conf is always excluded)\n"; print "\n"; exit 0; }
debug("Scan directory $DIRCONFIG");
# Scan directory $DIRCONFIG opendir(DIR, $DIRCONFIG) || error("Can't scan directory $DIRCONFIG"); my @filesindir = grep { /^awstats\.(.*)conf$/ } sort readdir(DIR); closedir(DIR);
debug("List of files found :".join(",",@filesindir));
# Build file list my @files=(); foreach my $file (@filesindir) { if ($confexcluded{$file}) { next; } # Should be useless if ($file =~ /^awstats\.(.*)conf$/) { my $conf=$1; $conf =~ s/\.$//; if ($conf eq 'model') { next; } if ($confexcluded{$conf}) { next; } } push @files, $file; }
debug("List of files qualified :".join(",",@files));
# Run update process for each config file found if (@files) { # Check if AWSTATS prog is found my $AwstatsFound=0; if (-s "$Awstats") { $AwstatsFound=1; } elsif (-s "/usr/local/awstats/wwwroot/cgi-bin/awstats.pl") { $Awstats="/usr/local/awstats/wwwroot/cgi-bin/awstats.pl"; $AwstatsFound=1; } if (! $AwstatsFound) { error("Can't find AWStats program ('$Awstats').\nUse -awstatsprog option to solve this"); exit 1; } # Define AwstatsDir and AwstatsProg ($AwstatsDir=$Awstats) =~ s/([^\/\\]+)$//; $AwstatsProg=$1; $AwstatsDir||='.'; $AwstatsDir =~ s/([^\/\\])[\\\/]+$/$1/; debug("AwstatsDir=$AwstatsDir"); debug("AwstatsProg=$AwstatsProg");
foreach (@files) { if ($_ =~ /^awstats\.(.*)conf$/) { my $domain = $1||"default"; $domain =~ s/\.$//; # Define command line my $command="\"$AwstatsDir/$AwstatsProg\" -update -config=$domain"; $command.=" -configdir=\"$DIRCONFIG\""; if ($LastLine) { $command.=" -lastline=$LastLine"; } # Run command line print "Running '$command' to update config $domain\n"; my $output = `$command 2>&1`; print "$output\n"; } } } else { print "No AWStats config file found in $DIRCONFIG\n"; }
0; # Do not remove this line
|