diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9acc51c --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Folders +bin +build + +.DS_Store \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..35861af --- /dev/null +++ b/.travis.yml @@ -0,0 +1,21 @@ +language: go +sudo: required +services: +- docker +go: +- 1.7 +env: + global: + - GOARCH=amd64 +before_deploy: make ci +deploy: + provider: releases + api_key: + secure: IFy47qRhLVBND/gQskxy0+r8DVxKFe0xUQNocjNQWqjQT37lelnkBGDITjdlxco0sOgwhB71fA3xf2PD2WhAPxD2NHBGfTYvc9SrnaBUVFAAItMaX1C31NMnxwhWIQfT9UHeRSOLoIGZEkvIoFAtnOZDcaQC+rqI0fJtJ9ax7EvZoxUTxUhjrTbwUv3mDP5cYtJST657OIyXWwEGI1LGS9w9J8GZSXv7Uh0AjCbT8pTWtzg/Ixb7BlzGqtkE6tk6QbR/U8L5zB01D3hwbtCrhwW0B3UFAIe8EvJ28ql1vYfOojb8e4QTPTUDqJM05+0br8zhJ+DmuOrFQh68fpzMI9akxRsiX3lX/gs3H8x0IGL0LnN5xoNRXzoPEp+kE6ATUK2mE/ayoC087IthxdACK/xjdo2/ebqNcaO2cDdHHYyEE1Dl7QJ0zbHp2DAK72IMQlGrAVRIep0aS4lWtLHkycBWw29GutpujrMnSREOC/7KRDd4cALKRC+Nw3tesmSytOHdeR0WatIFdv1pF81Nqy7XBKQC8+Vnievx3Yb1lIzFzn5G06OtGJNXQ2YMpDsU9jLbCWrSp/Jpwsz38Y7vf70DZGxpqAR3lozR+dMBVuX/3CzHi0zekDCDuu5DS0XspuXQwd7pN2s0ap6gUaev3q3sOf9VBbV1fnHzOBgYFCs= + file_glob: true + file: + - "build/rpm/*.rpm" + - "build/tgz/*.tar.gz" + skip_cleanup: true + on: + tags: true \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..aaf9841 --- /dev/null +++ b/Makefile @@ -0,0 +1,47 @@ +GOTOOLS=github.com/mitchellh/gox/... + +NAME=cloudmonitor_exporter + +VERSION=0.1.3 +BUILD_TIME=`date '+%F%T%z'` + +LDFLAGS=-ldflags "-X main.version=${VERSION} -X main.buildtime=${BUILD_TIME}" + +all: tools build + +build: + @mkdir -p bin/ + go build ${LDFLAGS} -o bin/${NAME} ${NAME}.go + +xbuild: clean + @mkdir -p build + gox \ + -os="linux" \ + -os="windows" \ + -os="darwin" \ + -arch="amd64" \ + ${LDFLAGS} \ + -output="build/{{.Dir}}_$(VERSION)_{{.OS}}_{{.Arch}}/$(NAME)" + +package: xbuild + $(eval FILES := $(shell ls build)) + @mkdir -p build/tgz + for f in $(FILES); do \ + (cd $(shell pwd)/build && tar -zcvf tgz/$$f.tar.gz $$f); \ + echo $$f; \ + done + +clean: + @rm -rf bin/ && rm -rf build/ + +tools: + go get -u -v $(GOTOOLS) + +rpm: + @mkdir -p build/rpm + docker run --rm -it -v $(shell pwd):/docker centos:7 /docker/package/rpm/build_rpm.sh ${VERSION} + +ci: tools package rpm + + +.PHONY: all build clean ci tools \ No newline at end of file diff --git a/cloudmonitor_exporter.go b/cloudmonitor_exporter.go index ebcc740..82fe63b 100644 --- a/cloudmonitor_exporter.go +++ b/cloudmonitor_exporter.go @@ -17,6 +17,11 @@ import ( "time" ) +var ( + version string + buildtime string +) + var ( listenAddress = flag.String("exporter.address", ":9143", "The address on which to expose the web interface and generated Prometheus metrics.") namespace = flag.String("exporter.namespace", "cloudmonitor", "The prometheus namespace.") @@ -25,7 +30,6 @@ var ( accesslog = flag.String("collector.accesslog", "", "Log incoming collector data to specified file.") logErrors = flag.Bool("collector.logerrors", false, "Log errors(5..) to stdout") showVersion = flag.Bool("version", false, "Show version information") - version = "0.1.2" ) type Exporter struct { @@ -482,10 +486,11 @@ func (e *Exporter) HandleCollectorPost(w http.ResponseWriter, r *http.Request) { } func main() { + flag.Parse() if *showVersion { - fmt.Printf("Cloudmonitor-exporter v%s\n", version) + fmt.Printf("Cloudmonitor-exporter v%s\n", version+"("+buildtime+")") return } diff --git a/package/rpm/build_rpm.sh b/package/rpm/build_rpm.sh new file mode 100755 index 0000000..d852493 --- /dev/null +++ b/package/rpm/build_rpm.sh @@ -0,0 +1,32 @@ +#!/bin/bash +os=$(uname) +os=${os,,} +arch=$(uname -m) +[[ $arch == "x86_64" ]] && arch="amd64" + +package="cloudmonitor_exporter" +echo "Provisioning started, installing packages..." +yum -y install rpmdevtools mock + +echo "Setting up rpm dev tree..." +rpmdev-setuptree + +echo "Copying files for build..." +cp /docker/package/rpm/$package.spec $HOME/rpmbuild/SPECS/ +find /docker/package/sources -type f -exec cp -f {} $HOME/rpmbuild/SOURCES/ \; +cp /docker/build/${package}_${1}_${os}_${arch}/${package} $HOME/rpmbuild/SOURCES/${package} +cd ${HOME} +chown -R root:root rpmbuild +echo "Downloading dependencies..." +spectool -g -R rpmbuild/SPECS/$package.spec + +echo "Building rpm..." +rpmbuild -ba --define "_version ${1}" rpmbuild/SPECS/$package.spec + +echo "Copying rpms back to build folder...." +cp -f ${HOME}/rpmbuild/RPMS/x86_64/*.rpm /docker/build/rpm/ +chmod 777 /docker/build/rpm/* + +echo "Successfully built RPM for version ${1}:" +ls -altrh /docker/build/rpm/ +exit 0 \ No newline at end of file diff --git a/package/rpm/cloudmonitor_exporter.spec b/package/rpm/cloudmonitor_exporter.spec new file mode 100644 index 0000000..40072c2 --- /dev/null +++ b/package/rpm/cloudmonitor_exporter.spec @@ -0,0 +1,50 @@ +Name: cloudmonitor_exporter +Version: %{_version} +Release: 1 +Summary: Prometheus exporter for Akamai Cloudmonitor. +Group: System Environment/Daemons +License: Apache Software License +URL: https://github.com/ExpressenAB/cloudmonitor_exporter +Source0: %{name} +Source1: %{name}.service +Source2: %{name}.sysconfig +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) + +%description +Prometheus exporter for Akamai Cloudmonitor. + +%install +mkdir -p %{buildroot}/%{_sbindir} +cp %{SOURCE0} %{buildroot}/%{_sbindir}/%{name} + +mkdir -p %{buildroot}/%{_sysconfdir}/sysconfig +cp %{SOURCE2} %{buildroot}/%{_sysconfdir}/sysconfig/%{name} + +mkdir -p %{buildroot}/%{_unitdir} +cp %{SOURCE1} %{buildroot}/%{_unitdir}/ + +%post +%systemd_post %{name}.service + +%preun +%systemd_preun %{name}.service + +%postun +%systemd_postun_with_restart %{name}.service + +%clean +rm -rf %{buildroot} + + +%files +%defattr(-,root,root,-) +%config(noreplace) %{_sysconfdir}/sysconfig/%{name} +%{_unitdir}/%{name}.service +%attr(755, root, root) %{_sbindir}/* + +%doc + + +%changelog +* Mon Dec 4 2016 Rickard Karlsson +- Release 0.1.3 diff --git a/package/sources/cloudmonitor_exporter.service b/package/sources/cloudmonitor_exporter.service new file mode 100644 index 0000000..ad98e88 --- /dev/null +++ b/package/sources/cloudmonitor_exporter.service @@ -0,0 +1,15 @@ +[Unit] +Description=Cloudmonitor_exporter +Documentation=https://github.com/ExpressenAB/cloudmonitor_exporter/ +After=network-online.target +Wants=network-online.target + +[Service] +EnvironmentFile=-/etc/sysconfig/cloudmonitor_exporter +ExecStart=/usr/sbin/cloudmonitor_exporter $CMD_OPTS +ExecReload=/bin/kill -HUP $MAINPID +KillSignal=SIGINT +Restart=on-failure + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/package/sources/cloudmonitor_exporter.sysconfig b/package/sources/cloudmonitor_exporter.sysconfig new file mode 100644 index 0000000..60a3e0b --- /dev/null +++ b/package/sources/cloudmonitor_exporter.sysconfig @@ -0,0 +1,3 @@ +# +# Add specific environment variables here for cloudmonitor_exporter +# \ No newline at end of file