Subversion Repositories wimsdev

Rev

Rev 4295 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #! /bin/sh
  2. # logs and referer of documents, user and class connections in wims/log/...
  3. # Now must be called from wimslogd and housekeep.daily.
  4.  
  5. if [ "$site_accounting" != "yes" ]; then exit; fi
  6.  
  7. # working directory. Changeable.
  8. cd `dirname $0`/..
  9. wims_home=`pwd`
  10. tmpdir=$wims_home/tmp/log
  11. cd log
  12.  
  13. if [ -z "$1" ]; then workday=`date -d "22 hours ago" '+%Y%m%d'`; else workday=$1;fi
  14.  
  15. test=`grep $workday account/00access.act | awk '{print $1}'`
  16. if [ ! -z "$test" ]; then echo Accounting already done for $workday.; exit; fi
  17.  
  18. # log date for using newccsum version  
  19. if [ ! -f ccaccount/newccsum ]; then
  20.   echo "$workday" > ccaccount/newccsum;
  21. fi;
  22.  
  23. cat access.log* | grep $workday'\.' | grep -v 'devel/' | grep -v 'error' >$tmpdir/acctmp.log
  24.  
  25. cc=`grep -c . $tmpdir/acctmp.log`
  26. cd=`cat $tmpdir/acctmp.log | awk '{print $3}' | sort | uniq | grep -c .`
  27. cs=`cat session.log* | grep -c $workday`
  28. if [ $cd -gt 0 ]; then
  29.   avcc=`expr $cc / $cd`
  30.   avcs=`expr $cs / $cd`
  31. else
  32.   avcc=0
  33.   avcs=0
  34. fi
  35. echo "$workday  $cc     $cs     $cd     $avcc   $avcs" >>account/00access.act
  36.  
  37. ml=`cat $tmpdir/acctmp.log | awk 'length($5) < 39 {print $5}' | grep / | sort | uniq`
  38.  
  39. for i in $ml
  40. do
  41.  cc=`grep -c $i $tmpdir/acctmp.log`
  42.  cd=`grep $i $tmpdir/acctmp.log | awk '{print $3}' | sort | uniq | grep -c .`
  43.  j=`echo $i | tr '/' '@'`
  44.  if [ $cd -gt 0 ]; then
  45.    avcc=`expr $cc / $cd`
  46.  else
  47.    avcc=0
  48.  fi
  49.  echo "$workday $cc     $cd     $avcc" >>account/$j
  50. done
  51.  
  52. # Document accounting
  53. mkdir -p account/doc
  54. list=`cat modules/adm/doc.* |\
  55.  awk '/^'$workday'\./ && $4=="read" {print $5" "$3}' |\
  56.  grep -v '/' |\
  57.  awk '$1<100000 {print}' | sort -n`
  58. tot=`echo "$list" | awk '{print $1}' | sort -n | uniq`
  59. for d in $tot
  60. do
  61.  cc=`echo "$list" | grep -c '^'$d`
  62.  cd=`echo "$list" | grep '^'$d | awk '{print $2}' | sort | uniq | grep -c .`
  63.  if [ $cd -gt 0 ]; then
  64.   avcd=`expr $cc / $cd`
  65.  else
  66.   avcd=0
  67.  fi
  68.  echo "$workday $cc     $cd     $avcd" >>account/doc/$d
  69. done
  70. cc=`echo "$list" | grep -c .`
  71. cd=`echo "$list" | awk '{print $2}' | sort | uniq | grep -c .`
  72. if [ $cd -gt 0 ]; then
  73.   avcc=`expr $cc / $cd`
  74. else
  75.   avcc=0
  76. fi
  77. echo "$workday  $cc     $cd     $avcc" >>account/doc/0all
  78.  
  79. # clear unwanted module accounts
  80. rm -f account/home account/adm@* account/devel@* account/classes@* account/help@* account/light >/dev/null 2>&1
  81.  
  82. # exit
  83.  
  84. # Now referer logs.
  85.  
  86. cat /tmp/referer-home.log | sort | uniq | grep 'http://' | grep -v 'wims\.unice\.fr' | sed 's!http://!!g' | awk -F '#' '{print $1}' >>referer.log
  87. echo >/tmp/referer-home.log
  88.  
  89. cat referer.log* | grep $workday | awk '{print $3"              "$4}' \
  90.         | sort | uniq | sort -k 1 >$tmpdir/acctmp.log
  91.  
  92. grep -v '??' $tmpdir/acctmp.log >referer/refuniq.log
  93. a=`grep -c '??' $tmpdir/acctmp.log`
  94. echo "$workday  $a" >>referer/refauto.cnt
  95.  
  96. sed 's!?!/!g' referer/refuniq.log | awk -F/ '{print $1"/"$2}' > referer/refstem.log
  97. awk -F/ '{print $1}' referer/refstem.log >referer/refsite.log
  98.  
  99. for s in stem uniq site
  100. do
  101.  cat referer/ref$s.log | tr '\?' ' ' | awk '{print $2}' | uniq -c | sort -nr \
  102.         | awk '{print '$workday'" "$1"  "$2}' >> referer/ref$s.cnt
  103. done
  104.  
  105. rm -f $tmpdir/acctmp.log
  106.  
  107. month=`date -d $workday '+%m'`
  108. day=`date -d $workday '+%d'`
  109. year=`date -d $workday '+%Y'`
  110.  
  111. awk 'BEGIN {a=0.0};
  112.         substr($1,1,4)=="'$month$day'" {a=a+$3};
  113.         END {printf "'$year$month$day' %4d\n",int(a/0.288+0.5)};
  114.         ' load-$year$month >>account/00load.avg
  115.  
  116. # user and class connection time accounting
  117.  
  118. ccsum_outdir=ccaccount
  119. ccsum_date=$workday
  120.  
  121. rm -f $tmpdir/cc.log 2>/dev/null
  122. [ -f $ccsum_outdir/done ] && grep '^'$ccsum_date $ccsum_outdir/done >/dev/null && exit
  123.  
  124. cat access.log access.log.old* 2>/dev/null | grep '^'$ccsum_date'.*,' | sort >$tmpdir/cc.log
  125. if [ ! -s $tmpdir/cc.log ]; then exit; fi
  126.  
  127. export ccsum_outdir ccsum_date
  128. ../bin/ccsum $tmpdir/cc.log
  129. rm -f $tmpdir/cc.log
  130.  
  131.