#
# @package      hubzero-submit-distributor
# @file         Makefile
# @author       Nicholas J. Kisseberth <nkissebe@purdue.edu>
# @copyright    Copyright (c) 2010-2012 HUBzero Foundation, LLC.
# @license      http://www.gnu.org/licenses/lgpl-3.0.html LGPLv3
#
# Copyright (c) 2010-2012 HUBzero Foundation, LLC.
#
# This file is part of: The HUBzero(R) Platform for Scientific Collaboration
#
# The HUBzero(R) Platform for Scientific Collaboration (HUBzero) is free
# software: you can redistribute it and/or modify it under the terms of
# the GNU Lesser General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any
# later version.
#
# HUBzero 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# HUBzero is a registered trademark of HUBzero Foundation, LLC.
#

BATCHMONITORS = monitorCondor.py monitorCondorG.py monitorFactory.py monitorLL.py \
                monitorLSF.py monitorPBS.py monitorSLURM.py monitorWF.py
BATCHSCHEDULERS = condor ll lsf pbs slurm
BATCHSCRIPTS = cleanupjob.sh killbatchjob.sh receiveinput.sh submitbatchjob.sh transmitresults.sh
DISTRIBUTORSCRIPTS = genuserid genuserpki update-known-hosts
DISTRIBUTORMAINS = distributor.py distributor.sh
DISTRIBUTORDFTFILES = environmentwhitelist.dft managers.dft monitors.dft sites.dft tools.dft tunnels.dft
DISTRIBUTORDATFILES = environmentwhitelist.dat managers.dat monitors.dat sites.dat tools.dat tunnels.dat
MONITORJOB = monitorJob.py
MONITORJOBUTILS = monitorJobQ.py monitorJobR.py monitorJobS.py monitorJobT.py
MONITORTUNNEL = monitorTunnel.py
MONITORTUNNELUTILS = monitorTunnelA.py monitorTunnelD.py monitorTunnelI.py monitorTunnelR.py monitorTunnelT.py

PEGASUSLOCALCONFIGS = pegasus_local.rc sites_local.xml

SUBMITDIR=$(DESTDIR)/opt/submit
VARLOGDIR=$(DESTDIR)/var/log
ETCDIR=$(DESTDIR)/etc

CONDORVERSION=7.6.6
PEGASUSVERSION = 4.0.0
HUBHOSTNAME:=$(shell hostname)

default all build:
	@true

install:
	# create-optsubmit
	install --mode 0755 -d $(SUBMITDIR)
	# install-distributor-dft: 
	for dftFile in $(DISTRIBUTORDFTFILES) ; do \
		install --mode 0640 -D $${dftFile} $(SUBMITDIR)/$${dftFile} ; \
	done
	# install-distributor-dat
	for datFile in $(DISTRIBUTORDATFILES) ; do \
		install --mode 0644 -D $${datFile} $(SUBMITDIR)/$${datFile};  \
	done
	# install-distributor-batchmonitors
	install --mode 2750 -d $(SUBMITDIR)/BatchMonitors
	for batchMonitor in $(BATCHMONITORS) ; do \
		install --mode 0750 -D BatchMonitors/$${batchMonitor} $(SUBMITDIR)/BatchMonitors/$${batchMonitor}; \
	done
	# install-distributor-scripts
	install --mode 2750 -d $(SUBMITDIR)/Scripts
	for batchScheduler in $(BATCHSCHEDULERS) ; do \
		install --mode 2750 -d $(SUBMITDIR)/Scripts/$${batchScheduler}; \
		for batchScript in $(BATCHSCRIPTS) ; do \
			install --mode 0755 -D Scripts/$${batchScheduler}/$${batchScript} $(SUBMITDIR)/Scripts/$${batchScheduler}; \
		done \
	done
	# install-distributor-bin
	install --mode 2751 -d $(SUBMITDIR)/bin
	for distributorScript in $(DISTRIBUTORSCRIPTS) ; do \
		install --mode 0755 -D bin/$${distributorScript} $(SUBMITDIR)/bin/$${distributorScript}; \
	done
	# install-distributor-mains
	for distributorMain in $(DISTRIBUTORMAINS) ; do \
		install --mode 0755 -D $${distributorMain} $(SUBMITDIR)/$${distributorMain}; \
	done
	(cd $(SUBMITDIR); ln --force --symbolic distributor.py distributor)
	# install-distributor-keys
	install --mode 0751 -d $(SUBMITDIR)/etc
	install --mode 0751 -d $(SUBMITDIR)/.ssh
	# install-distributor-condor-scripts:
	install --mode 2751 -d $(SUBMITDIR)/bin
	for batchScript in $(BATCHSCRIPTS) ; do \
		install --mode 0755 -D Scripts/condor/$${batchScript} $(SUBMITDIR)/bin/$${batchScript}; \
		sed -e "s/@CONDORVERSION@/$(CONDORVERSION)/" \
			-e "s/@PEGASUSVERSION@/$(PEGASUSVERSION)/" --in-place $(SUBMITDIR)/bin/$${batchScript}; \
	done
	# install-monitor-job
	install --mode 0750 -D $(MONITORJOB) $(SUBMITDIR)/$(MONITORJOB);
	for monitorJobUtil in $(MONITORJOBUTILS) ; do \
		install --mode 0750 -D $${monitorJobUtil} $(SUBMITDIR)/$${monitorJobUtil}; \
	done
	# install-monitor-tunnel
	install --mode 0750 -D $(MONITORTUNNEL) $(SUBMITDIR)/$(MONITORTUNNEL); \
	for monitorTunnelUtil in $(MONITORTUNNELUTILS) ; do \
		install --mode 0750 -D $${monitorTunnelUtil} $(SUBMITDIR)/$${monitorTunnelUtil}; \
	done
	# install-monitor-condor
	install --mode 0750 -D BatchMonitors/monitorCondor.py $(SUBMITDIR)/monitorCondor.py 
	sed -e "s/@CONDORVERSION@/$(CONDORVERSION)/" --in-place $(SUBMITDIR)/monitorCondor.py
	touch emptyFile
	[ -f $(SUBMITDIR)/monitorCondor.history ] || \
		install --mode 0644 -D emptyFile $(SUBMITDIR)/monitorCondor.history
	rm -f emptyFile
	# initialize-monitor-job
	install --mode 0750 -D monitorJobInitialize.py $(SUBMITDIR)/monitorJobInitialize.py
	# install-distributor-logs
	install --mode 0775 -d $(VARLOGDIR)/submit
	install --mode 0755 -d $(VARLOGDIR)/submit/distributor
	touch emptyFile
	[ -f $(VARLOGDIR)/submit/distributor/distributor.log ] || \
		install --mode 0666 -D emptyFile $(VARLOGDIR)/submit/distributor/distributor.log
	[ -f $(VARLOGDIR)/submit/distributor/gridjobhistory.log ] || \
		install --mode 0666 -D emptyFile $(VARLOGDIR)/submit/distributor/gridjobhistory.log
	[ -f $(VARLOGDIR)/submit/distributor/gridjobid.log ] || \
		install --mode 0666 -D emptyFile $(VARLOGDIR)/submit/distributor/gridjobid.log
	rm -f emptyFile
	# install-monitor-logs
	install --mode 0775 -d $(VARLOGDIR)/submit
	install --mode 0755 -d $(VARLOGDIR)/monitors
	touch emptyFile
	[ -f $(VARLOGDIR)/submit/monitors/monitorCondor.log ] || \
		install --mode 0644 -D emptyFile $(VARLOGDIR)/submit/monitors/monitorCondor.log
	[ -f $(VARLOGDIR)/monitors/monitorJob.log ] || \
		install --mode 0644 -D emptyFile $(VARLOGDIR)/submit/monitors/monitorJob.log
	[ -f $(VARLOGDIR)/submit/monitors/monitorTunnel.log ] || \
		install --mode 0644 -D emptyFile $(VARLOGDIR)/submit/monitors/monitorTunnel.log
	rm -f emptyFile
	# install-pegasus-local: 
	for pegasusLocalConfig in $(PEGASUSLOCALCONFIGS) ; do \
           install --mode 0644 -D $${pegasusLocalConfig} $(SUBMITDIR)/$${pegasysLocalConfig} ; \
    done
    # install-server-init
	install --mode 0755 -D jobmon $(ETCDIR)/init.d/jobmon
	install --mode 0755 -D tunnelmon $(ETCDIR)/init.d/tunnelmon 
	
