UNAME := $(shell sh -c 'uname')
VERSION := $(shell sh -c 'git describe --always --tags')
ifndef GOBIN
	GOBIN = $(GOPATH)/bin
endif

build: prepare
	$(GOBIN)/godep go build -o telegraf -ldflags \
		"-X main.Version=$(VERSION)" \
		./cmd/telegraf/telegraf.go

dev: prepare
	$(GOBIN)/godep go build -race -o telegraf -ldflags \
		"-X main.Version=$(VERSION)" \
		./cmd/telegraf/telegraf.go

build-linux-bins: prepare
	GOARCH=amd64 GOOS=linux $(GOBIN)/godep go build -o telegraf_linux_amd64 \
                     -ldflags "-X main.Version=$(VERSION)" \
                     ./cmd/telegraf/telegraf.go
	GOARCH=386 GOOS=linux $(GOBIN)/godep go build -o telegraf_linux_386 \
                     -ldflags "-X main.Version=$(VERSION)" \
                     ./cmd/telegraf/telegraf.go
	GOARCH=arm GOOS=linux $(GOBIN)/godep go build -o telegraf_linux_arm \
                     -ldflags "-X main.Version=$(VERSION)" \
                     ./cmd/telegraf/telegraf.go

prepare:
	go get github.com/tools/godep

docker-run:
ifeq ($(UNAME), Darwin)
	docker run --name kafka \
		-e ADVERTISED_HOST=$(shell sh -c 'boot2docker ip || docker-machine ip default') \
		-e ADVERTISED_PORT=9092 \
		-p "2181:2181" -p "9092:9092" \
		-d spotify/kafka
endif
ifeq ($(UNAME), Linux)
	docker run --name kafka \
		-e ADVERTISED_HOST=localhost \
		-e ADVERTISED_PORT=9092 \
		-p "2181:2181" -p "9092:9092" \
		-d spotify/kafka
endif
	docker run --name mysql -p "3306:3306" -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql
	docker run --name memcached -p "11211:11211" -d memcached
	docker run --name postgres -p "5432:5432" -d postgres
	docker run --name rabbitmq -p "15672:15672" -p "5672:5672" -d rabbitmq:3-management
	docker run --name opentsdb -p "4242:4242" -d petergrace/opentsdb-docker
	docker run --name redis -p "6379:6379" -d redis
	docker run --name aerospike -p "3000:3000" -d aerospike
	docker run --name nsq -p "4150:4150" -d nsqio/nsq /nsqd

docker-kill:
	-docker kill nsq aerospike redis opentsdb rabbitmq postgres memcached mysql kafka
	-docker rm nsq aerospike redis opentsdb rabbitmq postgres memcached mysql kafka

test: docker-kill prepare docker-run
	# Sleeping for kafka leadership election, TSDB setup, etc.
	sleep 60
	# Setup SUCCESS, running tests
	godep go test ./...

test-short: prepare
	$(GOBIN)/godep go test -short ./...

.PHONY: test