#!/bin/bash

mysql='/usr/bin/mysql -s -S /var/run/mysqld.partnerlogs/mysqld.sock partnerlogs'
[ -n "$DEBUG" ] && mysql='cat'
table=log_cmds

max_part_day=$(echo "show create table $table\G" | $mysql | tail -1 | perl -lne "/${table}_part_(\d+)/ && print \$1")

case $1 in
new-part)
  new_max_part_day=$(echo "select date_format(date_add('$max_part_day', interval 7 day), '%Y%m%d')" | $mysql)
  new_max_datetime_days=$(echo "select to_days('$max_part_day') + 8" | $mysql)

  echo "set sql_log_bin=0; ALTER TABLE $table ADD PARTITION (PARTITION ${table}_part_$new_max_part_day VALUES LESS THAN ($new_max_datetime_days) ENGINE = InnoDB);" | $mysql
;;

status)
  days_diff=$(echo "select datediff('$max_part_day', curdate());" | $mysql)
  [ "$days_diff" -lt 30 ] && echo "1;Less than 4 free partitions left" || echo "0;OK"
;;

remove-part)
  shift
  to_remove=${1:-1}
  for i in $(seq $to_remove); do
    min_part_day=$(echo "show create table $table\G" | $mysql | grep 'PARTITION BY RANGE' -A1 | tail -1 | perl -lne "/${table}_part_(\d+)/ && print \$1")
    echo "set sql_log_bin=0; ALTER TABLE $table DROP PARTITION ${table}_part_$min_part_day;" | $mysql
  done
;;

*)
  echo "Usage: $(basename $0) (new-part|status|remove-part [num-of-parts-to-remove])"
esac
