#!/bin/bash
echo Generating new data from log
echo "#generated sql file" > data.sql
echo "truncate table log_data;" >> data.sql
echo "START TRANSACTION;" >> data.sql
FIND_PATTERN="\
\(\S*\)\s*\
\(\S*\)\s*\
\(\S*\s*\S*\)\s*\
[\x5B]\([^\x5D]*\)[\x5D]\s*\
\"\([^\"]*\)\"\s*\
\(\S*\)\s*\
\(\S*\)\s*\
\"\([^\"]*\)\"\s*\
\"\([^\"]*\)\"\s*\
";
REPLACE_PATTERN="\
INSERT INTO log_data \
(domain,ip,other,date,url,status,size,referral,clientstring) \
VALUES \
('\1','\2','\3','\4','\5','\6','\7','\8','\9');";
APACHE_FILE="other_vhosts_access.log";
if [ -f $APACHE_FILE.size ];
then
ALREADY_PROCEED=`cat $APACHE_FILE.size`
echo "Already proceed size ($APACHE_FILE): "$ALREADY_PROCEED;
else
ALREADY_PROCEED=0;
echo "New log file $APACHE_FILE";
fi
FILTER_PATTERN="\.css|\.ico|\.png|\.jpg|\.txt|\.js|\.gif|\.swf"
#echo $FIND_PATTERN"/"$REPLACE_PATTERN;
cat $APACHE_FILE |
tail -c +$ALREADY_PROCEED | #preskocime jiz zpracovane radky
#head -5000 | #debug
#head -1128863 | #tail -2 |
#tail -n +1177103 | head -3 |
#sed -r "s/(\(.*\))//g" | #debug - odebere z clientstring (...)
#sed "s/^[^+]*//g" | #debug - odebere pocatek stringu az do GET
#sed -r "s/Mozilla|Gecko|Firefox//g" | #debug odebere tyhle klicovy slova
sed -r "s/^(subdomain|www)\.//" | #odebereme prefix subdomain. a www.
sed -r "s/^([^:]*)(:[0-9]*)/\1/" | #odebereme port
sed -r -n "/^(orm-|inventic).*/p" | #exportujem jen nektere domeny
sed "s/\([\x5c][\x22]\)//g" | #odebrani \" retezcu
sed "s/\([']\)//g" | #odebrani apostrof ktery delaj pak bordel v$
sed -r "s/ \"GET ([\x2F].*) HTTP[\x2F][0-9.]*/ \"\1/" | #dame pryc GET a HTTP1.1
#sed -r -n "/$FILTER_PATTERN/p" #| debug- vypise filtrovane .css/.png/...
sed -r "/$FILTER_PATTERN/d" | #vyfiltrujeme pryc .css, .png atd
#sed "/^$FIND_PATTERN$/d" | #debug - toto lze pouzit na vypis radku kte$
sed -n "/^$FIND_PATTERN$/p" | #vypiseme vsechny radky ktere jsou validni
sed "s/$FIND_PATTERN/$REPLACE_PATTERN/" >> data.sql
echo "COMMIT;" >> data.sql
#ulozime velikost zpracovaneho logu
stat -c"%s" $APACHE_FILE > $APACHE_FILE.size
#vlozime data do Mysql
echo Putting data to MySQL
mysql \
--user=root \
--password=1234 \
--host=192.168.0.10 \
--database=server_log < data.sql