#
# Cookbook:: irrigate-neo4j
# Recipe:: backup
#

remote_file "#{Chef::Config[:file_cache_path]}/s5cmd.tgz" do
  source "https://github.com/peak/s5cmd/releases/download/v#{node['neo4j']['s5cmd']['version']}/s5cmd_#{node['neo4j']['s5cmd']['version']}_Linux-64bit.tar.gz"
  not_if { ::File.exist?('/usr/bin/s5cmd') }
end

execute 'unpack_only_s5cmd_executable' do
  cwd "#{Chef::Config[:file_cache_path]}"
  command 'tar zxf s5cmd.tgz s5cmd && chown root s5cmd && mv s5cmd /usr/bin'
  not_if { ::File.exist?('/usr/bin/s5cmd') }
end

file '/usr/local/sbin/neo4j-backup.sh' do
  owner 'root'
  group 'root'
  mode '0755'
  content <<~SH
    #!/usr/bin/env bash
    set -uo pipefail

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 086679231553.dkr.ecr.us-east-1.amazonaws.com
    docker pull 086679231553.dkr.ecr.us-east-1.amazonaws.com/neo4j-cluster-backup:latest

    if docker run --rm \
      -v /var/lib/neo4j/v5:/mnt \
      -v /etc/neo4j/cluster_policy:/etc/neo4j/cluster_policy \
      -v /etc/neo4j/default:/etc/neo4j/default \
      -e NEO4J_BACKUP_FROM_FOLLOWER=false \
      -e NEO4J_SERVER_MAJOR_VERSION=5 \
      -e NEO4J_BACKUP_DATABASE='graph.db' \
      -e NEO4J_BACKUP_DIRECTORY=/mnt/ \
      -e NEO4J_BACKUP_DIRECTORY_CLEAN=true \
      -e NEO4J_BACKUP_REFRESH_QA=true \
      -e NEO4J_BACKUP_COMPRESS_BACKUP=#{node['neo4j']['backup']['NEO4J_BACKUP_COMPRESS_BACKUP']} \
      086679231553.dkr.ecr.us-east-1.amazonaws.com/neo4j-cluster-backup:latest >/dev/null 2>&1 ; then
      echo "Backup job completed successfully."
    else
      exit_code=$?
      echo "Backup job failed with exit code ${exit_code}; leaving ASG running."
      exit "$exit_code"
    fi

    echo "Backup job succeeded; scaling ASG down to zero."

    aws autoscaling set-desired-capacity \
      --auto-scaling-group-name #{node['neo4j']['backup']['NEO4J_BACKUP_ASG_NAME']} \
      --desired-capacity 0 \
      --no-honor-cooldown
  SH
end

cron 'backup_neo4j' do
  hour 4
  minute 15
  command '/usr/local/sbin/neo4j-backup.sh'
end
