# For legal info, see file "info.rkt".

RACKET_SUFFIX = 
#RACKET_SUFFIX = cgc

.PHONY:: run-sample-1
run-sample-1:
	racket sample-1.ss

RACKET ?= racket$(RACKET_SUFFIX)
APACHE = /usr/sbin/apache2
APACHE_MODULES_DIR = /usr/lib/apache2/modules
APACHE_HOSTIP = 127.0.0.1
APACHE_HOSTNAME = localhost
APACHE_PORT = 8888
APACHE_CONF = apache-conf
APACHE_LOCK = apache-lock
APACHE_PID  = apache-pid
APACHE_ERROR_LOG = apache-error-log
APACHE_ROOT = $(CURDIR)
STRESS1_SCGI_HOSTIP = 127.0.0.1
STRESS1_SCGI_PORT = 4000

STRESS1_SLEEP = 0
STRESS1_URL_PATH = /stress1
STRESS1_URL = http://$(APACHE_HOSTIP):$(APACHE_PORT)$(STRESS1_URL_PATH)
STRESS1_AB_LOG = stress1-ab-log
STRESS1_BIGPOST_FILE = stress1-bigpost-payload~

clean:: stop-apache-if-running
	/bin/rm *~ $(APACHE_CONF) $(APACHE_ERROR_LOG) $(APACHE_LOCK) $(APACHE_PID) $(STRESS1_AB_LOG) $(STRESS1_BIGPOST_FILE) || exit 0

.PHONY:: run-stress1-server
run-stress1-server:
	# STRESS1_SCGI_PORT=$(STRESS1_SCGI_PORT) STRESS1_SLEEP=$(STRESS1_SLEEP) PLTSTDERR=debug $(RACKET) stress1-server.rkt
	STRESS1_SCGI_PORT=$(STRESS1_SCGI_PORT) STRESS1_SLEEP=$(STRESS1_SLEEP) $(RACKET) stress1-server.rkt

.PHONY:: start-apache
start-apache: stop-apache-if-running $(APACHE_CONF) 
	$(APACHE) -f $(CURDIR)/$(APACHE_CONF) -k start
	while [ ! -f $(APACHE_PID) ] ; do sleep 1 ; done
	cat $(APACHE_PID)
	@echo "STRESS1_URL: $(STRESS1_URL)"

.PHONY:: stop-apache
stop-apache:
	$(APACHE) -f $(CURDIR)/$(APACHE_CONF) -k stop
	while [ -f $(APACHE_PID) ] ; do sleep 1 ; done

.PHONY:: stop-apache-if-running
stop-apache-if-running:
	([ -f $(APACHE_PID) ] && $(MAKE) stop-apache) || exit 0

.PHONY:: run-apache
run-apache: stop-apache-if-running
	/bin/rm '$(APACHE_ERROR_LOG)' || exit 0
	$(MAKE) start-apache
	tail -f '$(APACHE_ERROR_LOG)'

STRESS1_AB_N ?= 1000
STRESS1_AB_C ?= 10

.PHONY:: run-stress1-ab
run-stress1-ab:
	/usr/bin/ab -n $(STRESS1_AB_N) -c $(STRESS1_AB_C) '$(STRESS1_URL)' 2>&1 | tee $(STRESS1_AB_LOG)
	echo "" >> $(STRESS1_AB_LOG)
	echo "---- NETSTAT ----" >> $(STRESS1_AB_LOG)
	-netstat -t -n | egrep ':($(STRESS1_SCGI_PORT)|$(APACHE_PORT)) ' | sort >> $(STRESS1_AB_LOG)

.PHONY:: run-stress1-ab-long
run-stress1-ab-long:
	$(MAKE) STRESS1_AB_N=50000 run-stress1-ab

Stress1WgetTimeoutRequestFunc = wget '$(STRESS1_URL)' --no-verbose --output-document=/dev/null --progress=dot --timeout=0.1 --tries=1

.PHONY:: stress1-wget-timeout-request
stress1-wget-timeout-request:
	$(call Stress1WgetTimeoutRequestFunc) || exit 0

