#!/bin/bash
# Berechnung der verschiedenen Speichereinstellungen in
# MariaDB und Zarfa Konfiguration
# Beruecksichtigt wird der gesamte zur Verfuegung stehende
# Speicher.
# (C) 2015 Stefan Schaefer -- stefan@invis-server.org
# License: GPLv3

# Dieses Programm ist freie Software. Sie können es unter den Bedingungen der 
# GNU General Public License, wie von der Free Software Foundation veröffentlicht,
# weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder
# (nach Ihrer Option) jeder späteren Version.

# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen
# von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite 
# Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. 
# Details finden Sie in der GNU General Public License.

# Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem 
# Programm erhalten haben. Falls nicht, siehe <http://www.gnu.org/licenses/>. 

memtotal=$(cat /proc/meminfo|grep MemTotal|tr -s " "|cut -d " " -f2)

memtotalmb=$(echo "scale=0;$memtotal/1024"|bc)

if (( $memtotalmb <= 2048 )); then
	# 25% fuer MariaDB innodb_buffer_pool_size
	innodbbps=$(echo "scale=0;$memtotalmb/4"|bc)
	# 12,5 % fuer Zarafa cache_cell_size
	zarafaccs=$(echo "scale=0;$memtotalmb/8"|bc)
elif (( $memtotal > 2048 && $memtotal <= 4096 ));then
	# 33% fuer MariaDB innodb_buffer_pool_size
	innodbbps=$(echo "scale=0;$memtotalmb/3"|bc)
	# 17,5 % fuer Zarafa cache_cell_size
	zarafaccs=$(echo "scale=0;$memtotalmb/6"|bc)
else
	# 50% fuer MariaDB innodb_buffer_pool_size
	innodbbps=$(echo "scale=0;$memtotalmb/2"|bc)
	# 10 % fuer Zarafa cache_cell_size
	zarafaccs=$(echo "scale=0;$memtotalmb/4"|bc)
fi

# innodb_log_file_size = 25% des innodb_buffer_pool_size
innodblfs=$(echo "scale=0;$innodbbps/4"|bc)

#echo $memtotalmb
# Ausgabe
if [[ -n $1 && $1 == "v" ]]; then
    echo -e "Empfohlene Einstellungen:\n\tVerfügbarer Arbeitsspeicher:\t\t$memtotalmb MB\n\tMariaDB innodb_buffer_pool_size:\t$innodbbps MB\n\tMariaDB innodb_log_file_size:\t\t$innodblfs MB\n\tZarafa cache_cell_size:\t\t\t$zarafaccs MB"
else
    echo "$innodbbps $innodblfs $zarafaccs"
fi