configure:
	# install-user-gridman
	adduser --system --group --force-badname --home /var/gridman --shell /bin/bash --disabled-password --gecos Gridman gridman || true
	adduser --quiet gridman tunneler || true
	# install-distrubtor-dat
	sed -e "s/@HUBHOSTNAME@/$(HUBHOSTNAME)/" --in-place $(SUBMITDIR)/monitors.dat
	# install-distributor-bin
	$(SUBMITDIR)/bin/update-known-hosts $(HUBHOSTNAME)
	# install-distributor-mains
	for distributorMain in $(DISTRIBUTORMAINS) ; do \
		sed -e "s/@CONDORVERSION@/$(CONDORVERSION)/" --in-place $(SUBMITDIR)/$${distributorMain}; \
	done
	# install-distributor-keys
	[ -f $(SUBMITDIR)/.ssh/submit_rsa ] || \
		ssh-keygen -t rsa -q -N "" -f $(SUBMITDIR)/.ssh/submit_rsa -C "submit@$(HUBHOSTNAME)"
	chown gridman $(SUBMITDIR)/.ssh/submit_rsa $(SUBMITDIR)/.ssh/submit_rsa.pub
	install --mode 0644 -D $(SUBMITDIR)/.ssh/submit_rsa.pub $(SUBMITDIR)/etc/submit_rsa.pub 
	install -o gridman -g gridman --mode 0700 -d /var/gridman/.ssh
	cat $(SUBMITDIR)/.ssh/submit_rsa.pub >> /var/gridman/.ssh/authorized_keys
	chown gridman:gridman /var/gridman/.ssh/authorized_keys
	chmod 0600 /var/gridman/.ssh/authorized_keys
	# install-monitor-job
	chown gridman $(SUBMITDIR)/$(MONITORJOB)
	# install-monitor-tunnel
	chown gridman $(SUBMITDIR)/$(MONITORTUNNEL)
	# install-monitor-condor:
	chown gridman $(SUBMITDIR)/monitorCondor.py
	chown gridman $(SUBMITDIR)/monitorCondor.history
	# initialize-monitor-job:
	python $(SUBMITDIR)/monitorJobInitialize.py
	chown gridman $(SUBMITDIR)/monitorJobDB $(SUBMITDIR)/monitorJob.dump
	chmod 0640 $(SUBMITDIR)/monitorJobDB $(SUBMITDIR)/monitorJob.dump
	# install-monitor-logs
	chown gridman $(VARLOGDIR)/submit/monitors
	chown gridman:gridman $(VARLOGDIR)/submit/monitors/monitorCondor.log
	chown gridman:gridman $(VARLOGDIR)/submit/monitors/monitorJob.log
	chown gridman:gridman $(VARLOGDIR)/submit/monitors/monitorTunnel.log
	# install-server-init
	insserv jobmon
	insserv tunnelmon
	insserv
	
clean:
	rm -f build-stamp configure-stamp *.pyc
