include ../common.mk

MASTER_PIDFILE := $(CURDIR)/grinder-master.pid
HTTP_PIDFILE   := $(CURDIR)/grinder-http.pid

MASTER_LOGFILE := $(CURDIR)/grinder-master.log
HTTP_LOGFILE   := $(CURDIR)/grinder-http.log

MASTER_SERVANT_PATH := $(CURDIR)/../../../../../tools/grinder/bin/grinder-master
HTTP_SERVANT_PATH := $(CURDIR)/../../../../../tools/grinder/http

MASTER_SERVANT := $(MASTER_SERVANT_PATH)/grinder-master
HTTP_SERVANT := $(HTTP_SERVANT_PATH)/grinder

grinder_socket := /tmp/yandex-maps-grinder-http-$(USER).sock

help:
	@echo
	@$(call show-header,"Supported Targets")
	@$(call show-item,help,"print this help and exit")
	@$(call show-item,start,"start all the grinder services")
	@$(call show-item,stop,"stop all the grinder services")
	@$(call show-item,start-master,"start grinder master service")
	@$(call show-item,stop-master,"stop grinder master service")
	@$(call show-item,start-grinder-http,"start grinder http servant")
	@$(call show-item,stop-grinder-http,"stop grinder http servant")
	@$(call show-item,clean,"remove generated files")
	@echo
	@$(call show-header,"Supported Variables")
	@$(call show-item,VERBOSE,"Define to let make print detailed output")
	@echo


.PHONY: start stop
start: start-master start-grinder-http

stop: stop-master stop-grinder-http

# Grinder master daemon

.PHONY: start-master stop-master
start-master: stop-master
	@$(call print-message,"Starting grinder master...")
	@ya make $(MASTER_SERVANT_PATH)
	$(QUIET)$(call start-daemon,"$(MASTER_SERVANT) --config=$(GRINDER_CONFIG) >$(MASTER_LOGFILE) 2>&1",$(MASTER_PIDFILE))
	@$(call print-message,"Done")
stop-master:
	@$(call print-message,"Stopping grinder master...")
	$(QUIET)$(call stop-daemon,$(MASTER_PIDFILE))
	@$(call print-message,"Done")

# Grinder HTTP daemon

.PHONY: start-grinder-http stop-grinder-http
start-grinder-http: seconds_to_sleep=2
start-grinder-http: stop-grinder-http
	@$(call print-message,"Starting grinder http servant...")
	@ya make $(HTTP_SERVANT_PATH)
	$(QUIET)$(call start-daemon,"$(HTTP_SERVANT) $(GRINDER_CONFIG) >$(HTTP_LOGFILE) 2>&1",$(HTTP_PIDFILE),YCR_MODE=fastcgi:$(grinder_socket))
	$(QUIET)sleep $(seconds_to_sleep)
	$(QUIET)if [ -e $(grinder_socket) ] ; then chmod a+w -f $(grinder_socket); fi
	$(QUIET)if kill -s 0 $$(cat $(HTTP_PIDFILE)); then \
		$(call print-message,"Done"); \
	else \
		$(call print-warning,"Failed: process is not alive after $(seconds_to_sleep) seconds"); \
	fi;

stop-grinder-http:
	@$(call print-message,"Stopping grinder http servant...")
	$(QUIET)$(call stop-daemon,$(HTTP_PIDFILE));
	@$(call print-message,"Done"); \

.PHONY: clean
clean: stop
	$(QUIET)rm -f $(MASTER_PIDFILE) $(MASTER_LOGFILE) $(HTTP_PIDFILE) $(HTTP_LOGFILE)
