Merge pull request #2712 from rabbitmq/rabbitmq-stream-prometheus
Add stream prometheus plugin
This commit is contained in:
commit
b921ac11a8
|
@ -41,6 +41,7 @@
|
|||
!/deps/rabbitmq_stomp/
|
||||
!/deps/rabbitmq_stream/
|
||||
!/deps/rabbitmq_stream_management/
|
||||
!/deps/rabbitmq_stream_prometheus/
|
||||
!/deps/rabbitmq_top/
|
||||
!/deps/rabbitmq_tracing/
|
||||
!/deps/rabbitmq_trust_store/
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -23,7 +23,7 @@ It is not ready for production use.
|
|||
== Support
|
||||
|
||||
* For questions: https://groups.google.com/forum/#!forum/rabbitmq-users[RabbitMQ Users]
|
||||
* For bugs and feature requests: https://github.com/rabbitmq/rabbitmq-stream/issues[GitHub Issues]
|
||||
* For bugs and feature requests: https://github.com/rabbitmq/rabbitmq-server/issues[GitHub Issues]
|
||||
|
||||
The project is currently under development, there is no guarantee yet that it will be maintained and supported
|
||||
in the future (read: you are welcome to experiment with it and give feedback, but please do not base
|
||||
|
@ -50,4 +50,4 @@ Released under the link:LICENSE-MPL-RabbitMQ[MPL 2.0].
|
|||
|
||||
== Copyright
|
||||
|
||||
(c) 2020 VMware, Inc. or its affiliates.
|
||||
(c) 2020-2021 VMware, Inc. or its affiliates.
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
= RabbitMQ Stream Plugin Management
|
||||
= RabbitMQ Stream Management Plugin
|
||||
|
||||
== Project Maturity
|
||||
|
||||
|
@ -8,7 +8,7 @@ It is not ready for production use.
|
|||
== Support
|
||||
|
||||
* For questions: https://groups.google.com/forum/#!forum/rabbitmq-users[RabbitMQ Users]
|
||||
* For bugs and feature requests: https://github.com/rabbitmq/rabbitmq-stream/issues[GitHub Issues]
|
||||
* For bugs and feature requests: https://github.com/rabbitmq/rabbitmq-server/issues[GitHub Issues]
|
||||
|
||||
The project is currently under development, there is no guarantee yet that it will be maintained and supported
|
||||
in the future (read: you are welcome to experiment with it and give feedback, but please do not base
|
||||
|
@ -20,4 +20,4 @@ Released under the link:LICENSE-MPL-RabbitMQ[MPL 2.0].
|
|||
|
||||
== Copyright
|
||||
|
||||
(c) 2020 VMware, Inc. or its affiliates.
|
||||
(c) 2020-2021 VMware, Inc. or its affiliates.
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
This package, the RabbitMQ server is licensed under the MPL 2.0. For the
|
||||
MPL 2.0, please see LICENSE-MPL-RabbitMQ.
|
||||
|
||||
If you have any questions regarding licensing, please contact us at
|
||||
info@rabbitmq.com.
|
|
@ -0,0 +1,370 @@
|
|||
Mozilla Public License Version 2.0
|
||||
==================================
|
||||
|
||||
1. Definitions
|
||||
--------------
|
||||
|
||||
1.1. "Contributor"
|
||||
means each individual or legal entity that creates, contributes to
|
||||
the creation of, or owns Covered Software.
|
||||
|
||||
1.2. "Contributor Version"
|
||||
means the combination of the Contributions of others (if any) used
|
||||
by a Contributor and that particular Contributor's Contribution.
|
||||
|
||||
1.3. "Contribution"
|
||||
means Covered Software of a particular Contributor.
|
||||
|
||||
1.4. "Covered Software"
|
||||
means Source Code Form to which the initial Contributor has attached
|
||||
the notice in Exhibit A, the Executable Form of such Source Code
|
||||
Form, and Modifications of such Source Code Form, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.5. "Incompatible With Secondary Licenses"
|
||||
means
|
||||
|
||||
(a) that the initial Contributor has attached the notice described
|
||||
in Exhibit B to the Covered Software; or
|
||||
|
||||
(b) that the Covered Software was made available under the terms of
|
||||
version 1.1 or earlier of the License, but not also under the
|
||||
terms of a Secondary License.
|
||||
|
||||
1.6. "Executable Form"
|
||||
means any form of the work other than Source Code Form.
|
||||
|
||||
1.7. "Larger Work"
|
||||
means a work that combines Covered Software with other material, in
|
||||
a separate file or files, that is not Covered Software.
|
||||
|
||||
1.8. "License"
|
||||
means this document.
|
||||
|
||||
1.9. "Licensable"
|
||||
means having the right to grant, to the maximum extent possible,
|
||||
whether at the time of the initial grant or subsequently, any and
|
||||
all of the rights conveyed by this License.
|
||||
|
||||
1.10. "Modifications"
|
||||
means any of the following:
|
||||
|
||||
(a) any file in Source Code Form that results from an addition to,
|
||||
deletion from, or modification of the contents of Covered
|
||||
Software; or
|
||||
|
||||
(b) any new file in Source Code Form that contains any Covered
|
||||
Software.
|
||||
|
||||
1.11. "Patent Claims" of a Contributor
|
||||
means any patent claim(s), including without limitation, method,
|
||||
process, and apparatus claims, in any patent Licensable by such
|
||||
Contributor that would be infringed, but for the grant of the
|
||||
License, by the making, using, selling, offering for sale, having
|
||||
made, import, or transfer of either its Contributions or its
|
||||
Contributor Version.
|
||||
|
||||
1.12. "Secondary License"
|
||||
means either the GNU General Public License, Version 2.0, the GNU
|
||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||
Public License, Version 3.0, or any later versions of those
|
||||
licenses.
|
||||
|
||||
1.13. "Source Code Form"
|
||||
means the form of the work preferred for making modifications.
|
||||
|
||||
1.14. "You" (or "Your")
|
||||
means an individual or a legal entity exercising rights under this
|
||||
License. For legal entities, "You" includes any entity that
|
||||
controls, is controlled by, or is under common control with You. For
|
||||
purposes of this definition, "control" means (a) the power, direct
|
||||
or indirect, to cause the direction or management of such entity,
|
||||
whether by contract or otherwise, or (b) ownership of more than
|
||||
fifty percent (50%) of the outstanding shares or beneficial
|
||||
ownership of such entity.
|
||||
|
||||
2. License Grants and Conditions
|
||||
--------------------------------
|
||||
|
||||
2.1. Grants
|
||||
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license:
|
||||
|
||||
(a) under intellectual property rights (other than patent or trademark)
|
||||
Licensable by such Contributor to use, reproduce, make available,
|
||||
modify, display, perform, distribute, and otherwise exploit its
|
||||
Contributions, either on an unmodified basis, with Modifications, or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||
for sale, have made, import, and otherwise transfer either its
|
||||
Contributions or its Contributor Version.
|
||||
|
||||
2.2. Effective Date
|
||||
|
||||
The licenses granted in Section 2.1 with respect to any Contribution
|
||||
become effective for each Contribution on the date the Contributor first
|
||||
distributes such Contribution.
|
||||
|
||||
2.3. Limitations on Grant Scope
|
||||
|
||||
The licenses granted in this Section 2 are the only rights granted under
|
||||
this License. No additional rights or licenses will be implied from the
|
||||
distribution or licensing of Covered Software under this License.
|
||||
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||
Contributor:
|
||||
|
||||
(a) for any code that a Contributor has removed from Covered Software;
|
||||
or
|
||||
|
||||
(b) for infringements caused by: (i) Your and any other third party's
|
||||
modifications of Covered Software, or (ii) the combination of its
|
||||
Contributions with other software (except as part of its Contributor
|
||||
Version); or
|
||||
|
||||
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||
its Contributions.
|
||||
|
||||
This License does not grant any rights in the trademarks, service marks,
|
||||
or logos of any Contributor (except as may be necessary to comply with
|
||||
the notice requirements in Section 3.4).
|
||||
|
||||
2.4. Subsequent Licenses
|
||||
|
||||
No Contributor makes additional grants as a result of Your choice to
|
||||
distribute the Covered Software under a subsequent version of this
|
||||
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||
permitted under the terms of Section 3.3).
|
||||
|
||||
2.5. Representation
|
||||
|
||||
Each Contributor represents that the Contributor believes its
|
||||
Contributions are its original creation(s) or it has sufficient rights
|
||||
to grant the rights to its Contributions conveyed by this License.
|
||||
|
||||
2.6. Fair Use
|
||||
|
||||
This License is not intended to limit any rights You have under
|
||||
applicable copyright doctrines of fair use, fair dealing, or other
|
||||
equivalents.
|
||||
|
||||
2.7. Conditions
|
||||
|
||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||
in Section 2.1.
|
||||
|
||||
3. Responsibilities
|
||||
-------------------
|
||||
|
||||
3.1. Distribution of Source Form
|
||||
|
||||
All distribution of Covered Software in Source Code Form, including any
|
||||
Modifications that You create or to which You contribute, must be under
|
||||
the terms of this License. You must inform recipients that the Source
|
||||
Code Form of the Covered Software is governed by the terms of this
|
||||
License, and how they can obtain a copy of this License. You may not
|
||||
attempt to alter or restrict the recipients' rights in the Source Code
|
||||
Form.
|
||||
|
||||
3.2. Distribution of Executable Form
|
||||
|
||||
If You distribute Covered Software in Executable Form then:
|
||||
|
||||
(a) such Covered Software must also be made available in Source Code
|
||||
Form, as described in Section 3.1, and You must inform recipients of
|
||||
the Executable Form how they can obtain a copy of such Source Code
|
||||
Form by reasonable means in a timely manner, at a charge no more
|
||||
than the cost of distribution to the recipient; and
|
||||
|
||||
(b) You may distribute such Executable Form under the terms of this
|
||||
License, or sublicense it under different terms, provided that the
|
||||
license for the Executable Form does not attempt to limit or alter
|
||||
the recipients' rights in the Source Code Form under this License.
|
||||
|
||||
3.3. Distribution of a Larger Work
|
||||
|
||||
You may create and distribute a Larger Work under terms of Your choice,
|
||||
provided that You also comply with the requirements of this License for
|
||||
the Covered Software. If the Larger Work is a combination of Covered
|
||||
Software with a work governed by one or more Secondary Licenses, and the
|
||||
Covered Software is not Incompatible With Secondary Licenses, this
|
||||
License permits You to additionally distribute such Covered Software
|
||||
under the terms of such Secondary License(s), so that the recipient of
|
||||
the Larger Work may, at their option, further distribute the Covered
|
||||
Software under the terms of either this License or such Secondary
|
||||
License(s).
|
||||
|
||||
3.4. Notices
|
||||
|
||||
You may not remove or alter the substance of any license notices
|
||||
(including copyright notices, patent notices, disclaimers of warranty,
|
||||
or limitations of liability) contained within the Source Code Form of
|
||||
the Covered Software, except that You may alter any license notices to
|
||||
the extent required to remedy known factual inaccuracies.
|
||||
|
||||
3.5. Application of Additional Terms
|
||||
|
||||
You may choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of Covered
|
||||
Software. However, You may do so only on Your own behalf, and not on
|
||||
behalf of any Contributor. You must make it absolutely clear that any
|
||||
such warranty, support, indemnity, or liability obligation is offered by
|
||||
You alone, and You hereby agree to indemnify every Contributor for any
|
||||
liability incurred by such Contributor as a result of warranty, support,
|
||||
indemnity or liability terms You offer. You may include additional
|
||||
disclaimers of warranty and limitations of liability specific to any
|
||||
jurisdiction.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation
|
||||
---------------------------------------------------
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Software due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description must
|
||||
be placed in a text file included with all distributions of the Covered
|
||||
Software under this License. Except to the extent prohibited by statute
|
||||
or regulation, such description must be sufficiently detailed for a
|
||||
recipient of ordinary skill to be able to understand it.
|
||||
|
||||
5. Termination
|
||||
--------------
|
||||
|
||||
5.1. The rights granted under this License will terminate automatically
|
||||
if You fail to comply with any of its terms. However, if You become
|
||||
compliant, then the rights granted under this License from a particular
|
||||
Contributor are reinstated (a) provisionally, unless and until such
|
||||
Contributor explicitly and finally terminates Your grants, and (b) on an
|
||||
ongoing basis, if such Contributor fails to notify You of the
|
||||
non-compliance by some reasonable means prior to 60 days after You have
|
||||
come back into compliance. Moreover, Your grants from a particular
|
||||
Contributor are reinstated on an ongoing basis if such Contributor
|
||||
notifies You of the non-compliance by some reasonable means, this is the
|
||||
first time You have received notice of non-compliance with this License
|
||||
from such Contributor, and You become compliant prior to 30 days after
|
||||
Your receipt of the notice.
|
||||
|
||||
5.2. If You initiate litigation against any entity by asserting a patent
|
||||
infringement claim (excluding declaratory judgment actions,
|
||||
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||
directly or indirectly infringes any patent, then the rights granted to
|
||||
You by any and all Contributors for the Covered Software under Section
|
||||
2.1 of this License shall terminate.
|
||||
|
||||
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
||||
end user license agreements (excluding distributors and resellers) which
|
||||
have been validly granted by You or Your distributors under this License
|
||||
prior to termination shall survive termination.
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 6. Disclaimer of Warranty *
|
||||
* ------------------------- *
|
||||
* *
|
||||
* Covered Software is provided under this License on an "as is" *
|
||||
* basis, without warranty of any kind, either expressed, implied, or *
|
||||
* statutory, including, without limitation, warranties that the *
|
||||
* Covered Software is free of defects, merchantable, fit for a *
|
||||
* particular purpose or non-infringing. The entire risk as to the *
|
||||
* quality and performance of the Covered Software is with You. *
|
||||
* Should any Covered Software prove defective in any respect, You *
|
||||
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||
* essential part of this License. No use of any Covered Software is *
|
||||
* authorized under this License except under this disclaimer. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 7. Limitation of Liability *
|
||||
* -------------------------- *
|
||||
* *
|
||||
* Under no circumstances and under no legal theory, whether tort *
|
||||
* (including negligence), contract, or otherwise, shall any *
|
||||
* Contributor, or anyone who distributes Covered Software as *
|
||||
* permitted above, be liable to You for any direct, indirect, *
|
||||
* special, incidental, or consequential damages of any character *
|
||||
* including, without limitation, damages for lost profits, loss of *
|
||||
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||
* and all other commercial damages or losses, even if such party *
|
||||
* shall have been informed of the possibility of such damages. This *
|
||||
* limitation of liability shall not apply to liability for death or *
|
||||
* personal injury resulting from such party's negligence to the *
|
||||
* extent applicable law prohibits such limitation. Some *
|
||||
* jurisdictions do not allow the exclusion or limitation of *
|
||||
* incidental or consequential damages, so this exclusion and *
|
||||
* limitation may not apply to You. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
8. Litigation
|
||||
-------------
|
||||
|
||||
Any litigation relating to this License may be brought only in the
|
||||
courts of a jurisdiction where the defendant maintains its principal
|
||||
place of business and such litigation shall be governed by laws of that
|
||||
jurisdiction, without reference to its conflict-of-law provisions.
|
||||
Nothing in this Section shall prevent a party's ability to bring
|
||||
cross-claims or counter-claims.
|
||||
|
||||
9. Miscellaneous
|
||||
----------------
|
||||
|
||||
This License represents the complete agreement concerning the subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. Any law or regulation which provides
|
||||
that the language of a contract shall be construed against the drafter
|
||||
shall not be used to construe this License against a Contributor.
|
||||
|
||||
10. Versions of the License
|
||||
---------------------------
|
||||
|
||||
10.1. New Versions
|
||||
|
||||
Mozilla Foundation is the license steward. Except as provided in Section
|
||||
10.3, no one other than the license steward has the right to modify or
|
||||
publish new versions of this License. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
10.2. Effect of New Versions
|
||||
|
||||
You may distribute the Covered Software under the terms of the version
|
||||
of the License under which You originally received the Covered Software,
|
||||
or under the terms of any subsequent version published by the license
|
||||
steward.
|
||||
|
||||
10.3. Modified Versions
|
||||
|
||||
If you create software not governed by this License, and you want to
|
||||
create a new license for such software, you may create and use a
|
||||
modified version of this License if you rename the license and remove
|
||||
any references to the name of the license steward (except to note that
|
||||
such modified license differs from this License).
|
||||
|
||||
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||
Licenses
|
||||
|
||||
If You choose to distribute Source Code Form that is Incompatible With
|
||||
Secondary Licenses under the terms of this version of the License, the
|
||||
notice described in Exhibit B of this License must be attached.
|
||||
|
||||
Exhibit A - Source Code Form License Notice
|
||||
-------------------------------------------
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
file in a relevant directory) where a recipient would be likely to look
|
||||
for such a notice.
|
||||
|
||||
The Original Code is RabbitMQ.
|
||||
|
||||
The Initial Developer of the Original Code is Pivotal Software, Inc.
|
||||
Copyright (c) 2020 VMware, Inc or its affiliates. All rights reserved.
|
|
@ -0,0 +1,24 @@
|
|||
PROJECT = rabbitmq_stream_prometheus
|
||||
PROJECT_DESCRIPTION = RabbitMQ Stream Prometheus
|
||||
PROJECT_MOD = rabbit_stream_prometheus
|
||||
|
||||
define PROJECT_ENV
|
||||
[
|
||||
]
|
||||
endef
|
||||
|
||||
|
||||
DEPS = rabbit rabbitmq_prometheus rabbitmq_stream
|
||||
TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers
|
||||
|
||||
DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk
|
||||
DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk
|
||||
|
||||
# FIXME: Use erlang.mk patched for RabbitMQ, while waiting for PRs to be
|
||||
# reviewed and merged.
|
||||
|
||||
ERLANG_MK_REPO = https://github.com/rabbitmq/erlang.mk.git
|
||||
ERLANG_MK_COMMIT = rabbitmq-tmp
|
||||
|
||||
include rabbitmq-components.mk
|
||||
include erlang.mk
|
|
@ -0,0 +1,23 @@
|
|||
= RabbitMQ Stream Prometheus Plugin
|
||||
|
||||
== Project Maturity
|
||||
|
||||
The project is in early stages of development and is considered experimental.
|
||||
It is not ready for production use.
|
||||
|
||||
== Support
|
||||
|
||||
* For questions: https://groups.google.com/forum/#!forum/rabbitmq-users[RabbitMQ Users]
|
||||
* For bugs and feature requests: https://github.com/rabbitmq/rabbitmq-server/issues[GitHub Issues]
|
||||
|
||||
The project is currently under development, there is no guarantee yet that it will be maintained and supported
|
||||
in the future (read: you are welcome to experiment with it and give feedback, but please do not base
|
||||
your whole business on it).
|
||||
|
||||
== Licensing
|
||||
|
||||
Released under the link:LICENSE-MPL-RabbitMQ[MPL 2.0].
|
||||
|
||||
== Copyright
|
||||
|
||||
(c) 2020-2021 VMware, Inc. or its affiliates.
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,363 @@
|
|||
ifeq ($(.DEFAULT_GOAL),)
|
||||
# Define default goal to `all` because this file defines some targets
|
||||
# before the inclusion of erlang.mk leading to the wrong target becoming
|
||||
# the default.
|
||||
.DEFAULT_GOAL = all
|
||||
endif
|
||||
|
||||
# PROJECT_VERSION defaults to:
|
||||
# 1. the version exported by rabbitmq-server-release;
|
||||
# 2. the version stored in `git-revisions.txt`, if it exists;
|
||||
# 3. a version based on git-describe(1), if it is a Git clone;
|
||||
# 4. 0.0.0
|
||||
|
||||
PROJECT_VERSION := $(RABBITMQ_VERSION)
|
||||
|
||||
ifeq ($(PROJECT_VERSION),)
|
||||
PROJECT_VERSION := $(shell \
|
||||
if test -f git-revisions.txt; then \
|
||||
head -n1 git-revisions.txt | \
|
||||
awk '{print $$$(words $(PROJECT_DESCRIPTION) version);}'; \
|
||||
else \
|
||||
(git describe --dirty --abbrev=7 --tags --always --first-parent \
|
||||
2>/dev/null || echo rabbitmq_v0_0_0) | \
|
||||
sed -e 's/^rabbitmq_v//' -e 's/^v//' -e 's/_/./g' -e 's/-/+/' \
|
||||
-e 's/-/./g'; \
|
||||
fi)
|
||||
endif
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# RabbitMQ components.
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
# For RabbitMQ repositories, we want to checkout branches which match
|
||||
# the parent project. For instance, if the parent project is on a
|
||||
# release tag, dependencies must be on the same release tag. If the
|
||||
# parent project is on a topic branch, dependencies must be on the same
|
||||
# topic branch or fallback to `stable` or `master` whichever was the
|
||||
# base of the topic branch.
|
||||
|
||||
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_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
|
||||
dep_rabbitmq_auth_backend_amqp = git_rmq rabbitmq-auth-backend-amqp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_auth_backend_cache = git_rmq rabbitmq-auth-backend-cache $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_auth_backend_http = git_rmq rabbitmq-auth-backend-http $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_auth_backend_ldap = git_rmq rabbitmq-auth-backend-ldap $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_auth_backend_oauth2 = git_rmq rabbitmq-auth-backend-oauth2 $(current_rmq_ref) $(base_rmq_ref) master
|
||||
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_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
|
||||
dep_rabbitmq_ct_client_helpers = git_rmq rabbitmq-ct-client-helpers $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_ct_helpers = git_rmq rabbitmq-ct-helpers $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_delayed_message_exchange = git_rmq rabbitmq-delayed-message-exchange $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_dotnet_client = git_rmq rabbitmq-dotnet-client $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_event_exchange = git_rmq rabbitmq-event-exchange $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_federation = git_rmq rabbitmq-federation $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_federation_management = git_rmq rabbitmq-federation-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_java_client = git_rmq rabbitmq-java-client $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_jms_client = git_rmq rabbitmq-jms-client $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_jms_cts = git_rmq rabbitmq-jms-cts $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_jms_topic_exchange = git_rmq rabbitmq-jms-topic-exchange $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_lvc_exchange = git_rmq rabbitmq-lvc-exchange $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_management = git_rmq rabbitmq-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
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_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
|
||||
dep_rabbitmq_objc_client = git_rmq rabbitmq-objc-client $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_peer_discovery_aws = git_rmq rabbitmq-peer-discovery-aws $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_peer_discovery_common = git_rmq rabbitmq-peer-discovery-common $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_peer_discovery_consul = git_rmq rabbitmq-peer-discovery-consul $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_peer_discovery_etcd = git_rmq rabbitmq-peer-discovery-etcd $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_peer_discovery_k8s = git_rmq rabbitmq-peer-discovery-k8s $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_prometheus = git_rmq rabbitmq-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_random_exchange = git_rmq rabbitmq-random-exchange $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_recent_history_exchange = git_rmq rabbitmq-recent-history-exchange $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_routing_node_stamp = git_rmq rabbitmq-routing-node-stamp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_rtopic_exchange = git_rmq rabbitmq-rtopic-exchange $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_server_release = git_rmq rabbitmq-server-release $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_sharding = git_rmq rabbitmq-sharding $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_shovel = git_rmq rabbitmq-shovel $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_trust_store = git_rmq rabbitmq-trust-store $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_test = git_rmq rabbitmq-test $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_web_dispatch = git_rmq rabbitmq-web-dispatch $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_web_stomp = git_rmq rabbitmq-web-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_web_stomp_examples = git_rmq rabbitmq-web-stomp-examples $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_web_mqtt = git_rmq rabbitmq-web-mqtt $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_web_mqtt_examples = git_rmq rabbitmq-web-mqtt-examples $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_website = git_rmq rabbitmq-website $(current_rmq_ref) $(base_rmq_ref) live master
|
||||
dep_toke = git_rmq toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
||||
dep_rabbitmq_public_umbrella = git_rmq rabbitmq-public-umbrella $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
||||
# Third-party dependencies version pinning.
|
||||
#
|
||||
# We do that in this file, which is copied in all projects, to ensure
|
||||
# all projects use the same versions. It avoids conflicts and makes it
|
||||
# possible to work with rabbitmq-public-umbrella.
|
||||
|
||||
dep_accept = hex 0.3.5
|
||||
dep_cowboy = hex 2.8.0
|
||||
dep_cowlib = hex 2.9.1
|
||||
dep_jsx = hex 2.11.0
|
||||
dep_lager = hex 3.8.0
|
||||
dep_prometheus = git https://github.com/deadtrickster/prometheus.erl.git master
|
||||
dep_ra = git https://github.com/rabbitmq/ra.git master
|
||||
dep_ranch = hex 1.7.1
|
||||
dep_recon = hex 2.5.1
|
||||
dep_observer_cli = hex 1.5.4
|
||||
dep_stdout_formatter = hex 0.2.4
|
||||
dep_sysmon_handler = hex 1.3.0
|
||||
|
||||
RABBITMQ_COMPONENTS = amqp_client \
|
||||
amqp10_common \
|
||||
amqp10_client \
|
||||
rabbit \
|
||||
rabbit_common \
|
||||
rabbitmq_amqp1_0 \
|
||||
rabbitmq_auth_backend_amqp \
|
||||
rabbitmq_auth_backend_cache \
|
||||
rabbitmq_auth_backend_http \
|
||||
rabbitmq_auth_backend_ldap \
|
||||
rabbitmq_auth_backend_oauth2 \
|
||||
rabbitmq_auth_mechanism_ssl \
|
||||
rabbitmq_aws \
|
||||
rabbitmq_boot_steps_visualiser \
|
||||
rabbitmq_cli \
|
||||
rabbitmq_codegen \
|
||||
rabbitmq_consistent_hash_exchange \
|
||||
rabbitmq_ct_client_helpers \
|
||||
rabbitmq_ct_helpers \
|
||||
rabbitmq_delayed_message_exchange \
|
||||
rabbitmq_dotnet_client \
|
||||
rabbitmq_event_exchange \
|
||||
rabbitmq_federation \
|
||||
rabbitmq_federation_management \
|
||||
rabbitmq_java_client \
|
||||
rabbitmq_jms_client \
|
||||
rabbitmq_jms_cts \
|
||||
rabbitmq_jms_topic_exchange \
|
||||
rabbitmq_lvc_exchange \
|
||||
rabbitmq_management \
|
||||
rabbitmq_management_agent \
|
||||
rabbitmq_management_exchange \
|
||||
rabbitmq_management_themes \
|
||||
rabbitmq_message_timestamp \
|
||||
rabbitmq_metronome \
|
||||
rabbitmq_mqtt \
|
||||
rabbitmq_objc_client \
|
||||
rabbitmq_peer_discovery_aws \
|
||||
rabbitmq_peer_discovery_common \
|
||||
rabbitmq_peer_discovery_consul \
|
||||
rabbitmq_peer_discovery_etcd \
|
||||
rabbitmq_peer_discovery_k8s \
|
||||
rabbitmq_prometheus \
|
||||
rabbitmq_random_exchange \
|
||||
rabbitmq_recent_history_exchange \
|
||||
rabbitmq_routing_node_stamp \
|
||||
rabbitmq_rtopic_exchange \
|
||||
rabbitmq_server_release \
|
||||
rabbitmq_sharding \
|
||||
rabbitmq_shovel \
|
||||
rabbitmq_shovel_management \
|
||||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
rabbitmq_trust_store \
|
||||
rabbitmq_web_dispatch \
|
||||
rabbitmq_web_mqtt \
|
||||
rabbitmq_web_mqtt_examples \
|
||||
rabbitmq_web_stomp \
|
||||
rabbitmq_web_stomp_examples \
|
||||
rabbitmq_website
|
||||
|
||||
# Erlang.mk does not rebuild dependencies by default, once they were
|
||||
# compiled once, except for those listed in the `$(FORCE_REBUILD)`
|
||||
# variable.
|
||||
#
|
||||
# We want all RabbitMQ components to always be rebuilt: this eases
|
||||
# the work on several components at the same time.
|
||||
|
||||
FORCE_REBUILD = $(RABBITMQ_COMPONENTS)
|
||||
|
||||
# Several components have a custom erlang.mk/build.config, mainly
|
||||
# to disable eunit. Therefore, we can't use the top-level project's
|
||||
# erlang.mk copy.
|
||||
NO_AUTOPATCH += $(RABBITMQ_COMPONENTS)
|
||||
|
||||
ifeq ($(origin current_rmq_ref),undefined)
|
||||
ifneq ($(wildcard .git),)
|
||||
current_rmq_ref := $(shell (\
|
||||
ref=$$(LANG=C git branch --list | awk '/^\* \(.*detached / {ref=$$0; sub(/.*detached [^ ]+ /, "", ref); sub(/\)$$/, "", ref); print ref; exit;} /^\* / {ref=$$0; sub(/^\* /, "", ref); print ref; exit}');\
|
||||
if test "$$(git rev-parse --short HEAD)" != "$$ref"; then echo "$$ref"; fi))
|
||||
else
|
||||
current_rmq_ref := master
|
||||
endif
|
||||
endif
|
||||
export current_rmq_ref
|
||||
|
||||
ifeq ($(origin base_rmq_ref),undefined)
|
||||
ifneq ($(wildcard .git),)
|
||||
possible_base_rmq_ref := master
|
||||
ifeq ($(possible_base_rmq_ref),$(current_rmq_ref))
|
||||
base_rmq_ref := $(current_rmq_ref)
|
||||
else
|
||||
base_rmq_ref := $(shell \
|
||||
(git rev-parse --verify -q master >/dev/null && \
|
||||
git rev-parse --verify -q $(possible_base_rmq_ref) >/dev/null && \
|
||||
git merge-base --is-ancestor $$(git merge-base master HEAD) $(possible_base_rmq_ref) && \
|
||||
echo $(possible_base_rmq_ref)) || \
|
||||
echo master)
|
||||
endif
|
||||
else
|
||||
base_rmq_ref := master
|
||||
endif
|
||||
endif
|
||||
export base_rmq_ref
|
||||
|
||||
# Repository URL selection.
|
||||
#
|
||||
# First, we infer other components' location from the current project
|
||||
# repository URL, if it's a Git repository:
|
||||
# - We take the "origin" remote URL as the base
|
||||
# - The current project name and repository name is replaced by the
|
||||
# target's properties:
|
||||
# eg. rabbitmq-common is replaced by rabbitmq-codegen
|
||||
# eg. rabbit_common is replaced by rabbitmq_codegen
|
||||
#
|
||||
# If cloning from this computed location fails, we fallback to RabbitMQ
|
||||
# upstream which is GitHub.
|
||||
|
||||
# Macro to transform eg. "rabbit_common" to "rabbitmq-common".
|
||||
rmq_cmp_repo_name = $(word 2,$(dep_$(1)))
|
||||
|
||||
# Upstream URL for the current project.
|
||||
RABBITMQ_COMPONENT_REPO_NAME := $(call rmq_cmp_repo_name,$(PROJECT))
|
||||
RABBITMQ_UPSTREAM_FETCH_URL ?= https://github.com/rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git
|
||||
RABBITMQ_UPSTREAM_PUSH_URL ?= git@github.com:rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git
|
||||
|
||||
# Current URL for the current project. If this is not a Git clone,
|
||||
# default to the upstream Git repository.
|
||||
ifneq ($(wildcard .git),)
|
||||
git_origin_fetch_url := $(shell git config remote.origin.url)
|
||||
git_origin_push_url := $(shell git config remote.origin.pushurl || git config remote.origin.url)
|
||||
RABBITMQ_CURRENT_FETCH_URL ?= $(git_origin_fetch_url)
|
||||
RABBITMQ_CURRENT_PUSH_URL ?= $(git_origin_push_url)
|
||||
else
|
||||
RABBITMQ_CURRENT_FETCH_URL ?= $(RABBITMQ_UPSTREAM_FETCH_URL)
|
||||
RABBITMQ_CURRENT_PUSH_URL ?= $(RABBITMQ_UPSTREAM_PUSH_URL)
|
||||
endif
|
||||
|
||||
# Macro to replace the following pattern:
|
||||
# 1. /foo.git -> /bar.git
|
||||
# 2. /foo -> /bar
|
||||
# 3. /foo/ -> /bar/
|
||||
subst_repo_name = $(patsubst %/$(1)/%,%/$(2)/%,$(patsubst %/$(1),%/$(2),$(patsubst %/$(1).git,%/$(2).git,$(3))))
|
||||
|
||||
# Macro to replace both the project's name (eg. "rabbit_common") and
|
||||
# repository name (eg. "rabbitmq-common") by the target's equivalent.
|
||||
#
|
||||
# This macro is kept on one line because we don't want whitespaces in
|
||||
# the returned value, as it's used in $(dep_fetch_git_rmq) in a shell
|
||||
# single-quoted string.
|
||||
dep_rmq_repo = $(if $(dep_$(2)),$(call subst_repo_name,$(PROJECT),$(2),$(call subst_repo_name,$(RABBITMQ_COMPONENT_REPO_NAME),$(call rmq_cmp_repo_name,$(2)),$(1))),$(pkg_$(1)_repo))
|
||||
|
||||
dep_rmq_commits = $(if $(dep_$(1)), \
|
||||
$(wordlist 3,$(words $(dep_$(1))),$(dep_$(1))), \
|
||||
$(pkg_$(1)_commit))
|
||||
|
||||
define dep_fetch_git_rmq
|
||||
fetch_url1='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_FETCH_URL),$(1))'; \
|
||||
fetch_url2='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_FETCH_URL),$(1))'; \
|
||||
if test "$$$$fetch_url1" != '$(RABBITMQ_CURRENT_FETCH_URL)' && \
|
||||
git clone -q -n -- "$$$$fetch_url1" $(DEPS_DIR)/$(call dep_name,$(1)); then \
|
||||
fetch_url="$$$$fetch_url1"; \
|
||||
push_url='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_PUSH_URL),$(1))'; \
|
||||
elif git clone -q -n -- "$$$$fetch_url2" $(DEPS_DIR)/$(call dep_name,$(1)); then \
|
||||
fetch_url="$$$$fetch_url2"; \
|
||||
push_url='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_PUSH_URL),$(1))'; \
|
||||
fi; \
|
||||
cd $(DEPS_DIR)/$(call dep_name,$(1)) && ( \
|
||||
$(foreach ref,$(call dep_rmq_commits,$(1)), \
|
||||
git checkout -q $(ref) >/dev/null 2>&1 || \
|
||||
) \
|
||||
(echo "error: no valid pathspec among: $(call dep_rmq_commits,$(1))" \
|
||||
1>&2 && false) ) && \
|
||||
(test "$$$$fetch_url" = "$$$$push_url" || \
|
||||
git remote set-url --push origin "$$$$push_url")
|
||||
endef
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Component distribution.
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
list-dist-deps::
|
||||
@:
|
||||
|
||||
prepare-dist::
|
||||
@:
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Umbrella-specific settings.
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
# If the top-level project is a RabbitMQ component, we override
|
||||
# $(DEPS_DIR) for this project to point to the top-level's one.
|
||||
#
|
||||
# We also verify that the guessed DEPS_DIR is actually named `deps`,
|
||||
# to rule out any situation where it is a coincidence that we found a
|
||||
# `rabbitmq-components.mk` up upper directories.
|
||||
|
||||
possible_deps_dir_1 = $(abspath ..)
|
||||
possible_deps_dir_2 = $(abspath ../../..)
|
||||
|
||||
ifeq ($(notdir $(possible_deps_dir_1)),deps)
|
||||
ifneq ($(wildcard $(possible_deps_dir_1)/../rabbitmq-components.mk),)
|
||||
deps_dir_overriden = 1
|
||||
DEPS_DIR ?= $(possible_deps_dir_1)
|
||||
DISABLE_DISTCLEAN = 1
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(deps_dir_overriden),)
|
||||
ifeq ($(notdir $(possible_deps_dir_2)),deps)
|
||||
ifneq ($(wildcard $(possible_deps_dir_2)/../rabbitmq-components.mk),)
|
||||
deps_dir_overriden = 1
|
||||
DEPS_DIR ?= $(possible_deps_dir_2)
|
||||
DISABLE_DISTCLEAN = 1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(wildcard UMBRELLA.md),)
|
||||
DISABLE_DISTCLEAN = 1
|
||||
endif
|
||||
|
||||
# We disable `make distclean` so $(DEPS_DIR) is not accidentally removed.
|
||||
|
||||
ifeq ($(DISABLE_DISTCLEAN),1)
|
||||
ifneq ($(filter distclean distclean-deps,$(MAKECMDGOALS)),)
|
||||
SKIP_DEPS = 1
|
||||
endif
|
||||
endif
|
|
@ -0,0 +1,12 @@
|
|||
{plugins, [rebar3_format]}.
|
||||
|
||||
{format, [
|
||||
{files, ["src/*.erl", "src/collectors/*.erl", "test/*.erl"]},
|
||||
{formatter, default_formatter},
|
||||
{options, #{
|
||||
paper => 80,
|
||||
ribbon => 70,
|
||||
inline_attributes => {when_under, 1},
|
||||
inline_items => {when_under, 4}
|
||||
}}
|
||||
]}.
|
176
deps/rabbitmq_stream_prometheus/src/collectors/prometheus_rabbitmq_stream_collector.erl
vendored
Normal file
176
deps/rabbitmq_stream_prometheus/src/collectors/prometheus_rabbitmq_stream_collector.erl
vendored
Normal file
|
@ -0,0 +1,176 @@
|
|||
%% The contents of this file are subject to the Mozilla Public License
|
||||
%% Version 2.0 (the "License"); you may not use this file except in
|
||||
%% compliance with the License. You may obtain a copy of the License
|
||||
%% at https://www.mozilla.org/en-US/MPL/2.0/
|
||||
%%
|
||||
%% Software distributed under the License is distributed on an "AS IS"
|
||||
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
||||
%% the License for the specific language governing rights and
|
||||
%% limitations under the License.
|
||||
%%
|
||||
%% The Original Code is RabbitMQ.
|
||||
%%
|
||||
%% The Initial Developer of the Original Code is Pivotal Software, Inc.
|
||||
%% Copyright (c) 2021 VMware, Inc. or its affiliates. All rights reserved.
|
||||
%%
|
||||
|
||||
-module(prometheus_rabbitmq_stream_collector).
|
||||
|
||||
-export([deregister_cleanup/1,
|
||||
collect_mf/2,
|
||||
collect_metrics/2]).
|
||||
|
||||
-include_lib("prometheus/include/prometheus.hrl").
|
||||
-include_lib("rabbit_common/include/rabbit.hrl").
|
||||
-include_lib("rabbitmq_stream/include/rabbit_stream_metrics.hrl").
|
||||
|
||||
-behaviour(prometheus_collector).
|
||||
|
||||
-define(METRIC_NAME_PREFIX, "rabbitmq_stream_").
|
||||
-define(METRICS_RAW,
|
||||
[% { ETS table, [ {index, Prometheus metrics name, type, help, key} ] }
|
||||
{?TABLE_PUBLISHER,
|
||||
[{2, publishers, gauge, "Number of publishers", publishers},
|
||||
{2,
|
||||
publishers_messages_published_total,
|
||||
counter,
|
||||
"Total number of messages published to streams",
|
||||
published},
|
||||
{2,
|
||||
publishers_messages_confirmed_total,
|
||||
counter,
|
||||
"Total number of messages confirmed",
|
||||
confirmed},
|
||||
{2,
|
||||
publishers_messages_errored_total,
|
||||
counter,
|
||||
"Total number of messages errored",
|
||||
errored}]},
|
||||
{?TABLE_CONSUMER,
|
||||
[{2, consumers, gauge, "Number of consumers", consumers},
|
||||
{2,
|
||||
consumers_messages_consumed_total,
|
||||
counter,
|
||||
"Total number of messages from streams",
|
||||
consumed}]}]).
|
||||
|
||||
%% Collector API
|
||||
|
||||
deregister_cleanup(_) ->
|
||||
ok.
|
||||
|
||||
collect_mf('per-object', Callback) ->
|
||||
collect(true, Callback);
|
||||
collect_mf(_Registry, Callback) ->
|
||||
PerObjectMetrics =
|
||||
application:get_env(rabbitmq_prometheus, return_per_object_metrics,
|
||||
false),
|
||||
collect(PerObjectMetrics, Callback).
|
||||
|
||||
collect(PerObjectMetrics, Callback) ->
|
||||
[begin
|
||||
Data = get_data(Table, PerObjectMetrics),
|
||||
mf(Callback, filter_contents(Contents, PerObjectMetrics), Data)
|
||||
end
|
||||
|| {Table, Contents} <- ?METRICS_RAW],
|
||||
ok.
|
||||
|
||||
filter_contents(Contents, false) ->
|
||||
Contents;
|
||||
filter_contents(Contents, true) ->
|
||||
[E || {_, _, Type, _, _} = E <- Contents,
|
||||
Type == counter].
|
||||
|
||||
get_data(?TABLE_PUBLISHER = Table, false) ->
|
||||
{Table, A1, A2, A3, A4} =
|
||||
ets:foldl(fun({_, Props}, {T, A1, A2, A3, A4}) ->
|
||||
{T,
|
||||
A1 + 1,
|
||||
sum(proplists:get_value(published, Props), A2),
|
||||
sum(proplists:get_value(confirmed, Props), A3),
|
||||
sum(proplists:get_value(errored, Props), A4)}
|
||||
end,
|
||||
empty(Table), Table),
|
||||
[{Table,
|
||||
[{publishers, A1}, {published, A2}, {confirmed, A3}, {errored, A4}]}];
|
||||
get_data(?TABLE_CONSUMER = Table, false) ->
|
||||
{Table, A1, A2} =
|
||||
ets:foldl(fun({_, Props}, {T, A1, A2}) ->
|
||||
{T, A1 + 1, sum(proplists:get_value(consumed, Props), A2)}
|
||||
end,
|
||||
empty(Table), Table),
|
||||
[{Table, [{consumers, A1}, {consumed, A2}]}];
|
||||
get_data(Table, _) ->
|
||||
ets:tab2list(Table).
|
||||
|
||||
mf(Callback, Contents, Data) ->
|
||||
[begin
|
||||
Fun = fun(D) -> proplists:get_value(Key, element(Index, D)) end,
|
||||
Callback(prometheus_model_helpers:create_mf(?METRIC_NAME(Name),
|
||||
Help,
|
||||
catch_boolean(Type),
|
||||
?MODULE,
|
||||
{Type, Fun, Data}))
|
||||
end
|
||||
|| {Index, Name, Type, Help, Key} <- Contents].
|
||||
|
||||
collect_metrics(_Name, {Type, Fun, Items}) ->
|
||||
[metric(Type, labels(Item), Fun(Item)) || Item <- Items].
|
||||
|
||||
labels(Item) ->
|
||||
label(element(1, Item)).
|
||||
|
||||
label(#resource{virtual_host = VHost,
|
||||
kind = queue,
|
||||
name = Name}) ->
|
||||
[{vhost, VHost}, {queue, Name}];
|
||||
label({Resource, Connection, Id}) ->
|
||||
label(Resource) ++ label(Connection) ++ label(Id);
|
||||
label(P) when is_pid(P) ->
|
||||
[{connection, P}];
|
||||
label(Id) when is_integer(Id) ->
|
||||
[{id, Id}];
|
||||
label(_) ->
|
||||
[].
|
||||
|
||||
metric(counter, Labels, Value) ->
|
||||
emit_counter_metric_if_defined(Labels, Value);
|
||||
metric(gauge, Labels, Value) ->
|
||||
emit_gauge_metric_if_defined(Labels, Value).
|
||||
|
||||
emit_counter_metric_if_defined(Labels, Value) ->
|
||||
case Value of
|
||||
undefined ->
|
||||
undefined;
|
||||
'' ->
|
||||
prometheus_model_helpers:counter_metric(Labels, undefined);
|
||||
Value ->
|
||||
prometheus_model_helpers:counter_metric(Labels, Value)
|
||||
end.
|
||||
|
||||
emit_gauge_metric_if_defined(Labels, Value) ->
|
||||
case Value of
|
||||
undefined ->
|
||||
undefined;
|
||||
'' ->
|
||||
prometheus_model_helpers:gauge_metric(Labels, undefined);
|
||||
Value ->
|
||||
prometheus_model_helpers:gauge_metric(Labels, Value)
|
||||
end.
|
||||
|
||||
empty(T) when T == ?TABLE_CONSUMER ->
|
||||
{T, 0, 0};
|
||||
empty(T) when T == ?TABLE_PUBLISHER ->
|
||||
{T, 0, 0, 0, 0}.
|
||||
|
||||
sum(undefined, B) ->
|
||||
B;
|
||||
sum('', B) ->
|
||||
B;
|
||||
sum(A, B) ->
|
||||
A + B.
|
||||
|
||||
catch_boolean(boolean) ->
|
||||
untyped;
|
||||
catch_boolean(T) ->
|
||||
T.
|
|
@ -0,0 +1,38 @@
|
|||
%% The contents of this file are subject to the Mozilla Public License
|
||||
%% Version 2.0 (the "License"); you may not use this file except in
|
||||
%% compliance with the License. You may obtain a copy of the License
|
||||
%% at https://www.mozilla.org/en-US/MPL/2.0/
|
||||
%%
|
||||
%% Software distributed under the License is distributed on an "AS IS"
|
||||
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
||||
%% the License for the specific language governing rights and
|
||||
%% limitations under the License.
|
||||
%%
|
||||
%% The Original Code is RabbitMQ.
|
||||
%%
|
||||
%% The Initial Developer of the Original Code is Pivotal Software, Inc.
|
||||
%% Copyright (c) 2021 VMware, Inc. or its affiliates. All rights reserved.
|
||||
%%
|
||||
|
||||
-module(rabbit_stream_prometheus).
|
||||
|
||||
-behaviour(application).
|
||||
|
||||
-export([start/2]).
|
||||
-export([stop/1]).
|
||||
|
||||
-behaviour(supervisor).
|
||||
|
||||
-export([init/1]).
|
||||
|
||||
start(_Type, _Args) ->
|
||||
prometheus_registry:register_collectors([prometheus_rabbitmq_stream_collector]),
|
||||
prometheus_registry:register_collectors('per-object',
|
||||
[prometheus_rabbitmq_stream_collector]),
|
||||
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
|
||||
|
||||
stop(_State) ->
|
||||
ok.
|
||||
|
||||
init([]) ->
|
||||
{ok, {{one_for_one, 3, 10}, []}}.
|
|
@ -0,0 +1,72 @@
|
|||
%% This Source Code Form is subject to the terms of the Mozilla Public
|
||||
%% License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
%%
|
||||
%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved.
|
||||
%%
|
||||
|
||||
-module(prometheus_http_SUITE).
|
||||
|
||||
-compile(export_all).
|
||||
|
||||
all() ->
|
||||
[{group, non_parallel_tests}].
|
||||
|
||||
groups() ->
|
||||
[{non_parallel_tests, [], [stream_prometheus]}].
|
||||
|
||||
%% -------------------------------------------------------------------
|
||||
%% Testsuite setup/teardown.
|
||||
%% -------------------------------------------------------------------
|
||||
|
||||
init_per_suite(Config) ->
|
||||
rabbit_ct_helpers:log_environment(),
|
||||
Config1 =
|
||||
rabbit_ct_helpers:set_config(Config,
|
||||
[{rmq_nodename_suffix, ?MODULE}]),
|
||||
rabbit_ct_helpers:run_setup_steps(Config1,
|
||||
[fun(StepConfig) ->
|
||||
rabbit_ct_helpers:merge_app_env(StepConfig,
|
||||
{rabbit,
|
||||
[{collect_statistics_interval,
|
||||
500}]})
|
||||
end]
|
||||
++ rabbit_ct_broker_helpers:setup_steps()
|
||||
++ rabbit_ct_client_helpers:setup_steps()).
|
||||
|
||||
end_per_suite(Config) ->
|
||||
rabbit_ct_helpers:run_teardown_steps(Config,
|
||||
rabbit_ct_client_helpers:teardown_steps()
|
||||
++ rabbit_ct_broker_helpers:teardown_steps()).
|
||||
|
||||
init_per_group(_, Config) ->
|
||||
Config.
|
||||
|
||||
end_per_group(_, Config) ->
|
||||
Config.
|
||||
|
||||
init_per_testcase(Testcase, Config) ->
|
||||
rabbit_ct_helpers:testcase_started(Config, Testcase).
|
||||
|
||||
end_per_testcase(Testcase, Config) ->
|
||||
rabbit_ct_helpers:testcase_finished(Config, Testcase).
|
||||
|
||||
%% -------------------------------------------------------------------
|
||||
%% Testcases.
|
||||
%% -------------------------------------------------------------------
|
||||
|
||||
stream_prometheus(Config) ->
|
||||
StreamPortNode = get_stream_port(Config),
|
||||
PrometheusPortNode = get_prometheus_port(Config),
|
||||
DataDir = rabbit_ct_helpers:get_config(Config, data_dir),
|
||||
MakeResult =
|
||||
rabbit_ct_helpers:make(Config, DataDir,
|
||||
["tests", {"STREAM_PORT=~b", [StreamPortNode]},
|
||||
{"PROMETHEUS_PORT=~b", [PrometheusPortNode]}]),
|
||||
{ok, _} = MakeResult.
|
||||
|
||||
get_stream_port(Config) ->
|
||||
rabbit_ct_broker_helpers:get_node_config(Config, 0, tcp_port_stream).
|
||||
|
||||
get_prometheus_port(Config) ->
|
||||
proplists:get_value(prometheus_port, Config, 15692).
|
|
@ -0,0 +1,3 @@
|
|||
/build/
|
||||
/lib/
|
||||
/target/
|
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* Copyright 2007-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import java.net.*;
|
||||
import java.io.*;
|
||||
import java.nio.channels.*;
|
||||
import java.util.Properties;
|
||||
|
||||
public class MavenWrapperDownloader {
|
||||
|
||||
private static final String WRAPPER_VERSION = "0.5.6";
|
||||
/**
|
||||
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
|
||||
*/
|
||||
private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
|
||||
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
|
||||
|
||||
/**
|
||||
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
|
||||
* use instead of the default one.
|
||||
*/
|
||||
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
|
||||
".mvn/wrapper/maven-wrapper.properties";
|
||||
|
||||
/**
|
||||
* Path where the maven-wrapper.jar will be saved to.
|
||||
*/
|
||||
private static final String MAVEN_WRAPPER_JAR_PATH =
|
||||
".mvn/wrapper/maven-wrapper.jar";
|
||||
|
||||
/**
|
||||
* Name of the property which should be used to override the default download url for the wrapper.
|
||||
*/
|
||||
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
|
||||
|
||||
public static void main(String args[]) {
|
||||
System.out.println("- Downloader started");
|
||||
File baseDirectory = new File(args[0]);
|
||||
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
|
||||
|
||||
// If the maven-wrapper.properties exists, read it and check if it contains a custom
|
||||
// wrapperUrl parameter.
|
||||
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
|
||||
String url = DEFAULT_DOWNLOAD_URL;
|
||||
if(mavenWrapperPropertyFile.exists()) {
|
||||
FileInputStream mavenWrapperPropertyFileInputStream = null;
|
||||
try {
|
||||
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
|
||||
Properties mavenWrapperProperties = new Properties();
|
||||
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
|
||||
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
|
||||
} catch (IOException e) {
|
||||
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
|
||||
} finally {
|
||||
try {
|
||||
if(mavenWrapperPropertyFileInputStream != null) {
|
||||
mavenWrapperPropertyFileInputStream.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// Ignore ...
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println("- Downloading from: " + url);
|
||||
|
||||
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
|
||||
if(!outputFile.getParentFile().exists()) {
|
||||
if(!outputFile.getParentFile().mkdirs()) {
|
||||
System.out.println(
|
||||
"- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
|
||||
}
|
||||
}
|
||||
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
|
||||
try {
|
||||
downloadFileFromURL(url, outputFile);
|
||||
System.out.println("Done");
|
||||
System.exit(0);
|
||||
} catch (Throwable e) {
|
||||
System.out.println("- Error downloading");
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
|
||||
if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
|
||||
String username = System.getenv("MVNW_USERNAME");
|
||||
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
|
||||
Authenticator.setDefault(new Authenticator() {
|
||||
@Override
|
||||
protected PasswordAuthentication getPasswordAuthentication() {
|
||||
return new PasswordAuthentication(username, password);
|
||||
}
|
||||
});
|
||||
}
|
||||
URL website = new URL(urlString);
|
||||
ReadableByteChannel rbc;
|
||||
rbc = Channels.newChannel(website.openStream());
|
||||
FileOutputStream fos = new FileOutputStream(destination);
|
||||
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
|
||||
fos.close();
|
||||
rbc.close();
|
||||
}
|
||||
|
||||
}
|
BIN
deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/maven-wrapper.jar
vendored
Normal file
BIN
deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/maven-wrapper.jar
vendored
Normal file
Binary file not shown.
|
@ -0,0 +1,2 @@
|
|||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
|
||||
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
|
6
deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/wrapper.iml
vendored
Normal file
6
deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/wrapper.iml
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="4">
|
||||
<component name="MavenCustomPomFilePath">
|
||||
<option name="mavenPomFileUrl" value="file://$MODULE_DIR$/maven-wrapper.properties" />
|
||||
</component>
|
||||
</module>
|
|
@ -0,0 +1,14 @@
|
|||
export PATH :=$(CURDIR):$(PATH)
|
||||
HOSTNAME := $(shell hostname)
|
||||
MVN_FLAGS += -Dstream.port=$(STREAM_PORT) \
|
||||
-Dprometheus.port=$(PROMETHEUS_PORT)
|
||||
|
||||
.PHONY: tests clean
|
||||
|
||||
tests:
|
||||
# Note: to run a single test
|
||||
# @mvnw -q $(MVN_FLAGS) -Dtest=StreamTest#metadataOnClusterShouldReturnLeaderAndReplicas test
|
||||
@mvnw -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B $(MVN_FLAGS) test
|
||||
|
||||
clean:
|
||||
@mvnw clean
|
|
@ -0,0 +1,310 @@
|
|||
#!/bin/sh
|
||||
# ----------------------------------------------------------------------------
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Maven Start Up Batch script
|
||||
#
|
||||
# Required ENV vars:
|
||||
# ------------------
|
||||
# JAVA_HOME - location of a JDK home dir
|
||||
#
|
||||
# Optional ENV vars
|
||||
# -----------------
|
||||
# M2_HOME - location of maven2's installed home dir
|
||||
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||
# e.g. to debug Maven itself, use
|
||||
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
if [ -z "$MAVEN_SKIP_RC" ] ; then
|
||||
|
||||
if [ -f /etc/mavenrc ] ; then
|
||||
. /etc/mavenrc
|
||||
fi
|
||||
|
||||
if [ -f "$HOME/.mavenrc" ] ; then
|
||||
. "$HOME/.mavenrc"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# OS specific support. $var _must_ be set to either true or false.
|
||||
cygwin=false;
|
||||
darwin=false;
|
||||
mingw=false
|
||||
case "`uname`" in
|
||||
CYGWIN*) cygwin=true ;;
|
||||
MINGW*) mingw=true;;
|
||||
Darwin*) darwin=true
|
||||
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
|
||||
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
|
||||
if [ -z "$JAVA_HOME" ]; then
|
||||
if [ -x "/usr/libexec/java_home" ]; then
|
||||
export JAVA_HOME="`/usr/libexec/java_home`"
|
||||
else
|
||||
export JAVA_HOME="/Library/Java/Home"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then
|
||||
if [ -r /etc/gentoo-release ] ; then
|
||||
JAVA_HOME=`java-config --jre-home`
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$M2_HOME" ] ; then
|
||||
## resolve links - $0 may be a link to maven's home
|
||||
PRG="$0"
|
||||
|
||||
# need this for relative symlinks
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG="`dirname "$PRG"`/$link"
|
||||
fi
|
||||
done
|
||||
|
||||
saveddir=`pwd`
|
||||
|
||||
M2_HOME=`dirname "$PRG"`/..
|
||||
|
||||
# make it fully qualified
|
||||
M2_HOME=`cd "$M2_HOME" && pwd`
|
||||
|
||||
cd "$saveddir"
|
||||
# echo Using m2 at $M2_HOME
|
||||
fi
|
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched
|
||||
if $cygwin ; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME=`cygpath --unix "$M2_HOME"`
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||
[ -n "$CLASSPATH" ] &&
|
||||
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
|
||||
fi
|
||||
|
||||
# For Mingw, ensure paths are in UNIX format before anything is touched
|
||||
if $mingw ; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME="`(cd "$M2_HOME"; pwd)`"
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
|
||||
fi
|
||||
|
||||
if [ -z "$JAVA_HOME" ]; then
|
||||
javaExecutable="`which javac`"
|
||||
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
|
||||
# readlink(1) is not available as standard on Solaris 10.
|
||||
readLink=`which readlink`
|
||||
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
|
||||
if $darwin ; then
|
||||
javaHome="`dirname \"$javaExecutable\"`"
|
||||
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
|
||||
else
|
||||
javaExecutable="`readlink -f \"$javaExecutable\"`"
|
||||
fi
|
||||
javaHome="`dirname \"$javaExecutable\"`"
|
||||
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
|
||||
JAVA_HOME="$javaHome"
|
||||
export JAVA_HOME
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$JAVACMD" ] ; then
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
else
|
||||
JAVACMD="`which java`"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
echo "Error: JAVA_HOME is not defined correctly." >&2
|
||||
echo " We cannot execute $JAVACMD" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then
|
||||
echo "Warning: JAVA_HOME environment variable is not set."
|
||||
fi
|
||||
|
||||
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
|
||||
|
||||
# traverses directory structure from process work directory to filesystem root
|
||||
# first directory with .mvn subdirectory is considered project base directory
|
||||
find_maven_basedir() {
|
||||
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
echo "Path not specified to find_maven_basedir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
basedir="$1"
|
||||
wdir="$1"
|
||||
while [ "$wdir" != '/' ] ; do
|
||||
if [ -d "$wdir"/.mvn ] ; then
|
||||
basedir=$wdir
|
||||
break
|
||||
fi
|
||||
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
|
||||
if [ -d "${wdir}" ]; then
|
||||
wdir=`cd "$wdir/.."; pwd`
|
||||
fi
|
||||
# end of workaround
|
||||
done
|
||||
echo "${basedir}"
|
||||
}
|
||||
|
||||
# concatenates all lines of a file
|
||||
concat_lines() {
|
||||
if [ -f "$1" ]; then
|
||||
echo "$(tr -s '\n' ' ' < "$1")"
|
||||
fi
|
||||
}
|
||||
|
||||
BASE_DIR=`find_maven_basedir "$(pwd)"`
|
||||
if [ -z "$BASE_DIR" ]; then
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
##########################################################################################
|
||||
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
# This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
##########################################################################################
|
||||
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found .mvn/wrapper/maven-wrapper.jar"
|
||||
fi
|
||||
else
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
|
||||
fi
|
||||
if [ -n "$MVNW_REPOURL" ]; then
|
||||
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
|
||||
else
|
||||
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
|
||||
fi
|
||||
while IFS="=" read key value; do
|
||||
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
|
||||
esac
|
||||
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Downloading from: $jarUrl"
|
||||
fi
|
||||
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
|
||||
if $cygwin; then
|
||||
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
|
||||
fi
|
||||
|
||||
if command -v wget > /dev/null; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found wget ... using wget"
|
||||
fi
|
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||
wget "$jarUrl" -O "$wrapperJarPath"
|
||||
else
|
||||
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
|
||||
fi
|
||||
elif command -v curl > /dev/null; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found curl ... using curl"
|
||||
fi
|
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||
curl -o "$wrapperJarPath" "$jarUrl" -f
|
||||
else
|
||||
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
|
||||
fi
|
||||
|
||||
else
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Falling back to using Java to download"
|
||||
fi
|
||||
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
|
||||
# For Cygwin, switch paths to Windows format before running javac
|
||||
if $cygwin; then
|
||||
javaClass=`cygpath --path --windows "$javaClass"`
|
||||
fi
|
||||
if [ -e "$javaClass" ]; then
|
||||
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo " - Compiling MavenWrapperDownloader.java ..."
|
||||
fi
|
||||
# Compiling the Java class
|
||||
("$JAVA_HOME/bin/javac" "$javaClass")
|
||||
fi
|
||||
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||
# Running the downloader
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo " - Running MavenWrapperDownloader.java ..."
|
||||
fi
|
||||
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
##########################################################################################
|
||||
# End of extension
|
||||
##########################################################################################
|
||||
|
||||
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo $MAVEN_PROJECTBASEDIR
|
||||
fi
|
||||
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME=`cygpath --path --windows "$M2_HOME"`
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
|
||||
[ -n "$CLASSPATH" ] &&
|
||||
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
|
||||
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
|
||||
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
|
||||
fi
|
||||
|
||||
# Provide a "standardized" way to retrieve the CLI args that will
|
||||
# work with both Windows and non-Windows executions.
|
||||
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
|
||||
export MAVEN_CMD_LINE_ARGS
|
||||
|
||||
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||
|
||||
exec "$JAVACMD" \
|
||||
$MAVEN_OPTS \
|
||||
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
|
||||
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
|
||||
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
|
|
@ -0,0 +1,182 @@
|
|||
@REM ----------------------------------------------------------------------------
|
||||
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||
@REM or more contributor license agreements. See the NOTICE file
|
||||
@REM distributed with this work for additional information
|
||||
@REM regarding copyright ownership. The ASF licenses this file
|
||||
@REM to you under the Apache License, Version 2.0 (the
|
||||
@REM "License"); you may not use this file except in compliance
|
||||
@REM with the License. You may obtain a copy of the License at
|
||||
@REM
|
||||
@REM http://www.apache.org/licenses/LICENSE-2.0
|
||||
@REM
|
||||
@REM Unless required by applicable law or agreed to in writing,
|
||||
@REM software distributed under the License is distributed on an
|
||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
@REM KIND, either express or implied. See the License for the
|
||||
@REM specific language governing permissions and limitations
|
||||
@REM under the License.
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Maven Start Up Batch script
|
||||
@REM
|
||||
@REM Required ENV vars:
|
||||
@REM JAVA_HOME - location of a JDK home dir
|
||||
@REM
|
||||
@REM Optional ENV vars
|
||||
@REM M2_HOME - location of maven2's installed home dir
|
||||
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
|
||||
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
|
||||
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||
@REM e.g. to debug Maven itself, use
|
||||
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
|
||||
@echo off
|
||||
@REM set title of command window
|
||||
title %0
|
||||
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
|
||||
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
|
||||
|
||||
@REM set %HOME% to equivalent of $HOME
|
||||
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
|
||||
|
||||
@REM Execute a user defined script before this one
|
||||
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
|
||||
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
|
||||
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
|
||||
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
|
||||
:skipRcPre
|
||||
|
||||
@setlocal
|
||||
|
||||
set ERROR_CODE=0
|
||||
|
||||
@REM To isolate internal variables from possible post scripts, we use another setlocal
|
||||
@setlocal
|
||||
|
||||
@REM ==== START VALIDATION ====
|
||||
if not "%JAVA_HOME%" == "" goto OkJHome
|
||||
|
||||
echo.
|
||||
echo Error: JAVA_HOME not found in your environment. >&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||
echo location of your Java installation. >&2
|
||||
echo.
|
||||
goto error
|
||||
|
||||
:OkJHome
|
||||
if exist "%JAVA_HOME%\bin\java.exe" goto init
|
||||
|
||||
echo.
|
||||
echo Error: JAVA_HOME is set to an invalid directory. >&2
|
||||
echo JAVA_HOME = "%JAVA_HOME%" >&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||
echo location of your Java installation. >&2
|
||||
echo.
|
||||
goto error
|
||||
|
||||
@REM ==== END VALIDATION ====
|
||||
|
||||
:init
|
||||
|
||||
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
|
||||
@REM Fallback to current working directory if not found.
|
||||
|
||||
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
|
||||
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
|
||||
|
||||
set EXEC_DIR=%CD%
|
||||
set WDIR=%EXEC_DIR%
|
||||
:findBaseDir
|
||||
IF EXIST "%WDIR%"\.mvn goto baseDirFound
|
||||
cd ..
|
||||
IF "%WDIR%"=="%CD%" goto baseDirNotFound
|
||||
set WDIR=%CD%
|
||||
goto findBaseDir
|
||||
|
||||
:baseDirFound
|
||||
set MAVEN_PROJECTBASEDIR=%WDIR%
|
||||
cd "%EXEC_DIR%"
|
||||
goto endDetectBaseDir
|
||||
|
||||
:baseDirNotFound
|
||||
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
|
||||
cd "%EXEC_DIR%"
|
||||
|
||||
:endDetectBaseDir
|
||||
|
||||
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
|
||||
|
||||
@setlocal EnableExtensions EnableDelayedExpansion
|
||||
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
|
||||
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
|
||||
|
||||
:endReadAdditionalConfig
|
||||
|
||||
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
|
||||
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
|
||||
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||
|
||||
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
|
||||
|
||||
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
|
||||
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
|
||||
)
|
||||
|
||||
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
if exist %WRAPPER_JAR% (
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Found %WRAPPER_JAR%
|
||||
)
|
||||
) else (
|
||||
if not "%MVNW_REPOURL%" == "" (
|
||||
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
|
||||
)
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Couldn't find %WRAPPER_JAR%, downloading it ...
|
||||
echo Downloading from: %DOWNLOAD_URL%
|
||||
)
|
||||
|
||||
powershell -Command "&{"^
|
||||
"$webclient = new-object System.Net.WebClient;"^
|
||||
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
|
||||
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
|
||||
"}"^
|
||||
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
|
||||
"}"
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Finished downloading %WRAPPER_JAR%
|
||||
)
|
||||
)
|
||||
@REM End of extension
|
||||
|
||||
@REM Provide a "standardized" way to retrieve the CLI args that will
|
||||
@REM work with both Windows and non-Windows executions.
|
||||
set MAVEN_CMD_LINE_ARGS=%*
|
||||
|
||||
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
|
||||
if ERRORLEVEL 1 goto error
|
||||
goto end
|
||||
|
||||
:error
|
||||
set ERROR_CODE=1
|
||||
|
||||
:end
|
||||
@endlocal & set ERROR_CODE=%ERROR_CODE%
|
||||
|
||||
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
|
||||
@REM check for post script, once with legacy .bat ending and once with .cmd ending
|
||||
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
|
||||
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
|
||||
:skipRcPost
|
||||
|
||||
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
|
||||
if "%MAVEN_BATCH_PAUSE%" == "on" pause
|
||||
|
||||
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
|
||||
|
||||
exit /B %ERROR_CODE%
|
|
@ -0,0 +1,143 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.rabbitmq.stream</groupId>
|
||||
<artifactId>rabbitmq-stream-prometheus-tests</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>MPL 2.0</name>
|
||||
<url>https://www.mozilla.org/en-US/MPL/2.0/</url>
|
||||
<distribution>repo</distribution>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<email>info@rabbitmq.com</email>
|
||||
<name>Team RabbitMQ</name>
|
||||
<organization>VMware, Inc. or its affiliates.</organization>
|
||||
<organizationUrl>https://rabbitmq.com</organizationUrl>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<properties>
|
||||
<stream-client.version>0.1.0-SNAPSHOT</stream-client.version>
|
||||
<proton-j.version>0.33.7</proton-j.version>
|
||||
<junit.jupiter.version>5.7.0</junit.jupiter.version>
|
||||
<assertj.version>3.18.1</assertj.version>
|
||||
<okhttp.version>4.9.0</okhttp.version>
|
||||
<logback.version>1.2.3</logback.version>
|
||||
<maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
|
||||
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
|
||||
<spotless.version>2.2.0</spotless.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.rabbitmq</groupId>
|
||||
<artifactId>stream-client</artifactId>
|
||||
<version>${stream-client.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.qpid</groupId>
|
||||
<artifactId>proton-j</artifactId>
|
||||
<version>${proton-j.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-engine</artifactId>
|
||||
<version>${junit.jupiter.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-params</artifactId>
|
||||
<version>${junit.jupiter.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.assertj</groupId>
|
||||
<artifactId>assertj-core</artifactId>
|
||||
<version>${assertj.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>okhttp</artifactId>
|
||||
<version>${okhttp.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<version>${logback.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
<plugins>
|
||||
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>${maven.compiler.plugin.version}</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
<compilerArgs>
|
||||
<arg>-Xlint:deprecation</arg>
|
||||
<arg>-Xlint:unchecked</arg>
|
||||
</compilerArgs>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${maven-surefire-plugin.version}</version>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>com.diffplug.spotless</groupId>
|
||||
<artifactId>spotless-maven-plugin</artifactId>
|
||||
<version>${spotless.version}</version>
|
||||
<configuration>
|
||||
<java>
|
||||
<googleJavaFormat>
|
||||
<version>1.9</version>
|
||||
<style>GOOGLE</style>
|
||||
</googleJavaFormat>
|
||||
</java>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
|
||||
</build>
|
||||
|
||||
<repositories>
|
||||
|
||||
<repository>
|
||||
<id>ossrh</id>
|
||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||
<snapshots><enabled>true</enabled></snapshots>
|
||||
<releases><enabled>false</enabled></releases>
|
||||
</repository>
|
||||
|
||||
</repositories>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,211 @@
|
|||
// The contents of this file are subject to the Mozilla Public License
|
||||
// Version 2.0 (the "License"); you may not use this file except in
|
||||
// compliance with the License. You may obtain a copy of the License
|
||||
// at https://www.mozilla.org/en-US/MPL/2.0/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS"
|
||||
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
||||
// the License for the specific language governing rights and
|
||||
// limitations under the License.
|
||||
//
|
||||
// The Original Code is RabbitMQ.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Pivotal Software, Inc.
|
||||
// Copyright (c) 2021 VMware, Inc. or its affiliates. All rights reserved.
|
||||
//
|
||||
|
||||
package com.rabbitmq.stream;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
public class MetricsUtils {
|
||||
|
||||
static final String METRIC_PREFIX = "rabbitmq_stream_";
|
||||
static final String METRIC_PUBLISHERS = "publishers";
|
||||
static final String METRIC_PUBLISHERS_PUBLISHED = "publishers_messages_published_total";
|
||||
static final String METRIC_PUBLISHERS_CONFIRMED = "publishers_messages_confirmed_total";
|
||||
static final String METRIC_PUBLISHERS_ERRORED = "publishers_messages_errored_total";
|
||||
static final String METRIC_CONSUMERS = "consumers";
|
||||
static final String METRIC_CONSUMERS_CONSUMED = "consumers_messages_consumed_total";
|
||||
static final List<String> METRICS =
|
||||
Collections.unmodifiableList(
|
||||
Arrays.asList(
|
||||
METRIC_PUBLISHERS,
|
||||
METRIC_PUBLISHERS_PUBLISHED,
|
||||
METRIC_PUBLISHERS_CONFIRMED,
|
||||
METRIC_PUBLISHERS_ERRORED,
|
||||
METRIC_CONSUMERS,
|
||||
METRIC_CONSUMERS_CONSUMED));
|
||||
|
||||
static Metrics parseMetrics(String content) throws IOException {
|
||||
Metrics metrics = new Metrics();
|
||||
try (BufferedReader reader = new BufferedReader(new StringReader(content))) {
|
||||
String line;
|
||||
String type = null, name = null;
|
||||
Metric metric = null;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if (line.trim().isEmpty()
|
||||
|| !line.contains(METRIC_PREFIX)
|
||||
|| line.contains("ct_rabbitmq_stream_prometheus")) {
|
||||
// empty line, non-stream metrics,
|
||||
// or line containing the name of the erlang node, which is the name of the test suite
|
||||
// the latter shows up in some metrics
|
||||
continue;
|
||||
}
|
||||
if (line.startsWith("# TYPE ")) {
|
||||
String[] nameType = line.replace("# TYPE ", "").split(" ");
|
||||
name = nameType[0];
|
||||
type = nameType[1];
|
||||
} else if (line.startsWith("# HELP ")) {
|
||||
String help = line.replace("# HELP ", "").replace(name + " ", "");
|
||||
metric = new Metric(name, type, help);
|
||||
metrics.add(metric);
|
||||
} else if (line.startsWith(name)) {
|
||||
Map<String, String> labels = Collections.emptyMap();
|
||||
if (line.contains("{")) {
|
||||
String l = line.substring(line.indexOf("{") + 1, line.indexOf("}"));
|
||||
labels =
|
||||
Arrays.stream(l.split(","))
|
||||
.map(label -> label.trim().split("="))
|
||||
.collect(
|
||||
() -> new HashMap<>(),
|
||||
(acc, keyValue) -> acc.put(keyValue[0], keyValue[1].replace("\"", "")),
|
||||
(BiConsumer<Map<String, String>, Map<String, String>>)
|
||||
(stringStringHashMap, stringStringHashMap2) ->
|
||||
stringStringHashMap.putAll(stringStringHashMap2));
|
||||
}
|
||||
int value;
|
||||
try {
|
||||
value = Integer.valueOf(line.split(" ")[1]);
|
||||
} catch (NumberFormatException e) {
|
||||
value = 0;
|
||||
}
|
||||
metric.add(new MetricValue(value, labels));
|
||||
} else {
|
||||
throw new IllegalStateException("Cannot parse line: " + line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return metrics;
|
||||
}
|
||||
|
||||
static class MetricValue {
|
||||
|
||||
final int value;
|
||||
final Map<String, String> labels;
|
||||
|
||||
MetricValue(int value, Map<String, String> labels) {
|
||||
this.value = value;
|
||||
this.labels = labels == null ? Collections.emptyMap() : labels;
|
||||
}
|
||||
|
||||
public int value() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MetricValue{" + "value=" + value + ", labels=" + labels + '}';
|
||||
}
|
||||
}
|
||||
|
||||
static class Metric {
|
||||
|
||||
final String name;
|
||||
final String type;
|
||||
final String help;
|
||||
final List<MetricValue> values = new ArrayList<>();
|
||||
|
||||
Metric(String name, String type, String help) {
|
||||
this.name = name.replace(METRIC_PREFIX, "");
|
||||
this.type = type;
|
||||
this.help = help;
|
||||
}
|
||||
|
||||
void add(MetricValue value) {
|
||||
values.add(value);
|
||||
}
|
||||
|
||||
boolean isGauge() {
|
||||
return "gauge".equals(type);
|
||||
}
|
||||
|
||||
boolean isCounter() {
|
||||
return "counter".equals(type);
|
||||
}
|
||||
|
||||
int value() {
|
||||
if (values.size() != 1) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
return values.get(0).value;
|
||||
}
|
||||
|
||||
public List<MetricValue> values() {
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
Metric metric = (Metric) o;
|
||||
return name.equals(metric.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Metric{"
|
||||
+ "name='"
|
||||
+ name
|
||||
+ '\''
|
||||
+ ", type='"
|
||||
+ type
|
||||
+ '\''
|
||||
+ ", help='"
|
||||
+ help
|
||||
+ '\''
|
||||
+ ", values="
|
||||
+ values
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
|
||||
static class Metrics {
|
||||
|
||||
final Map<String, Metric> metrics = new HashMap<>();
|
||||
|
||||
void add(Metric metric) {
|
||||
this.metrics.put(metric.name, metric);
|
||||
}
|
||||
|
||||
Metric get(String name) {
|
||||
return metrics.get(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Metrics{" + "metrics=" + metrics + '}';
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,288 @@
|
|||
// The contents of this file are subject to the Mozilla Public License
|
||||
// Version 2.0 (the "License"); you may not use this file except in
|
||||
// compliance with the License. You may obtain a copy of the License
|
||||
// at https://www.mozilla.org/en-US/MPL/2.0/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS"
|
||||
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
||||
// the License for the specific language governing rights and
|
||||
// limitations under the License.
|
||||
//
|
||||
// The Original Code is RabbitMQ.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Pivotal Software, Inc.
|
||||
// Copyright (c) 2021 VMware, Inc. or its affiliates. All rights reserved.
|
||||
//
|
||||
|
||||
package com.rabbitmq.stream;
|
||||
|
||||
import static com.rabbitmq.stream.MetricsUtils.*;
|
||||
import static com.rabbitmq.stream.MetricsUtils.parseMetrics;
|
||||
import static com.rabbitmq.stream.TestUtils.*;
|
||||
import static com.rabbitmq.stream.TestUtils.waitUntil;
|
||||
import static java.util.stream.Collectors.toList;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.condition.AllOf.allOf;
|
||||
|
||||
import com.rabbitmq.stream.MetricsUtils.Metrics;
|
||||
import com.rabbitmq.stream.TestUtils.CallableSupplier;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestInfo;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.CsvSource;
|
||||
|
||||
public class PrometheusHttpTest {
|
||||
|
||||
static OkHttpClient httpClient = new OkHttpClient.Builder().build();
|
||||
|
||||
static String get(String endpoint) throws IOException {
|
||||
return get(httpClient, endpoint);
|
||||
}
|
||||
|
||||
static String get(OkHttpClient client, String endpoint) throws IOException {
|
||||
Request request = new Request.Builder().url(url(endpoint)).build();
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
|
||||
|
||||
ResponseBody body = response.body();
|
||||
return body == null ? "" : body.string();
|
||||
}
|
||||
}
|
||||
|
||||
static String url(String endpoint) {
|
||||
return "http://localhost:" + TestUtils.prometheusPort() + "/metrics" + endpoint;
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@CsvSource({
|
||||
METRIC_PUBLISHERS + ",true",
|
||||
METRIC_PUBLISHERS_PUBLISHED + ",false",
|
||||
METRIC_PUBLISHERS_CONFIRMED + ",false",
|
||||
METRIC_PUBLISHERS_ERRORED + ",false",
|
||||
METRIC_CONSUMERS + ",true",
|
||||
METRIC_CONSUMERS_CONSUMED + ",false"
|
||||
})
|
||||
void aggregatedMetricsWithNoConnectionShouldReturnZero(String name, boolean isGauge)
|
||||
throws Exception {
|
||||
Metrics metrics = metrics();
|
||||
assertThat(metrics.metrics).hasSameSizeAs(METRICS);
|
||||
Metric metric = metrics.get(name);
|
||||
assertThat(metric).isNotNull().has(help()).is(zero()).is(isGauge ? gauge() : counter());
|
||||
}
|
||||
|
||||
@Test
|
||||
void perObjectMetricsWithNoConnectionShouldReturnNoValue() throws Exception {
|
||||
Metrics metrics = metricsPerObject();
|
||||
METRICS.forEach(
|
||||
name -> {
|
||||
Metric metric = metrics.get(name);
|
||||
if (METRIC_PUBLISHERS.equals(name) || METRIC_CONSUMERS.equals(name)) {
|
||||
assertThat(metric).isNull();
|
||||
} else {
|
||||
assertThat(metric).isNotNull().has(noValue());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void aggregatedMetricsWithPublishersAndConsumersShouldReturnCorrectCounts(TestInfo info)
|
||||
throws Exception {
|
||||
List<String> streams =
|
||||
IntStream.range(0, 5).mapToObj(i -> TestUtils.streamName(info)).collect(toList());
|
||||
int producersCount = streams.size();
|
||||
int consumersCount = streams.size() * 2;
|
||||
int messagesByProducer = 10_000;
|
||||
int messageCount = producersCount * messagesByProducer;
|
||||
|
||||
Environment env = Environment.builder().port(TestUtils.streamPort()).build();
|
||||
List<Producer> producers = Collections.emptyList();
|
||||
List<Consumer> consumers = Collections.emptyList();
|
||||
CallableSupplier<Metrics> metricsCall = () -> metrics();
|
||||
try {
|
||||
streams.forEach(stream -> env.streamCreator().stream(stream).create());
|
||||
|
||||
producers =
|
||||
IntStream.range(0, producersCount)
|
||||
.mapToObj(i -> env.producerBuilder().stream(streams.get(i % streams.size())).build())
|
||||
.collect(toList());
|
||||
|
||||
waitUntil(() -> metricsCall.get().get(METRIC_PUBLISHERS).value() == producersCount);
|
||||
|
||||
CountDownLatch confirmedLatch = new CountDownLatch(messageCount);
|
||||
ConfirmationHandler confirmationHandler = status -> confirmedLatch.countDown();
|
||||
producers.forEach(
|
||||
producer -> {
|
||||
IntStream.range(0, messagesByProducer)
|
||||
.forEach(
|
||||
i ->
|
||||
producer.send(
|
||||
producer.messageBuilder().addData("".getBytes()).build(),
|
||||
confirmationHandler));
|
||||
});
|
||||
|
||||
assertThat(confirmedLatch.await(10, TimeUnit.SECONDS)).isTrue();
|
||||
|
||||
waitUntil(() -> metricsCall.get().get(METRIC_PUBLISHERS_CONFIRMED).value() == messageCount);
|
||||
|
||||
Metrics metrics = metricsCall.get();
|
||||
assertThat(metrics.get(METRIC_PUBLISHERS_PUBLISHED)).has(value(messageCount));
|
||||
assertThat(metrics.get(METRIC_PUBLISHERS_CONFIRMED)).has(value(messageCount));
|
||||
assertThat(metrics.get(METRIC_PUBLISHERS_ERRORED)).is(zero());
|
||||
assertThat(metrics.get(METRIC_CONSUMERS)).is(zero());
|
||||
assertThat(metrics.get(METRIC_CONSUMERS_CONSUMED)).is(zero());
|
||||
|
||||
int consumedMessageCount = consumersCount * messagesByProducer;
|
||||
CountDownLatch consumedLatch = new CountDownLatch(consumedMessageCount);
|
||||
consumers =
|
||||
IntStream.range(0, consumersCount)
|
||||
.mapToObj(
|
||||
i ->
|
||||
env.consumerBuilder().stream(streams.get(i % streams.size()))
|
||||
.messageHandler((ctx, msg) -> consumedLatch.countDown())
|
||||
.build())
|
||||
.collect(toList());
|
||||
|
||||
assertThat(consumedLatch.await(10, TimeUnit.SECONDS)).isTrue();
|
||||
|
||||
waitUntil(
|
||||
() -> metricsCall.get().get(METRIC_CONSUMERS_CONSUMED).value() == consumedMessageCount);
|
||||
|
||||
metrics = metricsCall.get();
|
||||
assertThat(metrics.get(METRIC_CONSUMERS)).has(value(consumersCount));
|
||||
assertThat(metrics.get(METRIC_CONSUMERS_CONSUMED)).has(value(consumedMessageCount));
|
||||
|
||||
} finally {
|
||||
producers.forEach(producer -> producer.close());
|
||||
consumers.forEach(consumer -> consumer.close());
|
||||
streams.forEach(stream -> env.deleteStream(stream));
|
||||
env.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void perObjectMetricsWithPublishersAndConsumersShouldReturnCorrectCounts(TestInfo info)
|
||||
throws Exception {
|
||||
List<String> streams =
|
||||
IntStream.range(0, 5).mapToObj(i -> TestUtils.streamName(info)).collect(toList());
|
||||
int producersCount = streams.size();
|
||||
int consumersCount = streams.size() * 2;
|
||||
int messagesByProducer = 10_000;
|
||||
int messageCount = producersCount * messagesByProducer;
|
||||
|
||||
Environment env = Environment.builder().port(TestUtils.streamPort()).build();
|
||||
List<Producer> producers = Collections.emptyList();
|
||||
List<Consumer> consumers = Collections.emptyList();
|
||||
CallableSupplier<Metrics> metricsCall = () -> metricsPerObject();
|
||||
try {
|
||||
streams.forEach(stream -> env.streamCreator().stream(stream).create());
|
||||
|
||||
producers =
|
||||
IntStream.range(0, producersCount)
|
||||
.mapToObj(i -> env.producerBuilder().stream(streams.get(i % streams.size())).build())
|
||||
.collect(toList());
|
||||
|
||||
CountDownLatch confirmedLatch = new CountDownLatch(messageCount);
|
||||
ConfirmationHandler confirmationHandler = status -> confirmedLatch.countDown();
|
||||
producers.forEach(
|
||||
producer -> {
|
||||
IntStream.range(0, messagesByProducer)
|
||||
.forEach(
|
||||
i ->
|
||||
producer.send(
|
||||
producer.messageBuilder().addData("".getBytes()).build(),
|
||||
confirmationHandler));
|
||||
});
|
||||
|
||||
assertThat(confirmedLatch.await(10, TimeUnit.SECONDS)).isTrue();
|
||||
|
||||
waitUntil(
|
||||
() ->
|
||||
metricsCall.get().get(METRIC_PUBLISHERS_CONFIRMED).values().stream()
|
||||
.mapToInt(MetricValue::value)
|
||||
.sum()
|
||||
== messageCount);
|
||||
|
||||
Metrics metrics = metricsCall.get();
|
||||
assertThat(metrics.get(METRIC_PUBLISHERS)).isNull(); // no counters in per-object
|
||||
assertThat(metrics.get(METRIC_PUBLISHERS_PUBLISHED))
|
||||
.has(valueCount(producersCount))
|
||||
.has(valuesWithLabels("vhost", "queue", "connection", "id"))
|
||||
.has(
|
||||
allOf(
|
||||
streams.stream()
|
||||
.map(s -> value("queue", s, messagesByProducer))
|
||||
.collect(toList())));
|
||||
assertThat(metrics.get(METRIC_PUBLISHERS_CONFIRMED))
|
||||
.has(valueCount(producersCount))
|
||||
.has(valuesWithLabels("vhost", "queue", "connection", "id"))
|
||||
.has(
|
||||
allOf(
|
||||
streams.stream()
|
||||
.map(s -> value("queue", s, messagesByProducer))
|
||||
.collect(toList())));
|
||||
assertThat(metrics.get(METRIC_PUBLISHERS_ERRORED))
|
||||
.has(valueCount(producersCount))
|
||||
.has(valuesWithLabels("vhost", "queue", "connection", "id"))
|
||||
.has(allOf(streams.stream().map(s -> value("queue", s, 0)).collect(toList())));
|
||||
assertThat(metrics.get(METRIC_CONSUMERS)).isNull(); // no counters in per-object
|
||||
assertThat(metrics.get(METRIC_CONSUMERS_CONSUMED)).has(noValue());
|
||||
|
||||
int consumedMessageCount = consumersCount * messagesByProducer;
|
||||
CountDownLatch consumedLatch = new CountDownLatch(consumedMessageCount);
|
||||
consumers =
|
||||
IntStream.range(0, consumersCount)
|
||||
.mapToObj(
|
||||
i ->
|
||||
env.consumerBuilder().stream(streams.get(i % streams.size()))
|
||||
.messageHandler((ctx, msg) -> consumedLatch.countDown())
|
||||
.build())
|
||||
.collect(toList());
|
||||
|
||||
assertThat(consumedLatch.await(10, TimeUnit.SECONDS)).isTrue();
|
||||
|
||||
waitUntil(
|
||||
() ->
|
||||
metricsCall.get().get(METRIC_CONSUMERS_CONSUMED).values().stream()
|
||||
.mapToInt(MetricValue::value)
|
||||
.sum()
|
||||
== consumedMessageCount);
|
||||
|
||||
metrics = metricsCall.get();
|
||||
assertThat(metrics.get(METRIC_CONSUMERS)).isNull(); // no counters in per-object
|
||||
assertThat(metrics.get(METRIC_CONSUMERS_CONSUMED))
|
||||
.has(valueCount(consumersCount))
|
||||
.has(valuesWithLabels("vhost", "queue", "connection", "id"))
|
||||
.has(
|
||||
allOf(
|
||||
streams.stream()
|
||||
.flatMap(s -> Stream.of(s, s))
|
||||
.map(s -> value("queue", s, messagesByProducer))
|
||||
.collect(toList())));
|
||||
|
||||
} finally {
|
||||
producers.forEach(producer -> producer.close());
|
||||
consumers.forEach(consumer -> consumer.close());
|
||||
streams.forEach(stream -> env.deleteStream(stream));
|
||||
env.close();
|
||||
}
|
||||
}
|
||||
|
||||
static Metrics metrics() throws IOException {
|
||||
return parseMetrics(get(""));
|
||||
}
|
||||
|
||||
static Metrics metricsPerObject() throws IOException {
|
||||
return parseMetrics(get("/per-object"));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,138 @@
|
|||
// The contents of this file are subject to the Mozilla Public License
|
||||
// Version 2.0 (the "License"); you may not use this file except in
|
||||
// compliance with the License. You may obtain a copy of the License
|
||||
// at https://www.mozilla.org/en-US/MPL/2.0/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS"
|
||||
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
||||
// the License for the specific language governing rights and
|
||||
// limitations under the License.
|
||||
//
|
||||
// The Original Code is RabbitMQ.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Pivotal Software, Inc.
|
||||
// Copyright (c) 2021 VMware, Inc. or its affiliates. All rights reserved.
|
||||
//
|
||||
|
||||
package com.rabbitmq.stream;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
|
||||
import com.rabbitmq.stream.MetricsUtils.Metric;
|
||||
import java.lang.reflect.Method;
|
||||
import java.time.Duration;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.UUID;
|
||||
import org.assertj.core.api.Condition;
|
||||
import org.junit.jupiter.api.TestInfo;
|
||||
|
||||
public class TestUtils {
|
||||
|
||||
static int streamPort() {
|
||||
String port = System.getProperty("stream.port", "5555");
|
||||
return Integer.valueOf(port);
|
||||
}
|
||||
|
||||
static int prometheusPort() {
|
||||
String port = System.getProperty("prometheus.port", "15692");
|
||||
return Integer.valueOf(port);
|
||||
}
|
||||
|
||||
static void waitUntil(CallableBooleanSupplier condition) throws Exception {
|
||||
waitAtMost(Duration.ofSeconds(10), condition);
|
||||
}
|
||||
|
||||
static void waitAtMost(Duration duration, CallableBooleanSupplier condition) throws Exception {
|
||||
if (condition.getAsBoolean()) {
|
||||
return;
|
||||
}
|
||||
int waitTime = 100;
|
||||
int waitedTime = 0;
|
||||
long timeoutInMs = duration.toMillis();
|
||||
while (waitedTime <= timeoutInMs) {
|
||||
Thread.sleep(waitTime);
|
||||
if (condition.getAsBoolean()) {
|
||||
return;
|
||||
}
|
||||
waitedTime += waitTime;
|
||||
}
|
||||
fail("Waited " + duration.getSeconds() + " second(s), condition never got true");
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
interface CallableBooleanSupplier {
|
||||
boolean getAsBoolean() throws Exception;
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
interface CallableSupplier<T> {
|
||||
T get() throws Exception;
|
||||
}
|
||||
|
||||
static String streamName(TestInfo info) {
|
||||
return streamName(info.getTestClass().get(), info.getTestMethod().get());
|
||||
}
|
||||
|
||||
private static String streamName(Class<?> testClass, Method testMethod) {
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
return String.format(
|
||||
"%s_%s%s",
|
||||
testClass.getSimpleName(), testMethod.getName(), uuid.substring(uuid.length() / 2));
|
||||
}
|
||||
|
||||
static Condition<Metric> gauge() {
|
||||
return new Condition<>(m -> m.isGauge(), "should be a gauge");
|
||||
}
|
||||
|
||||
static Condition<Metric> counter() {
|
||||
return new Condition<>(m -> m.isCounter(), "should be a counter");
|
||||
}
|
||||
|
||||
static Condition<Metric> help() {
|
||||
return new Condition<>(m -> m.help != null, "should have a help description");
|
||||
}
|
||||
|
||||
static Condition<Metric> zero() {
|
||||
return new Condition<>(
|
||||
m -> m.values.size() == 1 && m.values.get(0).value == 0, "should have one metric at 0");
|
||||
}
|
||||
|
||||
static Condition<Metric> noValue() {
|
||||
return new Condition<>(m -> m.values.isEmpty(), "should have no value");
|
||||
}
|
||||
|
||||
static Condition<Metric> value(int expected) {
|
||||
return new Condition<>(m -> m.value() == expected, "should have value " + expected);
|
||||
}
|
||||
|
||||
static Condition<Metric> valueCount(int expected) {
|
||||
return new Condition<>(m -> m.values.size() == expected, "should have " + expected + " values");
|
||||
}
|
||||
|
||||
static Condition<Metric> valuesWithLabels(String... expectedLabels) {
|
||||
Collection<String> expected = Arrays.asList(expectedLabels);
|
||||
return new Condition<>(
|
||||
m ->
|
||||
m.values().stream()
|
||||
.map(v -> v.labels.keySet())
|
||||
.map(labels -> labels.containsAll(expected))
|
||||
.reduce(true, (b1, b2) -> b1 && b2),
|
||||
"should have values with labels " + String.join(",", expected));
|
||||
}
|
||||
|
||||
static Condition<Metric> value(String labelKey, String labelValue, int value) {
|
||||
return new Condition<>(
|
||||
m ->
|
||||
m.values().stream()
|
||||
.filter(v -> v.labels.containsKey(labelKey))
|
||||
.filter(v -> v.labels.get(labelKey).equals(labelValue))
|
||||
.filter(v -> v.value() == value)
|
||||
.count()
|
||||
>= 1,
|
||||
"should have value with %s=%s %d",
|
||||
labelKey,
|
||||
labelValue,
|
||||
value);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
<configuration>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<logger name="com.rabbitmq.stream" level="info" />
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="STDOUT" />
|
||||
</root>
|
||||
</configuration>
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
|
@ -91,6 +91,7 @@ dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(cur
|
|||
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream = git_rmq rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_management = git_rmq rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_stream_prometheus = git_rmq rabbitmq-stream-prometheus $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
|
||||
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
|
||||
|
@ -179,6 +180,7 @@ RABBITMQ_COMPONENTS = amqp_client \
|
|||
rabbitmq_stomp \
|
||||
rabbitmq_stream \
|
||||
rabbitmq_stream_management \
|
||||
rabbitmq_stream_prometheus \
|
||||
rabbitmq_toke \
|
||||
rabbitmq_top \
|
||||
rabbitmq_tracing \
|
||||
|
|
Loading…
Reference in New Issue