#!/bin/bash

#I - Variables :
date=`date '+%d_%m_%Y'`
name=`hostname`
chemin=/var/tmp/xivo_collect_$date/xivo_collect_$date/
taille=`df -h |grep 'var' |awk -F ' ' '{print $4}'`

echo -e "\n#######################################################################"
echo "##                                                                   ##"
echo "##          XIVO Maintenance - Récupération d'infos      $date  ##"
echo "##                                                                   ##"
echo "#######################################################################"

echo -en "\nAttention!!! Nous stockons les fichiers dans le répertoire /var/tmp/. Voulez-vous continuer vous avez $taille d'espace libre? O or N : "
read ouinon
if [ "$ouinon" = "o" ] || [ "$ouinon" = "O" ]; then
    echo -en "OK, Nous continuons!"
elif [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ]; then
    echo -en "OK, bye! \n"
    exit 2
else
    echo -en "Il faut taper O ou N!! Pas $ouinon \n"
    exit 1
fi

#Archive
echo -en "\n."
mkdir -p $chemin  $chemin/system  $chemin/network $chemin/asterisk $chemin/config $chemin/logs

#Copie de l'historique dans system
HISTTIMEFORMAT="%d/%m/%y %T "
HISTFILE=~/.bash_history
set -o history
history > $chemin/system/history_$name_$date

#II - System
echo -en "."
touch $chemin/system/SYSTEM_$name
filesystem=$chemin/system/SYSTEM_$name

