ROOT_DIR    = $(shell pwd)
NAMESPACE   = default
NAME        = application
DEPLOY_NAME = ${NAME}_ros_bin
DOCKER_NAME = template-single

APP_NAME     = ${NAME}_ros_bin
SERVICE_NAME = ${NAME}.service

include ./hack/hack.mk

.DEFAULT_GOAL := list

.PHONY: list
list:
	@echo "make dev             重启程序，并在控制台打印日志"
	@echo "make release         编译程序"
	@echo "make showlog         查看运行时任务执行日志"
	@echo "make apply           申请任务"
	@echo "make apply2          申请任务（重载）"
	@echo "make pub             重新发送当前任务指令"
	@echo "make tail            查看控制台日志"
	@echo "make pubobj          模拟障碍物"
	@echo "make service_install 安装服务"

.PHONY: clean
clean:
	rm -f logs/*
	rm -rf app_ros_bin app_ros_bin.tgz *.log application_ros_bin

.PHONY: dev
dev:
	@echo "在控制台重新启动程序并打印日志"
	[ -d temp ] || mkdir temp
	ps -ef|grep ${APP_NAME} |grep -v grep|awk '{print $$2}'|xargs -I{} kill -9 {}
	./${APP_NAME}

.PHONY: release
release:
	@echo "编译程序"
	[ -d temp ] || mkdir temp
	CGO_ENABLED=1 && /usr/local/go/bin/go build -o ${APP_NAME} main.go
	# CGO_ENABLED=1 && GOOS=linux GOARCH=arm go build -o ${APP_NAME} main.go

.PHONY: showlog
showlog:
	@echo "查看程序的任务日志"
	ls -t logs | grep task | head -n 1 | xargs -I{} tail -n 100 -f logs/{}

.PHONY: apply
apply:
	@echo "申请任务"
	ps -ef|grep ${APP_NAME}| grep -v build |grep -v grep|awk '{print $$2}'|xargs -I{} kill -10 {}
	# ls -t logs | grep task | head -n 1 | xargs -I{} tail -n 20 -f logs/{}

.PHONY: apply2
apply2:
	@echo "申请任务（重载）"
	ps -ef|grep ${APP_NAME}| grep -v build |grep -v grep|awk '{print $$2}'|xargs -I{} kill -12 {}
	# ls -t logs | grep task | head -n 1 | xargs -I{} tail -n 20 -f logs/{}
	
.PHONY: pub
pub:
	@echo "重新发送当前任务指令"
	ps -ef|grep ${APP_NAME}| grep -v build |grep -v grep|awk '{print $$2}'|xargs -I{} kill -14 {}
	# ls -t logs | grep task | head -n 1 | xargs -I{} tail -n 20 -f logs/{}

.PHONY: pubobj
pubobj:
	@echo "模拟障碍物"
	ps -ef|grep ${APP_NAME}| grep -v build |grep -v grep|awk '{print $$2}'|xargs -I{} kill -12 {}

.PHONY: fault
fault:
	@echo "重新发送当前任务指令"
	ps -ef|grep ${APP_NAME}| grep -v build |grep -v grep|awk '{print $$2}'|xargs -I{} kill -13 {}

.PHONY: tail
tail:
	@echo "查看控制台日志"
	journalctl -u ${SERVICE_NAME} -f

.PHONY: start
start:
	@echo "启动程序"
	sudo systemctl start ${SERVICE_NAME} && journalctl -u ${SERVICE_NAME} -f

.PHONY: stop
stop:
	@echo "关闭程序"
	sudo systemctl stop ${SERVICE_NAME}

.PHONY: restart
restart:
	@echo "重启程序"
	sudo systemctl restart ${SERVICE_NAME}

.PHONY: status
status:
	@echo "查看程序状态"
	sudo systemctl status ${SERVICE_NAME}

.PHONY: service_install
service_install:
	@echo "安装服务"
	/bin/bash ${ROOT_DIR}/install.sh ${SERVICE_NAME} ${APP_NAME}

.PHONY: removelogs
removelogs:
	@echo "清除旧日志"
	find logs -type f -ctime +15 -exec rm -f {} \;
	rm -f mq.log
	# 只保留最近一个月的日志
	sudo journalctl --vacuum-time=30d

.PHONY: package
package:
	@echo "package"
	[ ! -d app_ros_bin ] || rm -rf app_ros_bin
	mkdir app_ros_bin && cp -r application_ros_bin daemon_run.sh Makefile stream hack stop.sh restart.sh auto_start.sh server_proxy.sh mysql_proxy.sh app_ros_bin
	tar zcf app_ros_bin.tgz app_ros_bin

.PHONY: s
s:
	@echo "关闭程序"
	ps -ef|grep ${APP_NAME}| grep -v daemon_run |grep -v grep|awk '{print $$2}'|xargs -I{} kill {}

.PHONY: stop_daemon
stop_daemon:
	@echo "关闭保活进程"
	ps -ef|grep ${APP_NAME} | grep daemon_run | awk '{print $$2}'|xargs -I{} kill {}
	sleep 1
	ps -ef|grep ${APP_NAME} | grep -v grep|awk '{print $$2}'|xargs -I{} kill {}
