#!/bin/bash
# Copyright (C) 2004 Networks Associates Technology Inc. All rights reserved.

if [ -f $NETAWSS/.profile.vars ]; then 
    . $NETAWSS/.profile.vars 
else 
    . /var/NAIENV/.profile.vars 
fi 
set -a

PATH=$wsPATH:$PATH

shopt -s extglob
. ${WSMGMT}/shvars-xmlconf > /dev/null 2>&1

# Functions for reading how much free memory  swap there is
read_mem_value()
{
	cat /proc/meminfo | grep ^${1}: | awk  ' { print $2 } '
}
read_swap_used()
{
	cat /proc/swaps | grep ^/dev | awk  ' { print $4 } '
}
read_max_swap_util()
{
xsltproc - ${XMLCONFDIR}/system.xml <<-END
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
    <xsl:for-each select="/PolicySet/GlobalSettings[@name='system']/Policy[@name='system_variables']/PolicyStatement/Settings[@name='realtime-monitor-settings']">
	<xsl:value-of select="Attr[@name='MaxSwapUsed']/@value"/>
 	<xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
END
}
restart_proxies()
{
    /usr/bin/logger -t ws-mem-check "Restarting ws proxies as ${1}"
    ${WSMGMT}/webshieldservices.d/70_proxies stop
    killall -HUP evthandler
    ${WSMGMT}/webshieldservices.d/70_proxies start
}

MaxIntoSwap=`read_max_swap_util`
if [ $MaxIntoSwap -eq 0 ]
then
	exit 0
fi
        
MemFree=`read_mem_value MemFree`
SwapUsed=`read_swap_used`
IntoSwap=`expr ${SwapUsed} \- ${MemFree}`
        
if [ $IntoSwap -gt $MaxIntoSwap ]
then
	# too much restart the proxies
	restart_proxies "swap used ${IntoSwap} > maxmimum of ${MaxIntoSwap}"
fi
exit 0
