summaryrefslogtreecommitdiff
path: root/localwebstats
blob: fe93441cc9c1cac759dd502789bee2ea82840499 (plain)
  1. #!/bin/bash
  2. # /etc/cron.daily/localstats: Webstats maintenance script
  3. # Written by Jonas Smedegaard <dr@jones.dk>
  4. # halt on errors
  5. #set -e
  6. function usage() {
  7. echo "Usage: `basename $0` update|prelogrotate|postlogrotate|reset <website> [<website>...]"
  8. echo " If no website is given, all are attempted"
  9. echo " Tip: Automagically runs when symlinked to /etc/cron.{daily,weekly,monthly}/"
  10. exit 1
  11. }
  12. # automagically configure when run from cron dirs
  13. case `dirname $0` in
  14. /etc/cron.daily)
  15. stamp=ignore
  16. ;;
  17. /etc/cron.weekly)
  18. stamp=update
  19. ;;
  20. /etc/cron.monthly)
  21. stamp=ignore
  22. ;;
  23. *)
  24. stamp=$1
  25. shift || usage
  26. ;;
  27. esac
  28. case "$stamp" in
  29. update|prelogrotate|postlogrotate|reset|ignore)
  30. ;;
  31. *)
  32. usage
  33. ;;
  34. esac
  35. if [ "$stamp" == "ignore" ]; then
  36. if [ $DEBUG ]; then
  37. echo "Asked to ignore - exiting silently..."
  38. fi
  39. exit 0
  40. fi
  41. WEBROOT=/var/www
  42. LOGROOT=/var/log/apache
  43. WEBALIZER_OPTIONS="-q"
  44. function webdir() { echo $1/VIRTUAL/$2; }
  45. function webdirs() { echo `find /var/log/apache -type d -print`; }
  46. #function webdirs() { for dir in $(find ${LOGROOT} -type d -print); do echo $dir; done; }
  47. #function logdir() { echo ${LOGROOT}/${WEBSITE}; }
  48. #function logfiles() { $(ls -r $LOGDIR/*-access*.gz) $(ls -r $LOGDIR/access*.??.gz) $(ls -r $LOGDIR/access*.?.gz) $(ls -r $LOGDIR/access*.?); }
  49. function logfiles() { ls $1/$2/????.??.??; }
  50. function logfilesgz() { ls $1/$2/????.??.??.gz; }
  51. function host() { cat $1/VIRTUAL/$2/hostname || exit 1; }
  52. function domain() { cat $1/VIRTUAL/$2/domainname || exit 1; }
  53. # The above can be overridden in /etc/local/www
  54. . /etc/local/www || exit 1
  55. # variables too boring to be configurable
  56. JDRESOLVE_DB="/var/cache/jdresolve/hosts.db"
  57. #JDRESOLVE_OPTIONS="-r -t 5 --database=${JDRESOLVE_DB} --dbfirst --expiredb=48"
  58. JDRESOLVE_OPTIONS="-r --database=${JDRESOLVE_DB} --dbfirst --expiredb=48"
  59. JDRESOLVE_MERGE_OPTIONS="--mergedb --database=${JDRESOLVE_DB}"
  60. test -d ${WEBROOT} -a -d ${LOGROOT} || exit 1
  61. WEBSITES=$@
  62. if [ "$WEBSITES" == "" ]; then
  63. WEBSITES=$(webdirs)
  64. fi
  65. for WEBSITE in $WEBSITES; do
  66. WEBDIR=$(webdir $WEBROOT ${WEBSITE}) || exit 1
  67. test -d ${WEBDIR} || exit 1
  68. HOST=$(host ${WEBROOT} ${WEBSITE}) || exit 1
  69. DOMAIN=$(domain ${WEBROOT} ${WEBSITE}) || exit 1
  70. LOGFILES=$(logfiles ${LOGROOT} ${WEBSITE}) || exit 1
  71. LOGFILESGZ=$(logfilesgz ${LOGROOT} ${WEBSITE}) || exit 1
  72. if [ -x /usr/bin/jdresolve ]; then
  73. [ ${DEBUG} ] && echo "Checking access to ${JDRESOLVE_DB}"
  74. touch ${JDRESOLVE_DB} || exit 1
  75. fi
  76. WEBALIZER_OPTIONS="-c /etc/webalizer.conf -c $WEBDIR/webalizer.conf -o $WEBDIR/stats/webalizer -f"
  77. ANALOG_OPTIONS="-G +g/etc/analog.conf +g$WEBDIR/analog.conf -a"
  78. AWSTATS_OPTIONS="-update"
  79. FQDN_ESC=`echo "$HOST.$DOMAIN" | sed -e 's/\./\\\./g'` # needed for awstats config
  80. if [ ${DEBUG} ]; then
  81. echo "Making stats for ${WEBSITE} in ${WEBDIR}:"
  82. JDRESOLVE_OPTIONS="${JDRESOLVE_OPTIONS} -p"
  83. ANALOG_OPTIONS="${ANALOG_OPTIONS} +q"
  84. WEBALIZER_OPTIONS="${WEBALIZER_OPTIONS} -T"
  85. AWSTATS_OPTIONS="${AWSTATS_OPTIONS} -showsteps"
  86. else
  87. JDRESOLVE_OPTIONS="${JDRESOLVE_DB} -n"
  88. ANALOG_OPTIONS="${ANALOG_OPTIONS} -q"
  89. WEBALIZER_OPTIONS="${WEBALIZER_OPTIONS} -Q"
  90. AWSTATS_OPTIONS="${AWSTATS_OPTIONS}"
  91. fi
  92. if [ $stamp == "reset" ]; then
  93. rm -rf $WEBDIR/stats
  94. mkdir $WEBDIR/stats
  95. fi
  96. LOGDATA="${WEBDIR}/stats/rawlog.txt"
  97. if [ -x /usr/bin/jdresolve ]; then
  98. zcat ${LOGFILESGZ} | jdresolve ${JDRESOLVE_OPTIONS} - > ${LOGDATA}
  99. cat ${LOGFILES} | jdresolve ${JDRESOLVE_OPTIONS} - >> ${LOGDATA}
  100. jdresolve ${JDRESOLVE_MERGE_OPTIONS} ${LOGDATA}
  101. elif [ -x /usr/sbin/logresolve ]; then
  102. zcat ${LOGFILESGZ} | logresolve > ${LOGDATA}
  103. cat ${LOGFILES} | logresolve >> ${LOGDATA}
  104. else
  105. zcat ${LOGFILESGZ} > ${LOGDATA}
  106. cat ${LOGFILES} >> ${LOGDATA}
  107. fi
  108. if [ -x /usr/bin/analog ]; then
  109. if [ $stamp == "reset" ]; then
  110. test ! -f $WEBDIR/analog.conf && echo "\
  111. HOSTNAME $HOST.$DOMAIN
  112. "\
  113. >$WEBDIR/analog.conf
  114. mkdir ${WEBDIR}/stats/analog
  115. cat ${LOGDATA} | analog ${ANALOG_OPTIONS} -C"LOGFILE none" -C"LOGFILE stdin" > $WEBDIR/stats/analog/index.html
  116. fi
  117. # cat ${LOGDATA} | analog ${ANALOG_OPTIONS} -C"LOGFILE none" -C"LOGFILE stdin" > $WEBDIR/stats/analog/index.html
  118. fi
  119. if [ -x /usr/bin/webalizer ]; then
  120. if [ $stamp == "reset" ]; then
  121. test ! -f $WEBDIR/webalizer.conf && echo "\
  122. HostName $HOST.$DOMAIN
  123. HideSite *$DOMAIN
  124. HideReferrer $DOMAIN/
  125. "\
  126. > $WEBDIR/webalizer.conf
  127. mkdir $WEBDIR/stats/webalizer
  128. cat ${LOGDATA} | webalizer $WEBALIZER_OPTIONS -N 0 -
  129. fi
  130. # cat ${LOGDATA} | webalizer $WEBALIZER_OPTIONS -N 0 -
  131. fi
  132. if [ -x /usr/lib/cgi-bin/awstats.pl ]; then
  133. if [ $stamp == "reset" ]; then
  134. test ! -f /etc/awstats/awstats.$WEBSITE.conf && echo "\
  135. LogFile=\"/var/www/VIRTUAL/$WEBSITE/stats/rawlog.txt\"
  136. LogFormat=4
  137. DNSLookup=0
  138. DirData=\"/var/cache/awstats\"
  139. DirIcons=\"/awstats-icon\"
  140. SiteDomain=\"$FQDN_ESC\"
  141. HostAliases=\"$FQDN_ESC localhost 127\.0\.0\.1\"
  142. Lang=\"dk\"
  143. DirLang=\"/usr/share/awstats/lang\"
  144. DefaultFile=\"index.html\"
  145. ShowFlagLinks=0
  146. AllowToUpdateStatsFromBrowser=0
  147. ShowLinksOnUrl=0
  148. DirCgi=\"http://cgi.jones.dk/cgi-bin\"
  149. DirIcons=\"http://stats.jones.dk/awstats-icon\"
  150. "\
  151. >/etc/awstats/awstats.$WEBSITE.conf
  152. mkdir $WEBDIR/stats/awstats
  153. /usr/lib/cgi-bin/awstats.pl -config=${WEBSITE} $AWSTATS_OPTIONS -output > $WEBDIR/stats/awstats/index.html
  154. fi
  155. /usr/lib/cgi-bin/awstats.pl -config=${WEBSITE} $AWSTATS_OPTIONS -output > $WEBDIR/stats/awstats/index.html
  156. fi
  157. test -L $WEBDIR/www/stats || ln -s $WEBDIR/stats $WEBDIR/www/stats
  158. test -L $WEBDIR/stats/stats && rm $WEBDIR/stats/stats
  159. done