Skip to content

Commit

Permalink
Merge pull request #71 from rabbitmq/build_from_source
Browse files Browse the repository at this point in the history
Build from source
  • Loading branch information
deadtrickster authored Feb 26, 2019
2 parents daf6118 + 1879734 commit e37018b
Show file tree
Hide file tree
Showing 8 changed files with 168 additions and 80 deletions.
8 changes: 8 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.erlang.mk
.git
_build
deps
ebin
include
priv
src
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
/ebin/
/logs/
/plugins/

_build
/rabbitmq_management_metrics.d
erl_crash.dump
*.ez
rebar3
14 changes: 9 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
FROM rabbitmq:3.7-management
ARG RABBITMQ_MINOR_VERSION
ARG FROM_IMAGE
ARG PROMETHEUS_RABBITMQ_EXPORTER_VERSION
FROM ${FROM_IMAGE}
MAINTAINER Ilya Khaprov <i.khaprov@gmail.com>

# Copy the plugin and its dependencies
COPY "plugins/*.ez" "/usr/lib/rabbitmq/lib/rabbitmq_server-${RABBITMQ_VERSION}/plugins/"
RUN chmod a+r /usr/lib/rabbitmq/lib/rabbitmq_server-${RABBITMQ_VERSION}/plugins/prometheus*.ez /usr/lib/rabbitmq/lib/rabbitmq_server-${RABBITMQ_VERSION}/plugins/accept*.ez \
&& rabbitmq-plugins enable --offline prometheus_rabbitmq_exporter
COPY tmp/*.ez /plugins/
RUN chmod a+r /plugins/*.ez && \
rabbitmq-plugins enable --offline prometheus_rabbitmq_exporter && \
rabbitmq-plugins is_enabled prometheus_rabbitmq_exporter --offline && \
rabbitmq-plugins list | grep "prometheus_rabbitmq_exporter.*${PROMETHEUS_RABBITMQ_EXPORTER_VERSION}"
6 changes: 0 additions & 6 deletions Dockerfile.alpine

This file was deleted.

7 changes: 0 additions & 7 deletions Dockerfile.pure

This file was deleted.

165 changes: 139 additions & 26 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,13 +1,33 @@
PROJECT = prometheus_rabbitmq_exporter
PROJECT_DESCRIPTION = RabbitMQ Prometheus.io metrics exporter
RABBITMQ_MINOR_VERSION = 3.7
# PROJECT_VERSION gets set in rabbitmq-components.mk to RABBITMQ_VERSION
RABBITMQ_VERSION = $(RABBITMQ_MINOR_VERSION).2.4
EZ = $(PROJECT)-$(PROJECT_VERSION)
PROJECT_APP_EXTRA_KEYS = {maintainers, ["Ilya Khaprov"]}, \
{licenses, ["MIT"]}, \
{links, [{"Github", "https://github.com/deadtrickster/prometheus_rabbitmq_exporter"}]}

dep_prometheus = hex 3.5.1
dep_prometheus_process_collector = hex 1.3.1
dep_prometheus_httpd = hex 2.1.8
dep_accept = hex 0.3.3
dep_prometheus_cowboy = hex 0.1.4
ACCEPT_VERSION = 0.3.4
dep_accept = hex $(ACCEPT_VERSION)

DEPS = rabbit_common rabbit rabbitmq_management prometheus prometheus_httpd accept \
prometheus_process_collector prometheus_cowboy
PROMETHEUS_VERSION = 4.2.2
dep_prometheus = hex $(PROMETHEUS_VERSION)

PROMETHEUS_COWBOY_VERSION = 0.1.7
dep_prometheus_cowboy = hex $(PROMETHEUS_COWBOY_VERSION)

PROMETHEUS_HTTPD_VERSION = 2.1.10
dep_prometheus_httpd = hex $(PROMETHEUS_HTTPD_VERSION)

PROMETHEUS_PROCESS_COLLECTOR_VERSION = 1.4.0
dep_prometheus_process_collector = hex $(PROMETHEUS_PROCESS_COLLECTOR_VERSION)

DEPS = rabbit rabbitmq_management \
prometheus prometheus_cowboy prometheus_httpd

# We do not want these deps defined as applications in app
BUILD_DEPS = rabbit_common rabbitmq_management_agent accept prometheus_process_collector

DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk
DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk
Expand All @@ -18,32 +38,125 @@ DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk
ERLANG_MK_REPO = https://github.com/rabbitmq/erlang.mk.git
ERLANG_MK_COMMIT = rabbitmq-tmp

RABBITMQ_BRANCH ?= v$(RABBITMQ_MINOR_VERSION).x
RABBITMQ_CURRENT_FETCH_URL ?= https://github.com/rabbitmq/

REBAR := $(CURDIR)/rebar3
REBAR_VERSION := 3.9.0
$(REBAR):
@wget --output-document $(REBAR) https://github.com/erlang/rebar3/releases/download/$(REBAR_VERSION)/rebar3 && \
chmod +x $(REBAR) && \
$(REBAR) --version | grep $(REBAR_VERSION)

include rabbitmq-components.mk
include erlang.mk

.PHONY: docker_build docker_push docker_latest docker_pure docker_alpine
.PHONY: distclean
distclean::
@rm -fr tmp

DOCKER_IMAGE_VERSION = $(RABBITMQ_MINOR_VERSION)
DOCKER_BASE_IMAGE = rabbitmq:$(DOCKER_IMAGE_VERSION)-management
define BUILD_DOCKER_IMAGE
docker build \
--pull \
--build-arg FROM_IMAGE=$(DOCKER_BASE_IMAGE) \
--build-arg PROMETHEUS_RABBITMQ_EXPORTER_VERSION=$(PROJECT_VERSION) \
--tag deadtrickster/rabbitmq_prometheus:$(DOCKER_IMAGE_VERSION) .
endef
.PHONY: docker_build
docker_build:
docker build -t deadtrickster/rabbitmq_prometheus\:3.7.8 .
docker build -t deadtrickster/rabbitmq_prometheus\:latest .
docker build -t deadtrickster/rabbitmq_prometheus\:3.7.8-pure -f Dockerfile.pure .
docker build -t deadtrickster/rabbitmq_prometheus\:latest-pure -f Dockerfile.pure .
docker build -t deadtrickster/rabbitmq_prometheus\:3.7.8-alpine -f Dockerfile.alpine .
docker build -t deadtrickster/rabbitmq_prometheus\:latest-alpine -f Dockerfile.alpine .
@$(BUILD_DOCKER_IMAGE)
.PHONY: docker_build_alpine
docker_build_alpine: DOCKER_IMAGE_VERSION = 3.7-alpine
docker_build_alpine: DOCKER_BASE_IMAGE = rabbitmq:3.7-management-alpine
docker_build_alpine: docker_build

define PUSH_DOCKER_IMAGE
docker push deadtrickster/rabbitmq_prometheus:$(DOCKER_IMAGE_VERSION)
endef
.PHONY: docker_push
docker_push:
docker push deadtrickster/rabbitmq_prometheus\:3.7.8
docker push deadtrickster/rabbitmq_prometheus\:latest
docker push deadtrickster/rabbitmq_prometheus\:3.7.8-pure
docker push deadtrickster/rabbitmq_prometheus\:latest-pure
docker push deadtrickster/rabbitmq_prometheus\:3.7.8-alpine
docker push deadtrickster/rabbitmq_prometheus\:latest-alpine
@$(PUSH_DOCKER_IMAGE)
.PHONY: docker_push_alpine
docker_push_alpine: DOCKER_IMAGE_VERSION = 3.7-alpine
docker_push_alpine: docker_push

define RUN_DOCKER_IMAGE
docker run --interactive --tty --publish=15672:15672 \
deadtrickster/rabbitmq_prometheus:$(DOCKER_IMAGE_VERSION)
endef
.PHONY: docker_run
docker_run:
@$(RUN_DOCKER_IMAGE)
.PHONY: docker_run_alpine
docker_run_alpine: DOCKER_IMAGE_VERSION = 3.7-alpine
docker_run_alpine: docker_run

.PHONY: up
up: $(abspath .)+up $(DEPS:%=$(DEPS_DIR)/%+up) $(BUILD_DEPS:%=$(DEPS_DIR)/%+up)
@:

%+up: fetch-deps
$(exec_verbose) cd $*; \
git fetch -p && \
if [ '$(RABBITMQ_BRANCH)' ]; then \
git checkout $(RABBITMQ_BRANCH) || : ; \
fi && \
if git symbolic-ref -q HEAD >/dev/null; then \
branch=$$(git symbolic-ref --short HEAD); \
remote=$$(git config branch.$$branch.remote); \
merge=$$(git config branch.$$branch.merge | sed 's,refs/heads/,,'); \
if [ "$$remote" -a "$$merge" ]; then \
git merge --ff-only "$$remote/$$merge"; \
fi; \
fi && \
echo

REBAR_DEPS_DIR := _build/default/lib
$(REBAR_DEPS_DIR): up
@mkdir -p _build/default && \
ln -shfv $(CURDIR)/deps $(REBAR_DEPS_DIR)

tmp:
@mkdir -p tmp

tmp/accept-$(ACCEPT_VERSION).ez: $(REBAR) $(REBAR_DEPS_DIR) tmp
@cd $(REBAR_DEPS_DIR)/accept && \
$(REBAR) archive && \
mv accept-$(ACCEPT_VERSION).ez $(CURDIR)/tmp/

tmp/prometheus-$(PROMETHEUS_VERSION).ez: $(REBAR) $(REBAR_DEPS_DIR) tmp
@cd $(REBAR_DEPS_DIR)/prometheus && \
$(REBAR) archive && \
mv prometheus-$(PROMETHEUS_VERSION).ez $(CURDIR)/tmp/

tmp/prometheus_cowboy-$(PROMETHEUS_COWBOY_VERSION).ez: $(REBAR) $(REBAR_DEPS_DIR) tmp
@cd $(REBAR_DEPS_DIR)/prometheus_cowboy && \
$(REBAR) archive && \
mv prometheus_cowboy-$(PROMETHEUS_COWBOY_VERSION).ez $(CURDIR)/tmp/

tmp/prometheus_httpd-$(PROMETHEUS_HTTPD_VERSION).ez: $(REBAR) $(REBAR_DEPS_DIR) tmp
@cd $(REBAR_DEPS_DIR)/prometheus_httpd && \
$(REBAR) archive && \
mv prometheus_httpd-$(PROMETHEUS_HTTPD_VERSION).ez $(CURDIR)/tmp/

docker_latest:
-docker run -p15672\:15672 deadtrickster/rabbitmq_prometheus\:latest
tmp/prometheus_process_collector-$(PROMETHEUS_PROCESS_COLLECTOR_VERSION).ez: $(REBAR) $(REBAR_DEPS_DIR) tmp
@cd $(REBAR_DEPS_DIR)/prometheus_process_collector && \
$(REBAR) archive && \
mv prometheus_process_collector-$(PROMETHEUS_PROCESS_COLLECTOR_VERSION).ez $(CURDIR)/tmp

docker_pure:
-docker run -p15672\:15672 deadtrickster/rabbitmq_prometheus\:latest-pure
tmp/$(EZ).ez: up app tmp
@rm -fr $(EZ) && mkdir $(EZ) && \
cp -r ebin include priv $(EZ) && \
rm -f $(EZ).ez && \
zip --move --recurse-paths --test $(EZ).ez $(EZ) && \
mv $(EZ).ez tmp/

docker_alpine:
-docker run -p15672\:15672 deadtrickster/rabbitmq_prometheus\:latest-alpine
.PHONY: ezs
ezs:: tmp/accept-$(ACCEPT_VERSION).ez
ezs:: tmp/prometheus-$(PROMETHEUS_VERSION).ez
ezs:: tmp/prometheus_cowboy-$(PROMETHEUS_COWBOY_VERSION).ez
ezs:: tmp/prometheus_httpd-$(PROMETHEUS_HTTPD_VERSION).ez
ezs:: tmp/prometheus_process_collector-$(PROMETHEUS_PROCESS_COLLECTOR_VERSION).ez
ezs:: tmp/$(EZ).ez
25 changes: 9 additions & 16 deletions rabbitmq-components.mk
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ endif
dep_amqp_client = git_rmq rabbitmq-erlang-client $(current_rmq_ref) $(base_rmq_ref) master
dep_amqp10_client = git_rmq rabbitmq-amqp1.0-client $(current_rmq_ref) $(base_rmq_ref) master
dep_amqp10_common = git_rmq rabbitmq-amqp1.0-common $(current_rmq_ref) $(base_rmq_ref) master
dep_ra = git_rmq ra $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbit = git_rmq rabbitmq-server $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbit_common = git_rmq rabbitmq-common $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_amqp1_0 = git_rmq rabbitmq-amqp1.0 $(current_rmq_ref) $(base_rmq_ref) master
Expand All @@ -51,7 +50,6 @@ dep_rabbitmq_auth_backend_ldap = git_rmq rabbitmq-auth-backend-ldap $(cur
dep_rabbitmq_auth_mechanism_ssl = git_rmq rabbitmq-auth-mechanism-ssl $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_aws = git_rmq rabbitmq-aws $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_boot_steps_visualiser = git_rmq rabbitmq-boot-steps-visualiser $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_clusterer = git_rmq rabbitmq-clusterer $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_cli = git_rmq rabbitmq-cli $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_codegen = git_rmq rabbitmq-codegen $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_consistent_hash_exchange = git_rmq rabbitmq-consistent-hash-exchange $(current_rmq_ref) $(base_rmq_ref) master
Expand All @@ -71,7 +69,6 @@ dep_rabbitmq_management = git_rmq rabbitmq-management $(current_rm
dep_rabbitmq_management_agent = git_rmq rabbitmq-management-agent $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_management_exchange = git_rmq rabbitmq-management-exchange $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_management_themes = git_rmq rabbitmq-management-themes $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_management_visualiser = git_rmq rabbitmq-management-visualiser $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_message_timestamp = git_rmq rabbitmq-message-timestamp $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_metronome = git_rmq rabbitmq-metronome $(current_rmq_ref) $(base_rmq_ref) master
dep_rabbitmq_mqtt = git_rmq rabbitmq-mqtt $(current_rmq_ref) $(base_rmq_ref) master
Expand Down Expand Up @@ -111,20 +108,18 @@ dep_rabbitmq_public_umbrella = git_rmq rabbitmq-public-umbrella $(curre
# all projects use the same versions. It avoids conflicts and makes it
# possible to work with rabbitmq-public-umbrella.

dep_cowboy = hex 2.2.2
dep_cowlib = hex 2.1.0
dep_jsx = hex 2.8.2
dep_lager = hex 3.6.3
dep_ranch = hex 1.5.0
dep_ranch_proxy_protocol = hex 1.5.0
dep_recon = hex 2.3.2

dep_sockjs = git https://github.com/rabbitmq/sockjs-erlang.git 405990ea62353d98d36dbf5e1e64942d9b0a1daf
dep_cowboy = hex 2.6.1
dep_cowlib = hex 2.7.0
dep_jsx = hex 2.9.0
dep_lager = hex 3.6.5
dep_ra = git https://github.com/rabbitmq/ra.git master
dep_ranch = hex 1.7.1
dep_recon = hex 2.3.6
dep_sysmon_handler = hex 1.1.0

RABBITMQ_COMPONENTS = amqp_client \
amqp10_common \
amqp10_client \
ra \
rabbit \
rabbit_common \
rabbitmq_amqp1_0 \
Expand All @@ -135,7 +130,6 @@ RABBITMQ_COMPONENTS = amqp_client \
rabbitmq_auth_mechanism_ssl \
rabbitmq_aws \
rabbitmq_boot_steps_visualiser \
rabbitmq_clusterer \
rabbitmq_cli \
rabbitmq_codegen \
rabbitmq_consistent_hash_exchange \
Expand All @@ -155,7 +149,6 @@ RABBITMQ_COMPONENTS = amqp_client \
rabbitmq_management_agent \
rabbitmq_management_exchange \
rabbitmq_management_themes \
rabbitmq_management_visualiser \
rabbitmq_message_timestamp \
rabbitmq_metronome \
rabbitmq_mqtt \
Expand Down Expand Up @@ -233,7 +226,7 @@ export base_rmq_ref
# If cloning from this computed location fails, we fallback to RabbitMQ
# upstream which is GitHub.

# Maccro to transform eg. "rabbit_common" to "rabbitmq-common".
# Macro to transform eg. "rabbit_common" to "rabbitmq-common".
rmq_cmp_repo_name = $(word 2,$(dep_$(1)))

# Upstream URL for the current project.
Expand Down
19 changes: 0 additions & 19 deletions src/prometheus_rabbitmq_exporter.app.src

This file was deleted.

0 comments on commit e37018b

Please sign in to comment.