# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI="5"

inherit depend.apache eutils user multilib

DESCRIPTION="Icinga Web - new Web Interface"
HOMEPAGE="http://www.icinga.org/"
SRC_URI="mirror://sourceforge/icinga/${P}.tar.gz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~x86 ~amd64"
IUSE="apache2 mysql pnp postgres"
DEPEND="dev-php/phing
		dev-db/libdbi-drivers[mysql?,postgres?]
		>=net-analyzer/icinga-1.10.0
		dev-lang/php[apache2?,cli,json,mysql?,pdo,postgres?,sockets,xslt,xml]
		pnp? ( net-analyzer/pnp4nagios )"
RDEPEND="${DEPEND}"

want_apache2

pkg_setup() {
	if use apache2 ; then
		depend.apache_pkg_setup
	fi
	enewgroup icinga
	enewgroup nagios
	enewuser icinga -1 -1 /var/lib/icinga "icinga,nagios"
}

src_prepare() {
	#removed checks for some php stuff since we have these things called use flags
	sed -i 's/ACICINGA_CHECK_PHP_MODULE/\#ACICINGA_CHECK_PHP_MODULE/g' configure.ac
	sed -i 's/make\ /make\ \-j1\ /g' lib/Makefile.in
	autoreconf
}

src_configure() {
	local myconf

	myconf="--prefix=/usr/share/icinga/icinga-web
	--bindir=/usr/sbin
	--sbindir=/usr/$(get_libdir)/icinga/cgi-bin
	--datarootdir=/usr/share/icinga/htdocs
	--localstatedir=/var/lib/icinga
	--sysconfdir=/etc/icinga
	--libexecdir=/usr/$(get_libdir)/icinga/plugins
	--with-bin-user=icinga
	--with-bin-group=nagios
	--with-api-cmd-file=/var/lib/icinga/rw/icinga.cmd
	--with-conf-dir=/etc/icinga-web
	--with-log-dir=/var/log/icinga-web
	--with-icinga-objects-dir=/etc/icinga/objects
	--with-icinga-bin=/usr/sbin/icinga
	--with-icinga-cfg=/etc/icinga/icinga.cfg"

	if use apache2 ; then
		myconf+=" --with-web-user=apache
		--with-web-group=apache
		--with-web-apache-path=${APACHE_MODULES_CONFDIR}"
	else
		myconf+=" --with-web-user=root
		--with-web-group=root"
	fi

	if use postgres ; then
		myconf+=" --with-db-type=pgsql
		--with-db-port=5432
		--with-api-subtype=pgsql
		--with-api-port=5432"
	fi

	econf ${myconf}
}

