summaryrefslogtreecommitdiff
path: root/localwebstats
blob: 7de910624ef5536fdb040cfa109a0ec4194456b2 (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. touch ${JDRESOLVE_DB} || exit 1
  74. fi
  75. WEBALIZER_OPTIONS="-c /etc/webalizer.conf -c $WEBDIR/webalizer.conf -o $WEBDIR/stats/webalizer -f"
  76. ANALOG_OPTIONS="-G +g/etc/analog.conf +g$WEBDIR/analog.conf -a"
  77. AWSTATS_OPTIONS="-update"
  78. FQDN_ESC=`echo "$HOST.$DOMAIN" | sed -e 's/\./\\\./g'` # needed for awstats config
  79. if [ ${DEBUG} ]; then
  80. echo "Making stats for ${WEBSITE} in ${WEBDIR}:"
  81. JDRESOLVE_OPTIONS="${JDRESOLVE_OPTIONS} -p"
  82. ANALOG_OPTIONS="${ANALOG_OPTIONS} +q"
  83. WEBALIZER_OPTIONS="${WEBALIZER_OPTIONS} -T"
  84. AWSTATS_OPTIONS="${AWSTATS_OPTIONS} -showsteps"
  85. else
  86. JDRESOLVE_OPTIONS="${JDRESOLVE_DB} -n"
  87. ANALOG_OPTIONS="${ANALOG_OPTIONS} -q"
  88. WEBALIZER_OPTIONS="${WEBALIZER_OPTIONS} -Q"
  89. AWSTATS_OPTIONS="${AWSTATS_OPTIONS}"
  90. fi
  91. if [ $stamp == "reset" ]; then
  92. rm -rf $WEBDIR/stats
  93. mkdir $WEBDIR/stats
  94. fi
  95. LOGDATA="${WEBDIR}/stats/rawlog.txt"
  96. if [ -x /usr/bin/jdresolve ]; then
  97. zcat ${LOGFILESGZ} | jdresolve ${JDRESOLVE_OPTIONS} - > ${LOGDATA}
  98. cat ${LOGFILES} | jdresolve ${JDRESOLVE_OPTIONS} - >> ${LOGDATA}
  99. jdresolve ${JDRESOLVE_MERGE_OPTIONS} ${LOGDATA}
  100. elif [ -x /usr/sbin/logresolve ]; then
  101. zcat ${LOGFILESGZ} | logresolve > ${LOGDATA}
  102. cat ${LOGFILES} | logresolve >> ${LOGDATA}
  103. else
  104. zcat ${LOGFILESGZ} > ${LOGDATA}
  105. cat ${LOGFILES} >> ${LOGDATA}
  106. fi
  107. if [ -x /usr/bin/analog ]; then
  108. if [ $stamp == "reset" ]; then
  109. test ! -f $WEBDIR/analog.conf && echo "\
  110. HOSTNAME $HOST.$DOMAIN
  111. "\
  112. >$WEBDIR/analog.conf
  113. mkdir ${WEBDIR}/stats/analog
  114. cat ${LOGDATA} | analog ${ANALOG_OPTIONS} -C"LOGFILE none" -C"LOGFILE stdin" > $WEBDIR/stats/analog/index.html
  115. fi
  116. # cat ${LOGDATA} | analog ${ANALOG_OPTIONS} -C"LOGFILE none" -C"LOGFILE stdin" > $WEBDIR/stats/analog/index.html
  117. fi
  118. if [ -x /usr/bin/webalizer ]; then
  119. if [ $stamp == "reset" ]; then
  120. test ! -f $WEBDIR/webalizer.conf && echo "\
  121. HostName $HOST.$DOMAIN
  122. HideSite *$DOMAIN
  123. HideReferrer $DOMAIN/
  124. "\
  125. > $WEBDIR/webalizer.conf
  126. mkdir $WEBDIR/stats/webalizer
  127. cat ${LOGDATA} | webalizer $WEBALIZER_OPTIONS -N 0 -
  128. fi
  129. # cat ${LOGDATA} | webalizer $WEBALIZER_OPTIONS -N 0 -
  130. fi
  131. if [ -x /usr/lib/cgi-bin/awstats.pl ]; then
  132. if [ $stamp == "reset" ]; then
  133. test ! -f /etc/awstats/awstats.$WEBSITE.conf && echo "\
  134. LogFile=\"/var/www/VIRTUAL/$WEBSITE/stats/rawlog.txt\"
  135. LogFormat=4
  136. DNSLookup=0
  137. DirData=\"/var/cache/awstats\"
  138. DirIcons=\"/awstats-icon\"
  139. SiteDomain=\"$FQDN_ESC\"
  140. HostAliases=\"$FQDN_ESC localhost 127\.0\.0\.1\"
  141. Lang=\"dk\"
  142. DirLang=\"/usr/share/awstats/lang\"
  143. DefaultFile=\"index.html\"
  144. ShowFlagLinks=0
  145. AllowToUpdateStatsFromBrowser=0
  146. ShowLinksOnUrl=0
  147. DirCgi=\"http://cgi.jones.dk/cgi-bin\"
  148. DirIcons=\"http://stats.jones.dk/awstats-icon\"
  149. "\
  150. >/etc/awstats/awstats.$WEBSITE.conf
  151. mkdir $WEBDIR/stats/awstats
  152. /usr/lib/cgi-bin/awstats.pl -config=${WEBSITE} $AWSTATS_OPTIONS -output > $WEBDIR/stats/awstats/index.html
  153. fi
  154. /usr/lib/cgi-bin/awstats.pl -config=${WEBSITE} $AWSTATS_OPTIONS -output > $WEBDIR/stats/awstats/index.html
  155. fi
  156. test -L $WEBDIR/www/stats || ln -s $WEBDIR/stats $WEBDIR/www/stats
  157. test -L $WEBDIR/stats/stats && rm $WEBDIR/stats/stats
  158. done