#!/bin/bash

# script to archive all systems to the USB drive mounted at /archive
# written by Gerald Brandt

topdir="/var/lib/backuppc"
hostsfile="/etc/backuppc/hosts"

email="it_group@erlphase.com"
#email="gbr@majntis.com"

set -e

usage()
{
  cat <<EOF
Usage: `basename $0` 

deletes all data in /archive
Create a tar and gzipped archive of the backups in /archive

** Assumes /archive is already mounted

EOF
  exit 1
}

main()
{
  hosts=""

  if [ -f /tmp/archive.list ]
  then
    rm /tmp/archive.list
  fi
  touch /tmp/archive.list

  touch /archive/tmp
#  rm /archive/*.tar
#  rm -R /archive/snapshots
#  mkdir /archive/snapshots
#  chmod 777 /archive/snapshots

  # restart samba after we have the filesystem looking the way we want
#  sudo /etc/init.d/smbd restart

  # start email
  echo "subject: ERLPhase Offsite Archival Process and Proxmox/KVM Snapshot Information" > /tmp/archive.mail
  echo "Content-Type: text/html; charset=\"us-ascii\"" >> /tmp/archive.mail
  echo "<html><head><title> ERLPhase Offsite Archival Process and Proxmox/KVM Snapshot Information</title></head>" >> /tmp/archive.mail
  echo "<body><pre>" >> /tmp/archive.mail
  echo "Archival of backup data started" >> /tmp/archive.mail
  date >> /tmp/archive.mail
    
  echo "NUM   DATE    MACHINE" > /tmp/archive.list
              
  # get all hosts in the host file 
  
# The followin line missed archiving localhost as well.
#  for HOST in $(cat $hostsfile | grep ^[A-Za-z0-9] | grep -v host | grep -v archive | awk '{print $1}')
#
  for HOST in $(cat $hostsfile | grep ^[A-Za-z0-9] | grep -v archive | awk '{print $1}')
  do
    print_stats $HOST
  done

  # create the file
  echo "%ArchiveReq = (" > /var/lib/backuppc/pc/archive/archive_file
  echo "  'archiveloc' => '/archive'," >> /var/lib/backuppc/pc/archive/archive_file
#  echo "  'reqTime' => '1267896044'," >> /var/lib/backuppc/pc/archive/archive_file
  echo "  'BackupList' => [" >> /var/lib/backuppc/pc/archive/archive_file

  # read the file and build the archive list
  while read line;
  do
    create_archive_file_part1 $line
  done < /tmp/archive.list

  echo "  ]," >> /var/lib/backuppc/pc/archive/archive_file
  echo "  'host' => 'archive'," >> /var/lib/backuppc/pc/archive/archive_file
  echo "  'parfile' => undef," >> /var/lib/backuppc/pc/archive/archive_file
  echo "  'archtype' => '0'," >> /var/lib/backuppc/pc/archive/archive_file
#  echo "  'compression' => '/usr/bin/pbzip2'," >> /var/lib/backuppc/pc/archive/archive_file
#  echo "  'compext' => '.bz2'," >> /var/lib/backuppc/pc/archive/archive_file
  echo "  'compression' => '/bin/gzip'," >> /var/lib/backuppc/pc/archive/archive_file
  echo "  'compext' => '.gz'," >> /var/lib/backuppc/pc/archive/archive_file
  echo "  'HostList' => [" >> /var/lib/backuppc/pc/archive/archive_file
  
  # read the file and build the archive list
  while read line;
  do
    create_archive_file_part2 $line
  done < /tmp/archive.list

  echo "  ]," >> /var/lib/backuppc/pc/archive/archive_file
  echo "  'user' => 'root'," >> /var/lib/backuppc/pc/archive/archive_file
  echo "  'splitsize' => '0000000'" >> /var/lib/backuppc/pc/archive/archive_file
  echo ");" >> /var/lib/backuppc/pc/archive/archive_file

  echo " " >> /var/lib/backuppc/pc/archive/archive_file

  # start the archive
  /usr/share/backuppc/bin/BackupPC_archive archive archive archive_file     

  echo " " >> /tmp/archive.mail
  echo "Archival of backup data finished" >> /tmp/archive.mail
  date >> /tmp/archive.mail
  echo "</pre></body></html>" >> /tmp/archive.email

# mail is now sent when the disk system is unmounted via offsite-email.sh
#  /usr/lib/sendmail -i $email < /tmp/archive.mail  
  
}

# get all the backups known for the passed in host and save in file /tmp/backup.list
print_stats()
{
  local host="$1"
  
#  grep "full" "$topdir/pc/$host/backups" | \
  tail -n 1 "$topdir/pc/$host/backups" | \
      
  awk -v host=$host 'BEGIN { }
         {printf "%d %d %s\n", $1, $3, host}' >> /tmp/archive.list
                 
}
                 

# create the archive file
create_archive_file_part1()
{
  local line="$1"

  awk -v line1=$line 'BEGIN { }
         {printf "    \47%d\47,\n", $1}' >> /var/lib/backuppc/pc/archive/archive_file
         
}

create_archive_file_part2()
{
  local line="$1"

  awk -v line2=$line 'BEGIN { }
         {printf "    \47%s\47,\n", $3}' >> /var/lib/backuppc/pc/archive/archive_file
              
    
      
}


main "$@"
