# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

EGIT_REPO_URI="https://github.com/aws-observability/${PN}.git"

inherit git-r3 go-module systemd tmpfiles

DESCRIPTION="Amazon AWS Opentelemetry Collector"
HOMEPAGE="https://github.com/aws-observability/aws-otel-collector"
SRC_URI=""

LICENSE="Apache-2.0 BSD BSD-2 ISC MIT MPL-2.0"
SLOT="0"
KEYWORDS=""
IUSE="cwagent"
RESTRICT="test" # fails

RDEPEND="acct-user/amazon
	acct-user/aoc
	cwagent? ( acct-user/cwagent )"

src_unpack() {
	git-r3_src_unpack
	go-module_live_vendor
}

src_prepare() {
	default

	# Don't build windows and macos, don't strip
	sed -i  -e "/GOOS=windows GOARCH=amd64/d" \
		-e "/GOOS=darwin GOARCH=amd64/d" \
		-e "/build: install/s/ install-tools lint//" \
		-e "/LDFLAGS=/s/-s //" \
		Makefile || die "sed failed for Makefile"
}

src_compile() {
	emake build
	if use cwagent ; then
		AOC_IMPORT_PATH=github.com/aws-observability/aws-otel-collector
		AOC_LDFLAGS="-w -X ${AOC_IMPORT_PATH}/tools/version.GitHash=${COMMIT}
		-X github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter.collectorDistribution=cwagent-otel-collector
		-X github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter.collectorDistribution=cwagent-otel-collector
		-X ${AOC_IMPORT_PATH}/tools/version.Version=v${PV}
		-X ${AOC_IMPORT_PATH}/tools/version.Date=$(date -u +%Y-%m-%dT%H:%M:%SZ)
		-X ${AOC_IMPORT_PATH}/pkg/userutils.defaultUser=cwagent
		-X ${AOC_IMPORT_PATH}/pkg/userutils.defaultInstallPath=/opt/aws/amazon-cloudwatch-agent/cwagent-otel-collector/
		-X ${AOC_IMPORT_PATH}/pkg/logger.UnixLogPath=/opt/aws/amazon-cloudwatch-agent/cwagent-otel-collector/logs/cwagent-otel-collector.log
		-X ${AOC_IMPORT_PATH}/pkg/extraconfig.unixExtraConfigPath=/opt/aws/amazon-cloudwatch-agent/cwagent-otel-collector/etc/extracfg.txt"
		go build -ldflags="${AOC_LDFLAGS}" -o build/linux/cwagent-otel-collector \
			./cmd/awscollector || die "go build failed"
	fi
}

src_install() {
	einstalldocs

	diropts -o aoc -g aoc -m 0755
	keepdir /opt/aws/aws-otel-collector/{doc,etc,logs,var}

	insopts -o aoc -g aoc -m 0644
	insinto /opt/aws/aws-otel-collector/etc
	doins config.yaml
	newins - .env <<-EOF
		config=--config /opt/aws/aws-otel-collector/etc/config.yaml
	EOF
	exeinto /opt/aws/aws-otel-collector/bin
	doexe tools/ctl/linux/aws-otel-collector-ctl
	newexe build/linux/aoc_linux_"$(usex amd64 x86_64 aarch64)" \
		aws-otel-collector
	# This is needed for aws-otel-collector-ctl
	insinto /opt/aws/aws-otel-collector/bin
	doins VERSION

	dosym ../../opt/aws/aws-otel-collector/bin/aws-otel-collector-ctl \
		usr/bin/aws-otel-collector-ctl
	dosym ../../opt/aws/aws-otel-collector/etc etc/amazon/aws-otel-collector
	dosym ../../../opt/aws/aws-otel-collector/logs \
		var/log/amazon/aws-otel-collector

	newinitd "${FILESDIR}"/aws-otel-collector.initd aws-otel-collector
	newconfd "${FILESDIR}"/aws-otel-collector.confd aws-otel-collector
	systemd_dounit tools/packaging/linux/aws-otel-collector.service
	newtmpfiles "${FILESDIR}"/aws-otel-collector.tmpfile aws-otel-collector.conf

	if use cwagent ; then
		diropts -o cwagent -g cwagent -m 0755
		keepdir /opt/aws/amazon-cloudwatch-agent/cwagent-otel-collector/{logs,var}
		dodir /opt/aws/amazon-cloudwatch-agent/cwagent-otel-collector/etc/cwagent-otel-collector.d

		insopts -o cwagent -g cwagent -m 0644
		# Make config the same as in deb package
		insinto /opt/aws/amazon-cloudwatch-agent/cwagent-otel-collector/var
		newins config.yaml .predefined-config-data
		# Make config for systemd unit
		insinto /opt/aws/amazon-cloudwatch-agent/cwagent-otel-collector/etc
		newins config.yaml cwagent-otel-collector.yaml
		exeinto /opt/aws/amazon-cloudwatch-agent/bin
		doexe build/linux/cwagent-otel-collector

		dosym ../../opt/aws/amazon-cloudwatch-agent/cwagent-otel-collector/etc \
			etc/amazon/cwagent-otel-collector
		dosym ../../../opt/aws/amazon-cloudwatch-agent/cwagent-otel-collector/logs \
			var/log/amazon/cwagent-otel-collector
		newtmpfiles "${FILESDIR}"/cwagent-otel-collector.tmpfile cwagent-otel-collector.conf
	fi
}

pkg_postinst() {
	go-module_pkg_postinst

	tmpfiles_process aws-otel-collector.conf
	use cwagent && tmpfiles_process cwagent-otel-collector.conf
}