#!/bin/sh
#
# This file is part of OpenMediaVault.
#
# @license   http://www.gnu.org/licenses/gpl.html GPL Version 3
# @author    Volker Theile <volker.theile@openmediavault.org>
# @copyright Copyright (c) 2009-2012 Volker Theile
#
# OpenMediaVault is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# OpenMediaVault is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenMediaVault. If not, see <http://www.gnu.org/licenses/>.

# Documentation/Howto:
# http://www.korbinian-pauli.de/artikel/mit-lm-sensors-und-rrd-cpu-und-mb-temperatur-uberwachen
# http://www.uvm.edu/~bcodding/ticker/archives/33
# http://blog.stefan-betz.net/2009/1/6/collectd-und-rrdtool-im-einsatz
# http://wiki.lugbz.de/HowTo/SelfMadeMonitoring
# https://jeremy.visser.name/2010/02/23/enable-caching-in-collectd

set -e

. /etc/default/openmediavault
. /usr/share/openmediavault/scripts/helper-functions

OMV_COLLECTD_CONFIG=${OMV_COLLECTD_CONFIG:-"/etc/collectd/collectd.conf"}
OMV_COLLECTD_DEFAULT=${OMV_COLLECTD_DEFAULT:-"/etc/default/collectd"}
OMV_COLLECTD_CRON=${OMV_COLLECTD_CRON:-"/etc/cron.d/openmediavault-rrdtoolgraph"}
OMV_COLLECTD_PLUGINSDIR=${OMV_COLLECTD_PLUGINSDIR:-"${OMV_SCRIPTS_DIR}/collectd.d"}
OMV_COLLECTD_HOSTNAME=${OMV_COLLECTD_HOSTNAME:-"localhost"}
OMV_COLLECTD_SYSLOG_LOGLEVEL=${OMV_COLLECTD_SYSLOG_LOGLEVEL:-"info"}
OMV_COLLECTD_RRDTOOL_DATADIR=${OMV_COLLECTD_RRDTOOL_DATADIR:-"/var/lib/collectd/rrd"}
OMV_COLLECTD_RRDTOOL_CACHETIMEOUT=${OMV_COLLECTD_RRDTOOL_CACHETIMEOUT:-"120"}
OMV_COLLECTD_RRDTOOL_CACHEFLUSH=${OMV_COLLECTD_RRDTOOL_CACHEFLUSH:-"900"}
OMV_COLLECTD_RRDTOOL_MKGRAPH=${OMV_COLLECTD_RRDTOOL_MKGRAPH:-"/usr/sbin/omv-mkgraph"}
OMV_COLLECTD_RRDTOOL_GRAPH_WIDTH=${OMV_COLLECTD_RRDTOOL_GRAPH_WIDTH:-"400"}
OMV_COLLECTD_RRDTOOL_GRAPH_HEIGHT=${OMV_COLLECTD_RRDTOOL_GRAPH_HEIGHT:-"120"}
OMV_COLLECTD_RRDTOOL_GRAPH_IMGFORMAT=${OMV_COLLECTD_RRDTOOL_GRAPH_IMGFORMAT:-"PNG"}
OMV_COLLECTD_RRDTOOL_GRAPH_IMGDIR=${OMV_COLLECTD_RRDTOOL_GRAPH_IMGDIR:-"/var/lib/openmediavault/rrd"}

mkconf() {
	# Create '/etc/collectd/collectd.conf' file
	cat <<EOF > ${OMV_COLLECTD_CONFIG}
Hostname "${OMV_COLLECTD_HOSTNAME}"

LoadPlugin syslog
<Plugin syslog>
  LogLevel ${OMV_COLLECTD_SYSLOG_LOGLEVEL}
</Plugin>

LoadPlugin rrdtool
<Plugin rrdtool>
  DataDir "${OMV_COLLECTD_RRDTOOL_DATADIR}"
  CacheTimeout ${OMV_COLLECTD_RRDTOOL_CACHETIMEOUT}
  CacheFlush ${OMV_COLLECTD_RRDTOOL_CACHEFLUSH}
</Plugin>

EOF

	# Create '/etc/default/collectd' file
	cat <<EOF > ${OMV_COLLECTD_DEFAULT}
# /etc/default/collectd

# 0: start collectd on boot, 1: do not start collectd on boot
# default: 0
DISABLE=0

# 0: start collectd in stand-alone mode, 1: monitor collectd using collectdmon
# default: 1
USE_COLLECTDMON=0

# number of seconds to wait for collectd to shut down
# default: 30
MAXWAIT=30

# 0: do not enable core-files, 1: enable core-files ... if collectd crashes
# default: 0
ENABLE_COREFILES=0
EOF

	# Create '/etc/cron.d/collectd-rrdgraph' file. Take care about that there
	# will not be send an email if the cron job fails.
	cat <<EOF > ${OMV_COLLECTD_CRON}
# Create graphs every 5 minutes
# m h dom mon dow user    command
*/5 * * * * root ${OMV_COLLECTD_RRDTOOL_MKGRAPH} >/dev/null 2>&1
EOF

	# Create '/usr/sbin/omv-mkgraph' file
	cat <<EOF > ${OMV_COLLECTD_RRDTOOL_MKGRAPH}
#!/bin/sh
# This file is auto-generated by OpenMediaVault.
set -e

DATA="${OMV_COLLECTD_RRDTOOL_DATADIR}/${OMV_COLLECTD_HOSTNAME}"
IMGDIR="${OMV_COLLECTD_RRDTOOL_GRAPH_IMGDIR}"
HOURSTART="-1h"
HOURTITLE=" - by hour"
DAYSTART="-1d"
DAYTITLE=" - by day"
WEEKSTART="-1w"
WEEKTITLE=" - by week"
MONTHSTART="-1m"
MONTHTITLE=" - by month"
YEARSTART="-1y"
YEARTITLE=" - by year"
DEFAULTS="--imgformat ${OMV_COLLECTD_RRDTOOL_GRAPH_IMGFORMAT} --width ${OMV_COLLECTD_RRDTOOL_GRAPH_WIDTH} --height ${OMV_COLLECTD_RRDTOOL_GRAPH_HEIGHT} --alt-y-grid --interlaced --font TITLE:9:."
LASTUPDATE="Last update\: \$(date | sed -e 's/:/\\\:/g')\r"

# Helper function to copy the error graph image
omv_copy_error_rrd_graph_image() {
	for period in hour day week month year
	do
		cp ${OMV_RRDGRAPH_ERROR_IMAGE} \${IMGDIR}/\$1-\${period}.png
	done
}

# Create target graph directory
mkdir -p \${IMGDIR}
# Remove old graphs
rm -f \${IMGDIR}/*

EOF

	chmod 755 ${OMV_COLLECTD_RRDTOOL_MKGRAPH}

	# Create '/etc/avahi/services/*.service' files
	run-parts ${OMV_COLLECTD_PLUGINSDIR}

	cat <<EOF >> ${OMV_COLLECTD_CONFIG}
Include "/etc/collectd/thresholds.conf"
EOF
}

case "$1" in
	mkconf|*)
		mkconf
		;;
esac
