#!/usr/bin/env bash

mycnf="$1"
t="$2"

if [ -z "$mycnf" -o -z "$t" ]; then
   echo "Usage: $0 <my.cnf> <date|interval expr>" >&2
   echo "Example: $0 /opt/my.cnf 'NOW() - INTERVAL 8 DAY'" >&2
   exit 1
fi

if [ -z "$(pt-archiver --version)" ]; then
   echo "pt-archiver is not in PATH" >&2
   exit 1
fi

set -eu

DB="${DB:-"pmm"}"

ts() {
   echo -n "$(date +'%Y-%m-%dT%T') "
   echo "$*"
}

set_deleted_ids() {
   delagent="$(mysql $DB -ss -e "SELECT instance_id FROM instances WHERE subsystem_id = 2 AND deleted IS NOT NULL" | tr "\n" "," | sed -e 's/,$//')"
   [ "$delagent" ] && echo "Deleted agent IDs: $delagent"
   delmysql="$(mysql $DB -ss -e "SELECT instance_id FROM instances WHERE subsystem_id = 3 AND deleted IS NOT NULL" | tr "\n" "," | sed -e 's/,$//')"
   [ "$delmysql" ] && echo "Deleted MySQL IDs: $delmysql"
   return 0
}

do_table() {
   local tbl="$1"
   local where="$2"
   local not_in="${3:-""}"
   [ "$not_in" ] && where="$where AND instance_id NOT IN ($not_in)"
   ts "Purging $tbl..."
   pt-archiver                         \
      --source "F=$mycnf,D=$DB,t=$tbl" \
      --purge                          \
      --limit 1000                     \
      --no-check-charset               \
      --why-quit                       \
      --statistics                     \
      --where "$where"
}

purge_agent_log() {
   do_table "agent_log" "sec < '$t'" $delagent
}

purge_query_examples() {
   do_table "query_examples" "period < '$t'" $delmysql
}

purge_query_global_metrics() {
   do_table "query_global_metrics" "start_ts < '$t'" $delmysql
}

purge_query_class_metrics() {
   do_table "query_class_metrics" "start_ts < '$t'" $delmysql
}

ts "Starting to purge $DB data < $t"

set_deleted_ids

purge_agent_log
purge_query_examples
purge_query_global_metrics
purge_query_class_metrics

ts "Done purging $DB data < $t"
