#!/sbin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
#

. /lib/svc/share/smf_include.sh

getprop() {
	PROPVAL=""
	if [ -z "$2" ]; then
		FMRI=svc:/application/pkg/system-repository:default
	else
		FMRI=${SMF_FMRI}
	fi
	svcprop -q -p $1 ${FMRI}
	if [ $? -eq 0 ] ; then
		PROPVAL=$(svcprop -p $1 ${FMRI})
		if [ "${PROPVAL}" = "\"\"" ] ; then
			PROPVAL=""
		fi
		return
	fi
}

check_failure() {
	RESULT=$1
	MESSAGE=$2
	NON_FATAL=$3
	if [ $RESULT -ne 0 ]; then
		echo $MESSAGE
		if [ -n "$NON_FATAL" ]; then
			return
		fi
		exit $SMF_EXIT_ERR_FATAL
	fi
}

run_htcacheclean() {
	if [ "${SYSREPO_CACHE_DIR}" != "None" ] && [ "${SYSREPO_CACHE_DIR}" != "memory" ]; then
		# Start a cache cleaning process, limiting the cache to
		# ${SYSREPO_CACHE_MAX} megabytes, being nice about
		# scheduling and removing empty directories if needed.
		/usr/apache2/2.4/bin/htcacheclean \
		   -l ${SYSREPO_CACHE_MAX}M -n \
		    -p ${SYSREPO_CACHE_DIR} \
		   -P ${SYSREPO_CACHE_DIR}/../sysrepo_htcacheclean.pid \
		   -t
		check_failure $? "htcacheclean failed to run cleanly"
	fi
}

kill_htcacheclean() {
	if [ -f ${SYSREPO_CACHE_DIR}/../sysrepo_htcacheclean.pid ]; then
		PID=$(< ${SYSREPO_CACHE_DIR}/../sysrepo_htcacheclean.pid)
		echo "Previous htcacheclean pid file found - killing process $PID"
		/usr/bin/kill -TERM $PID
		check_failure $? "failed to kill htcacheclean process $PID" \
		    "not_fatal"
	fi
}

getprop config/cache_dir
if [ "${PROPVAL}" != "" ] ; then
	SYSREPO_CACHE_DIR=${PROPVAL}
fi

getprop config/cache_max
if [ "${PROPVAL}" != "" ] ; then
	SYSREPO_CACHE_MAX=${PROPVAL}
fi

kill_htcacheclean
run_htcacheclean

exit $SMF_EXIT_OK
