#!/bin/bash
#
# Cleanup zabbix database
#
# - Install
# @code
# cp zabbix_cleanup /etc/cron.monthly/
# chmod 755 /etc/cron.monthly/zabbix_cleanup
# chown root:root /etc/cron.monthly/zabbix_cleanup
# @endcode

export LANG=C
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
readonly ZABBIX_SERVER_CONFIG=/etc/zabbix_server.conf
readonly RAW_ZABBIX_DB_HOST=$(grep -o -P "^DBHost=.+" $ZABBIX_SERVER_CONFIG | awk -F'=' -- '{print $2}')
readonly RAW_ZABBIX_DB_NAME=$(grep -o -P "^DBName=.+" $ZABBIX_SERVER_CONFIG | awk -F'=' -- '{print $2}')
readonly RAW_ZABBIX_DB_USER=$(grep -o -P "^DBUser=.+" $ZABBIX_SERVER_CONFIG | awk -F'=' -- '{print $2}')
readonly RAW_ZABBIX_DB_PASSWORD=$(grep -o -P "^DBPassword=.+" $ZABBIX_SERVER_CONFIG | awk -F'=' -- '{print $2}')
readonly ZABBIX_DB_HOST=${RAW_ZABBIX_DB_HOST:-"127.0.0.1"}
readonly ZABBIX_DB_NAME=${RAW_ZABBIX_DB_NAME:-"zabbix"}
readonly ZABBIX_DB_USER=${RAW_ZABBIX_DB_USER:-"zabbix"}
readonly ZABBIX_DB_PASSWORD=${RAW_ZABBIX_DB_PASSWORD:-""}
readonly MYSQL_TABLES=(trends trends_uint history history_uint)
readonly MYSQL_TABLE_OPTIONS="ENGINE=InnoDB"
#readonly MYSQL_TABLE_OPTIONS="ENGINE=InnoDB ROW_FORMAT=Compressed KEY_BLOCK_SIZE=8" # See http://dev.mysql.com/doc/innodb/1.1/en/innodb-row-format-dynamic.html
readonly CUR_DIR=$(cd $(dirname $0);pwd)
readonly CMDNAME=$(basename $0)
readonly CMDBASENAME=$(basename $0 .sh)

usage_exit() {
        cat 1>&2 << EOS
Usage: $CMDNAME
  --help                     help
EOS
        exit 1
}

zabbix_db_cleanup() {
	for table in ${MYSQL_TABLES[@]};do
		local start_sec=$SECONDS
		echo "alter table ${table} $MYSQL_TABLE_OPTIONS" | mysql -u $ZABBIX_DB_USER -p$ZABBIX_DB_PASSWORD -h $ZABBIX_DB_HOST $ZABBIX_DB_NAME
		local end_sec=$SECONDS
		echo "[INFO] ALTER TABLE completed. Table: $table, $(($end_sec - $start_sec)) seconds." | logger -t $CMDNAME
	done
}

main() {
	if [ "$ZABBIX_DB_HOST" == "" ]; then
		echo "[ERROR] ZABBIX_DB_HOST is empty" 1>&2
		usage_exit
	fi
	if [ "$ZABBIX_DB_NAME" == "" ]; then
		echo "[ERROR] ZABBIX_DB_NAME is empty" 1>&2
		usage_exit
	fi
	if [ "$ZABBIX_DB_USER" == "" ]; then
		echo "[ERROR] ZABBIX_DB_USER is empty" 1>&2
		usage_exit
	fi
	if [ "$ZABBIX_DB_PASSWORD" == "" ]; then
		echo "[ERROR] ZABBIX_DB_PASSWORD is empty" 1>&2
		usage_exit
	fi

	mysqladmin ping -u $ZABBIX_DB_USER -p$ZABBIX_DB_PASSWORD -h $ZABBIX_DB_HOST > /dev/null 2>&1
	if [ "$?" != "0" ]; then
		echo "[ERROR] MySQL is not alive. Host: $ZABBIX_DB_HOST, User: $ZABBIX_DB_USER" 1>&2
		usage_exit
	fi
	
	zabbix_db_cleanup
	
	return 0
}

main

# vim: ts=4:sw=4:tw=80
