#!/bin/bash

### BEGIN INIT INFO
# Provides:          tcpget
# Required-Start:    $remote_fs $syslog networking mysql netstat
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Script d'écoute des trames reçues sur eth0
# Description: La taille totale des trames est stockée dans la base MySQL tcpdata__get toutes les $laps secondes 
### END INIT INFO

# durée écoulée entre deux enregistrements SQL (en secondes)
declare laps=5;
# 

# Le switch case ci-dessous permet de savoir si le système souhaite lancer ou arrêter le script (on le lance au démarrage et l'arrête à la fermeture du système)
case "$1" in
    start)
	# La variable lastgw indique l'IP de la dernière passerelle lue
	declare lastgw="";
	# Timestamp contient la dernière heure à laquelle les données ont été écrites dans la base
	declare timestamp=$(date +%s);
	# Totalsize indique la longueur totale des trames lues depuis le dernier enregistrement
	declare totalsize=0;

	# Lecture de TCPDump puis filtre par expression régulière et analyse
	sudo tcpdump -i eth0 -l -A -e 2>&1 | grep --line-buffered -i -o ', length \([0-9]\)*'| 
	while read line ; 
	do 
	  size=$(echo $line| cut -c10-);
	  totalsize=$(($totalsize + $size ));
	  current=$(date +%s);
	  duree=$(($current-$timestamp));
	  # Si la durée est supérieure à $laps, on écrit dans la base le $totalsize calculé
	  if (( $duree >= $laps ));
	  then
	    timestamp=$(date +%s);
	    sudo mysql -u root -praspberry tcpdata -e "INSERT INTO tcpdata__get (date, size) VALUES ("$timestamp", "$totalsize");"
	    echo $totalsize;
	    totalsize=0;
		
		# On relit l'IP de la passrelle et on l'actualise dans la base de données si nécessaire
		gw=`netstat -rn | grep '^0.0.0.0'`
		IFS=' ' read -ra NAMES <<< "$gw"
		gw=${NAMES[1]}
		if [ "$gw" != "" ];
		then
			if [ "$lastgw" != "$gw" ] || [ "$lastgw" == "" ];
			then
				sudo mysql -u root -praspberry tcpdata -e "DELETE FROM tcpdata__ip; INSERT INTO tcpdata__ip (ip) VALUES ('"$gw"');"
				lastgw=$gw
			fi
		fi
	  fi;
	done
    ;;

    stop)
        # Placez ici les commandes à exécuter uniquement à l'arrêt du script
    ;;

    *)
        # On indique ici comment utiliser le script, c'est dans le cas où le script est appelé sans argument ou avec un argument invalide
        echo 'Usage: /etc/init.d/tcpget {start|stop}'
        exit 1
    ;;
esac

exit 0