echo -e "\n----- Date -----" >> $filesystem && date >> $filesystem
echo -e "\n----- Version OS / Hostname -----" > $filesystem && uname -a >> $filesystem
echo -e "\n----- Version XiVO -----" >> $filesystem && dpkg -l xivo >> $filesystem
echo -e "\n----- Uptime et Load Average -----" >> $filesystem && uptime >> $filesystem
echo -e "\n----- Status -----" >> $filesystem && xivo-service status all >> $filesystem
echo -e "\n----- Espace mémoire -----" >> $filesystem && free -m >> $filesystem
echo -e "\n----- Espace disque -----" >> $filesystem && df -hT >> $filesystem
echo -e "\n----- Espace var -----" >> $filesystem && du -xsh /var/* | sort -h >> $filesystem
echo -e "\n----- Nombre de CPU -----" >> $filesystem && cat /proc/cpuinfo | grep 'core id' | wc -l >> $filesystem
echo -e "\n----- NTP -----" >> $filesystem && ntpq -np >> $filesystem
echo -e "\n----- Iptables -----" >> $filesystem && iptables -L -v -n >> $filesystem
echo -e "\n----- Adresse IP Publique -----" >> $filesystem && curl ipinfo.io/ip >> $filesystem 2>> $chemin/error.log
echo -e "\n----- Type de matériel -----" >> $filesystem && dmidecode |grep "Product Name" >> $filesystem 2>> $chemin/error.log
echo -e "\n----- XIVO_UUID -----" >> $filesystem && env |grep XIVO_UUID >> $filesystem 2>> $chemin/error.log
echo -e "\n----- Segfault (si ok pas de retour) -----" >> $filesystem && grep -i segfault /var/log/syslog >> $filesystem

echo -e "\n----- Age disques (si VM pas de retour) -----" >> $filesystem
smartctl -d 3ware,0 -a /dev/twe0 | grep Power_On_Hours >> $filesystem 2>> $chemin/error.log
smartctl -d 3ware,1 -a /dev/twe0 | grep Power_On_Hours >> $filesystem 2>> $chemin/error.log

echo -e "\n----- Nombre de fichiers ouverts par asterisk / limite par défaut 8192 -----" >> $filesystem
ls /proc/$(pidof asterisk)/fd | wc -l >> $filesystem

#Copie des fichier hosts dans system
cp /etc/hosts $chemin/system/hosts_$name

#III - Network
echo -en "."
touch $chemin/network/NETWORK_$name
filenetwork=$chemin/network/NETWORK_$name

echo -en "----- IP -----" > $filenetwork && ip a s >> $filenetwork
echo -en "\n----- Route -----" >> $filenetwork && route -n >> $filenetwork
echo -en "\n----- DNS -----" >> $filenetwork && cat /etc/resolv.conf | grep 'nameserver' >> $filenetwork
echo -en "\n----- Latence (si ok pas de retour) -----" >> $filenetwork
grep -E "Peer '.*' is now (UNREACHABLE|Lagged|Reachable)" /var/log/asterisk/full >> $filenetwork
echo -en "\n-----Retransmissions SIP Par IP-----" >> $filenetwork
grep Retransmitting /var/log/asterisk/full|grep -o 'to .*$'|sort |uniq -c >> $filenetwork

#Copie du fichier de dhcp leases
cp /var/lib/dhcp/dhcpd.leases $chemin/system/dhcpd_leases_$name

#IV - Asterisk
echo -en "."
touch $chemin/asterisk/ASTERISK_$name
fileasterisk=$chemin/asterisk/ASTERISK_$name

echo -e "----- Core (si ok pas de retour) -----" > $fileasterisk && ls -alhrt /var/spool/asterisk | grep core >> $fileasterisk
echo -e "\n----- Channels -----" >> $fileasterisk && asterisk -rx 'core show channels verbose' >> $fileasterisk
echo -e "\n----- Peers -----" >> $fileasterisk && asterisk -rx 'sip show peers' >> $fileasterisk
echo -e "\n----- Queue -----" >> $fileasterisk && asterisk -rx 'queue show' >> $fileasterisk
echo -e "\n----- Nombre d'agents logués et non-logués -----" >> $fileasterisk && xivo-agentd-cli -c status 2>> $chemin/error.log |grep Agent |wc -l >> $fileasterisk
echo -e "\n----- Nombre d'agents logués -----" >> $fileasterisk && xivo-agentd-cli -c status 2>> $chemin/error.log |grep True |wc -l >> $fileasterisk
echo -e "\n----- Registry -----" >> $fileasterisk && asterisk -rx 'sip show registry' >> $fileasterisk
echo -e "\n----- Hints -----" >> $fileasterisk && asterisk -rx 'core show hints' >> $fileasterisk
echo -e "\n----- SIP Subscriptions -----" >> $fileasterisk && asterisk -rx 'sip show subscriptions' >> $fileasterisk
echo -e "\n----- Phone plugins installed -----" >> $fileasterisk && ls -l /var/lib/xivo-provd/plugins | grep -v 'plugins.db' | awk -F " " '{print $9;}' >> $fileasterisk
echo -e "\n----- Dahdi status (Retour si lien ISDN) -----" >> $fileasterisk && asterisk -rx 'dahdi show status' >> $fileasterisk
echo -e "\n----- Dahdi Synchronisation (Retour si lien ISDN) -----" >> $fileasterisk
echo -e "\n----- Dahdi Timing slips 1-----" >> $fileasterisk
echo -en "cat /proc/dahdi/1 |grep "Timing slips"" >> $fileasterisk && echo -en "." && sleep 1s && echo -en "."
echo -e "\n----- Dahdi Timing slips 2-----" >> $fileasterisk
echo -en "cat /proc/dahdi/1 |grep "Timing slips"" >> $fileasterisk && sleep 1s && echo -en "."
echo -e "\n----- Dahdi Timing slips 3-----" >> $fileasterisk
echo -en "cat /proc/dahdi/1 |grep "Timing slips"" >> $fileasterisk && sleep 1s && echo -en "."
echo -e "\n----- Dahdi Timing slips 4-----" >> $fileasterisk
echo -en "cat /proc/dahdi/1 |grep "Timing slips"" >> $fileasterisk && sleep 1s && echo -en "."
echo -e "\n----- Dahdi Timing slips 5-----" >> $fileasterisk
echo -en "cat /proc/dahdi/1 |grep "Timing slips"" >> $fileasterisk

#V - Config
echo -en "."

#Création fichier queues avec informations sur file d'attente à l'instant t
asterisk -rx 'queue show' > $chemin/config/queues_info_$name.conf

#Génération du fichier sip.conf
xivo-confgen asterisk/sip.conf > $chemin/config/sip_$name.conf

#Génération du fichier extensions.conf
xivo-confgen asterisk/extensions.conf > $chemin/config/extensions_$name.conf

#Copie des fichiers de configuration extensions spécifiques asterisk
cp -f /etc/asterisk/extensions_extra.d/* $chemin/config/

#Copie des fichiers de configuration xivo / asterisk
cp -f /etc/xivo/asterisk/* $chemin/config/

#Création fichier users_hostname avec information peer / user agent / ip
for peer in $(asterisk -rx 'sip show peers'|grep -v 'Unspecified'|grep -vE '^Name/username'|grep -Ev '^[0-9]{1,} sip peers'|awk -F"/" '{print $1}');do useragent=$(asterisk -rx "sip show peer $peer"|grep Useragent) && caller=$(asterisk -rx "sip show peer $peer"|grep Callerid) && ip=$(asterisk -rx "sip show peer $peer"|grep 'Addr->IP');echo $caller" => "$peer" => "$useragent" => "$ip;done > $chemin/asterisk/users_$name

#VI - Logs
echo -en "."
echo -en "\nRecuperation des logs"
echo -en "\nVous voulez les logs datant de combien de jours [entre 1 et 15]? Logs du jour press [ENTER] : " && read jour

if [[ "$jour" =~ ^[0-9]+$ ]] && [ "$jour" -ge 1 -a "$jour" -le 15 ]; 
then
    echo -en "Nous prendrons les logs datant de "$jour" jour(s) \n"
     cp /var/log/asterisk/full.$jour.gz $chemin/logs 2>> $chemin/error.log
     cp /var/log/xivo-ctid.log.$jour.gz $chemin/logs 2>> $chemin/error.log
     cp /var/log/syslog.$jour* $chemin/logs 2>> $chemin/error.log
     cp /var/log/xivo-provd.log.$jour.gz $chemin/logs 2>> $chemin/error.log
     cp /var/log/daemon.log.$jour.gz $chemin/logs 2>> $chemin/error.log
     cp /var/log/fail2ban.log.$jour.gz $chemin/logs 2>> $chemin/error.log
     cp /var/log/xivo-upgrade.log $chemin/logs 2>> $chemin/error.log
else
    echo -en "Nous prenons les logs du jour \n"
     cp /var/log/asterisk/full $chemin/logs 2>> $chemin/error.log
     cp /var/log/xivo-ctid.log $chemin/logs 2>> $chemin/error.log
     cp /var/log/syslog $chemin/logs 2>> $chemin/error.log
     cp /var/log/xivo-provd.log $chemin/logs 2>> $chemin/error.log
     cp /var/log/daemon.log $chemin/logs 2>> $chemin/error.log
     cp /var/log/fail2ban.log $chemin/logs 2>> $chemin/error.log
     cp /var/log/xivo-upgrade.log $chemin/logs 2>> $chemin/error.log
fi

#Archive Compression
tar -zcvf /var/tmp/xivo_collect_$name.tar.gz -C /var/tmp/xivo_collect_$date/ .
chmod 666 /var/tmp/xivo_collect_$name.tar.gz
rm -rf /var/tmp/xivo_collect_$date
archive=`ls -alh /var/tmp/xivo_collect_$date_$name.tar.gz`
echo -en "Archive a recuperer : $archive \n"

exit 0
