all::

.PHONY: clean
clean:
	rm -f ./describe
	rm -f ./peers
	rm -f ./multicp.linux_*

describe:
	aws ec2 --region=us-east-1 describe-instances > ./describe

peers: describe
	cat ./describe | jq '.Reservations[].Instances[].NetworkInterfaces[].PrivateIpAddress' | tr -d '"' > ./peers

.PHONY: build
build:
	GOOS=linux GOARCH=amd64 go build -o ./multicp.linux_x86_64 code.justin.tv/rhys/nursery/cmd/multicp
	GOOS=linux GOARCH=arm64 go build -o ./multicp.linux_aarch64 code.justin.tv/rhys/nursery/cmd/multicp

.PHONY: share-exe
share-exe: build describe
	cat ./describe | jq '.Reservations[].Instances[].NetworkInterfaces[].Association.PublicIp' | xargs -n 1 -I{} rsync -Pavz -e 'ssh -F /dev/null -o UserKnownHostsFile=./hosts -o StrictHostKeyChecking=no' ./multicp.* ec2-user@{}:.

.PHONY: share-peers
share-peers: describe peers
	cat ./describe | jq '.Reservations[].Instances[].NetworkInterfaces[].Association.PublicIp' | xargs -n 1 -I{} rsync -Pavz -e 'ssh -F /dev/null -o UserKnownHostsFile=./hosts -o StrictHostKeyChecking=no' ./peers ec2-user@{}:./peers

.PHONY: kill-servers
kill-servers: describe
	cat ./describe | jq '.Reservations[].Instances[].NetworkInterfaces[].Association.PublicIp' | xargs -n 1 -I{} ssh -F /dev/null -o UserKnownHostsFile=./hosts -o StrictHostKeyChecking=no ec2-user@{} 'uname -n ; sudo pkill -f multic[p].*listen'

.PHONY: kill-clients
kill-clients: describe
	cat ./describe | jq '.Reservations[].Instances[].NetworkInterfaces[].Association.PublicIp' | xargs -n 1 -I{} ssh -F /dev/null -o UserKnownHostsFile=./hosts -o StrictHostKeyChecking=no ec2-user@{} 'uname -n ; sudo pkill -f multic[p].*target'

.PHONY: kill-tcpdump
kill-tcpdump: describe
	cat ./describe | jq '.Reservations[].Instances[].NetworkInterfaces[].Association.PublicIp' | xargs -n 1 -I{} ssh -F /dev/null -o UserKnownHostsFile=./hosts -o StrictHostKeyChecking=no ec2-user@{} 'uname -n ; sudo pkill tcpdump'

.PHONY: run-servers
run-servers: describe
	cat ./describe | jq '.Reservations[].Instances[].NetworkInterfaces[].Association.PublicIp' | xargs -n 1 -I{} ssh -F /dev/null -o UserKnownHostsFile=./hosts -o StrictHostKeyChecking=no ec2-user@{} 'nohup sudo bash -c "ulimit -n 100000 ; ./multicp.linux_\$$(uname -m) -listen :2000 -quic" &> ./server.log &'

.PHONY: run-clients
run-clients: describe peers
	cat ./describe | jq '.Reservations[].Instances[].NetworkInterfaces[].Association.PublicIp' | xargs -n 1 -I{} ssh -F /dev/null -o UserKnownHostsFile=./hosts -o StrictHostKeyChecking=no ec2-user@{} 'cat ./peers | xargs -n 1 bash -c "nohup ./multicp.linux_\$$(uname -m) -target=\$$1:2000 -conns=100 -interval=1s -quic | gzip -c &> ./peer.\$$1.log.gz &" --'

.PHONY: run-tcpdump
run-tcpdump: describe peers
	cat ./describe | jq '.Reservations[].Instances[].NetworkInterfaces[].Association.PublicIp' | xargs -n 1 -I{} ssh -F /dev/null -o UserKnownHostsFile=./hosts -o StrictHostKeyChecking=no ec2-user@{} 'nohup sudo tcpdump -i eth0 -w tcpd -C 100 -W 3000 tcp port 2000 &> ./tcpd.log &'

.PHONY: data
data: describe
	mkdir -p ./data
	cat ./describe | jq '.Reservations[].Instances[].NetworkInterfaces[].Association.PublicIp' | xargs -n 1 bash -c "rsync -Pavz --timeout=300 -e 'ssh -F /dev/null -o UserKnownHostsFile=./hosts -o StrictHostKeyChecking=no' ec2-user@\$$1:peer.*.log.gz ./data/\$$1/" --