src_install() {
	dodoc README
	rm -f README

	emake -j5 DESTDIR="${D}" install

	emake DESTDIR="${D}" install-javascript

	if use apache2 ; then
		dodir ${APACHE_MODULES_CONFDIR}
		emake DESTDIR="${D}" install-apache-config
		echo '<IfDefine ICINGA_WEB>' > "${D}/${APACHE_MODULES_CONFDIR}/99_icinga-web.conf"
		cat "${WORKDIR}/${P}/etc/apache2/icinga-web.conf" >> "${D}/${APACHE_MODULES_CONFDIR}/99_icinga-web.conf"
		rm "${D}/${APACHE_MODULES_CONFDIR}/icinga-web.conf" || die "rm failed"
		echo '</IfDefine>' >> "${D}/${APACHE_MODULES_CONFDIR}/99_icinga-web.conf"
	fi

	insinto /usr/share/icinga/icinga-web/contrib
	doins -r etc/schema/*

	if use apache2 ; then
		sed -i 's/%%USER%%/apache/g'  etc/scheduler/icingaCron
	else
		sed -i 's/%%USER%%/root/g'  etc/scheduler/icingaCron
	fi
	sed -i 's/%%PATH%%/\/usr\/share\/icinga\/icinga-web/g' etc/scheduler/icingaCron

	dodir /usr/share/icinga/icinga-web/cron/
	cat - >> "${D}"/usr/share/icinga/icinga-web/cron/crontab <<EOF
# Force the shell to bash
SHELL=/bin/bash
#mail to root
MAILTO=root

#runs every minute
* * * * * /usr/bin/php /usr/share/icinga/icinga-web/lib/icingaScheduler/icingaCron.php --useAgavi --exec >> /var/log/icinga-web/cron_error.log
EOF

	cat - >> "${D}"/usr/share/icinga/icinga-web/cron/fcrontab <<EOF
# Mail reports to root
!mailto(root)

#runs every minute
@ 1		/usr/bin/php /usr/share/icinga/icinga-web/lib/icingaScheduler/icingaCron.php --useAgavi --exec >> /var/log/icinga-web/cron_error.log
EOF

	if use apache2 ; then
		diropts -o apache -g apache
	else
		diropts -o root -g root
	fi
	dodir /var/log/icinga-web

	if use apache2 ; then
		fowners apache:apache /usr/share/icinga/icinga-web/lib/icingaScheduler/res/storage.dat
	else
		fowners root:root /usr/share/icinga/icinga-web/lib/icingaScheduler/res/storage.dat
	fi

	if use pnp ; then
		insinto /usr/share/icinga/icinga-web/app/modules/Cronks/data/xml/extensions/
		doins contrib/PNP_Integration/templateExtensions/pnp-host-extension.xml
		doins contrib/PNP_Integration/templateExtensions/pnp-service-extension.xml
	fi
}

pkg_config() {
	einfo "press enter to install the icinga-web crontab"
	einfo "installation from /usr/share/icinga/icinga-web/cron/icingaCron"
	einfo
	read

	if has_version sys-process/fcron; then
		fcrontab - -u root < /usr/share/icinga/icinga-web/cron/fcrontab
	else
		crontab - -u root < /usr/share/icinga/icinga-web/cron/crontab
	fi
}

pkg_postinst() {
	einfo
	einfo "If this is a new install, you must create a new database for it, e.g. icinga_web."
	einfo "You can find the database scripts in /usr/share/icinga/icinga-web/contrib/."
	einfo
	einfo "Additionally, you need to setup a database user."
	einfo "The user must have default data privileges like SELECT, UPDATE, INSERT, DELETE."
	einfo
	einfo "Example for a MySQL database:"
	einfo "  echo \"CREATE DATABASE icinga_web;\" | mysql"
	einfo "  echo \"GRANT SELECT,UPDATE,INSERT,DELETE ON icinga_web.* TO 'icinga_web'@'localhost' IDENTIFIED BY 'xxxxxx';\" | mysql"
	einfo "  echo \"FLUSH PRIVILEGES;\" | mysql"
	einfo
	einfo "  cat /usr/share/icinga/icinga-web/contrib/mysql.sql | mysql icinga_web"
	einfo

	ewarn
	ewarn "If you're upgrading from a previous release, you must upgrade your database schema."
	ewarn "You can find upgrade scripts in /usr/share/icinga/icinga-web/contrib/updates/."
	ewarn
	ewarn "IMPORTANT: If you are upgrading from an older version and there are other versions in between,"
	ewarn "           be advised that you need to apply those upgrade files with incremental steps!"
	ewarn
	ewarn "Example to upgrade a MySQL database:"
	ewarn "  cat  /usr/share/icinga/icinga-web/contrib/updates/mysql_<oldversion>_to_<newversion>.sql | mysql icinga_web"
	ewarn
	ewarn "Don't forget to clear the config cache."
	ewarn "  /usr/share/icinga/icinga-web/bin/clearcache.sh"
	ewarn

	einfo
	einfo "Please note that the magic_quotes_gpc setting must be disabled (in both apache and cli php.ini)."
	einfo

	if use apache2 ; then
		einfo
		einfo "apache config was installed into"
		einfo "/etc/apache2/modules.d/99_icinga-web.conf"
		einfo
		einfo "The apache config value for \'ServerTokens\' must be set to at"
		einfo "least \'Min\'."
		einfo
	else
		einfo
		einfo "If you are not using apache you may need to change some"
		einfo "permissions, so that your web server can access files and logs"
		einfo
	fi
}