#!/usr/bin/env bash

set -euo pipefail

move_dbs() {
  local SRC=$1
  local TGT=$2
  move_if_needed "$SRC/rocksdb" "$TGT/rocksdb"
  move_if_needed "$SRC/stackrox.db" "$TGT/stackrox.db"
  move_if_needed "$SRC/migration_version.yaml" "$TGT/migration_version.yaml"
}

# Move a file/dir from $SRC to $TGT if $SRC exists and $TGT does not exist.
# It won't move $SRC inside $TGT if $TGT is a directory.
move_if_needed()
{
  local SRC=$1
  local TGT=$2
  if [ -e "$SRC" ] && [ ! -e "$TGT" ]; then
    echo "Moving $SRC to $TGT"
    mv "$SRC" "$TGT"
  fi
}

trunc_log()
{
  local LOG_LINE_LIMIT=$1

  local LOG_DIR="/var/lib/stackrox/migration_log"
  local LOG_FILE="$LOG_DIR/log.txt"

  mkdir -p "$LOG_DIR"
  if [ -e "$LOG_FILE" ]; then
    local log_lines=$(wc -l "$LOG_FILE" | head -n1 | cut -d " " -f1)
    if [ "$log_lines" -gt "$LOG_LINE_LIMIT" ]; then
      echo "Log $LOG_FILE has $log_lines lines, truncate it to the last $LOG_LINE_LIMIT lines."
      tail -"$LOG_LINE_LIMIT" "$LOG_FILE" > "${LOG_FILE}.tmp"
      mv "$LOG_FILE.tmp" "$LOG_FILE"
    fi
  fi
}