.PHONY:: stress1-wget-timeout-request-storm
stress1-wget-timeout-request-storm:
	I=1000 ; while [ $$I -gt 0 ] ; do I=`expr $$I - 1` ; $(call Stress1WgetTimeoutRequestFunc) ; done

Stress1CurlTimeoutRequestFunc = curl '$(STRESS1_URL)' --max-time 1 --output /dev/null --retry 0

.PHONY:: stress1-curl-timeout-request
stress1-curl-timeout-request:
	$(call Stress1CurlTimeoutRequestFunc) || exit 0

.PHONY:: stress1-curl-timeout-request-storm
stress1-curl-timeout-request-storm:
	I=1000 ; while [ $$I -gt 0 ] ; do I=`expr $$I - 1` ; $(call Stress1CurlTimeoutRequestFunc) ; done

Stress1BigpostRequestFunc = curl '$(STRESS1_URL)' --output /dev/null --retry 0 -F 'myfile=@$(STRESS1_BIGPOST_FILE)'

.PHONY:: stress1-bigpost-request
stress1-bigpost-request: $(STRESS1_BIGPOST_FILE)
	$(call Stress1BigpostRequestFunc) || exit 0

.PHONY:: stress1-bigpost-request-storm
stress1-bigpost-request-storm: $(STRESS1_BIGPOST_FILE)
	I=1000 ; while [ $$I -gt 0 ] ; do I=`expr $$I - 1` ; $(call Stress1BigpostRequestFunc) ; done

$(STRESS1_BIGPOST_FILE):
	dd if=/dev/urandom of='$@' bs=9999 count=9999 || (/bin/rm '$@' ; exit 1)

$(APACHE_CONF): Makefile
	cat /dev/null > $@
	echo "# THIS FILE IS GENERATED BY \"Makefile\"" >> $@
	echo "" >> $@
	echo "LoadModule scgi_module $(APACHE_MODULES_DIR)/mod_scgi.so" >> $@
	echo "" >> $@
	echo "ServerRoot $(APACHE_ROOT)" >> $@
	echo "LockFile $(APACHE_LOCK)" >> $@
	echo "PidFile $(APACHE_PID)" >> $@
	echo "Timeout 300" >> $@
	echo "KeepAlive On" >> $@
	echo "MaxKeepAliveRequests 100" >> $@
	echo "KeepAliveTimeout 15" >> $@
	echo "<IfModule mpm_prefork_module>" >> $@
	echo "    StartServers        5" >> $@
	echo "    MinSpareServers     5" >> $@
	echo "    MaxSpareServers     10" >> $@
	echo "    MaxClients          150" >> $@
	echo "    MaxRequestsPerChild 0" >> $@
	echo "</IfModule>" >> $@
	echo "<IfModule mpm_worker_module>" >> $@
	echo "    StartServers        2" >> $@
	echo "    MaxClients          150" >> $@
	echo "    MinSpareThreads     25" >> $@
	echo "    MaxSpareThreads     75 " >> $@
	echo "    ThreadsPerChild     25" >> $@
	echo "    MaxRequestsPerChild 0" >> $@
	echo "</IfModule>" >> $@
	echo "DefaultType text/plain" >> $@
	echo "HostnameLookups Off" >> $@
	echo "ErrorLog $(APACHE_ERROR_LOG)" >> $@
	echo "LogLevel warn" >> $@
	echo "Listen $(APACHE_HOSTIP):$(APACHE_PORT)" >> $@
	echo "DocumentRoot /tmp" >> $@
	echo "<Directory />" >> $@
	echo "    Options       None" >> $@
	echo "    AllowOverride None" >> $@
	echo "</Directory>" >> $@
	echo "SCGIMount $(STRESS1_URL_PATH) $(STRESS1_SCGI_HOSTIP):$(STRESS1_SCGI_PORT)" >> $@
	echo "SCGIServerTimeout 600" >> $@
	echo "" >> $@
	echo "# EOF" >> $@

