diff --git a/BUILD.bazel b/BUILD.bazel index ffdceb358f20..8da8bf3f05c9 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -77,7 +77,6 @@ ALL_PLUGINS = [ "//deps/rabbitmq_stomp:bazel_erlang_lib", "//deps/rabbitmq_stream:bazel_erlang_lib", "//deps/rabbitmq_stream_management:bazel_erlang_lib", - "//deps/rabbitmq_stream_prometheus:bazel_erlang_lib", "//deps/rabbitmq_top:bazel_erlang_lib", "//deps/rabbitmq_tracing:bazel_erlang_lib", "//deps/rabbitmq_trust_store:bazel_erlang_lib", diff --git a/deps/rabbitmq_stream_prometheus/.gitignore b/deps/rabbitmq_stream_prometheus/.gitignore deleted file mode 100644 index 14abe1637474..000000000000 --- a/deps/rabbitmq_stream_prometheus/.gitignore +++ /dev/null @@ -1,56 +0,0 @@ -.eunit -*.o -*.beam -*.plt -erl_crash.dump -.concrete/DEV_MODE - -# rebar 2.x -.rebar -rel/example_project -ebin/*.beam -deps - -# rebar 3 -.rebar3 -_build/ -_checkouts/ - -erl_crash.dump -.sw? -.*.sw? -*.beam -/.erlang.mk/ -/cover/ -/deps/ -/ebin/ -/logs/ -/plugins/ -/xrefr -elvis -callgrind* -ct.coverdata -test/ct.cover.spec -_build - -rabbitmq_stream.d -*.plt -*.d - -*.jar - - -*~ -.sw? -.*.sw? -*.beam -*.class -*.dat -*.dump -*.iml -*.ipr -*.iws -.DS_Store -\#~ -/.idea/ -/deps/ diff --git a/deps/rabbitmq_stream_prometheus/BUILD.bazel b/deps/rabbitmq_stream_prometheus/BUILD.bazel deleted file mode 100644 index 4b6079cfd957..000000000000 --- a/deps/rabbitmq_stream_prometheus/BUILD.bazel +++ /dev/null @@ -1,55 +0,0 @@ -load("@bazel-erlang//:xref.bzl", "xref") -load("@bazel-erlang//:dialyze.bzl", "dialyze") -load( - "//:rabbitmq.bzl", - "RABBITMQ_DIALYZER_OPTS", - "broker_for_integration_suites", - "rabbitmq_integration_suite", - "rabbitmq_lib", -) - -APP_NAME = "rabbitmq_stream_prometheus" - -APP_DESCRIPTION = "RabbitMQ Stream Prometheus" - -APP_MODULE = "rabbit_stream_prometheus" - -BUILD_DEPS = [ - "//deps/rabbit_common:bazel_erlang_lib", - "@prometheus//:bazel_erlang_lib", -] - -DEPS = [ - "//deps/rabbitmq_prometheus:bazel_erlang_lib", - "//deps/rabbitmq_stream:bazel_erlang_lib", -] - -RUNTIME_DEPS = [ - "//deps/rabbit:bazel_erlang_lib", -] - -rabbitmq_lib( - app_description = APP_DESCRIPTION, - app_module = APP_MODULE, - app_name = APP_NAME, - build_deps = BUILD_DEPS, - runtime_deps = RUNTIME_DEPS, - deps = DEPS, -) - -xref(tags = ["xref"]) - -dialyze( - dialyzer_opts = RABBITMQ_DIALYZER_OPTS, - plt = "//:base_plt", - tags = ["dialyze"], -) - -broker_for_integration_suites() - -PACKAGE = "deps/rabbitmq_stream_prometheus" - -rabbitmq_integration_suite( - PACKAGE, - name = "prometheus_http_SUITE", -) diff --git a/deps/rabbitmq_stream_prometheus/LICENSE b/deps/rabbitmq_stream_prometheus/LICENSE deleted file mode 100644 index 669a2bf4505e..000000000000 --- a/deps/rabbitmq_stream_prometheus/LICENSE +++ /dev/null @@ -1,5 +0,0 @@ -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. \ No newline at end of file diff --git a/deps/rabbitmq_stream_prometheus/LICENSE-MPL-RabbitMQ b/deps/rabbitmq_stream_prometheus/LICENSE-MPL-RabbitMQ deleted file mode 100644 index c4b20dbc6631..000000000000 --- a/deps/rabbitmq_stream_prometheus/LICENSE-MPL-RabbitMQ +++ /dev/null @@ -1,370 +0,0 @@ -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. \ No newline at end of file diff --git a/deps/rabbitmq_stream_prometheus/Makefile b/deps/rabbitmq_stream_prometheus/Makefile deleted file mode 100644 index 313b0c6dc9bc..000000000000 --- a/deps/rabbitmq_stream_prometheus/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -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 diff --git a/deps/rabbitmq_stream_prometheus/README.adoc b/deps/rabbitmq_stream_prometheus/README.adoc deleted file mode 100644 index 5fde0eb33986..000000000000 --- a/deps/rabbitmq_stream_prometheus/README.adoc +++ /dev/null @@ -1,23 +0,0 @@ -= 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. \ No newline at end of file diff --git a/deps/rabbitmq_stream_prometheus/rebar.config b/deps/rabbitmq_stream_prometheus/rebar.config deleted file mode 100644 index 3744283d0696..000000000000 --- a/deps/rabbitmq_stream_prometheus/rebar.config +++ /dev/null @@ -1,12 +0,0 @@ -{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} - }} -]}. \ No newline at end of file diff --git a/deps/rabbitmq_stream_prometheus/src/collectors/prometheus_rabbitmq_stream_collector.erl b/deps/rabbitmq_stream_prometheus/src/collectors/prometheus_rabbitmq_stream_collector.erl deleted file mode 100644 index 2e71ccd04c00..000000000000 --- a/deps/rabbitmq_stream_prometheus/src/collectors/prometheus_rabbitmq_stream_collector.erl +++ /dev/null @@ -1,176 +0,0 @@ -%% 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. diff --git a/deps/rabbitmq_stream_prometheus/src/rabbit_stream_prometheus.erl b/deps/rabbitmq_stream_prometheus/src/rabbit_stream_prometheus.erl deleted file mode 100644 index cbfc2ab1de1c..000000000000 --- a/deps/rabbitmq_stream_prometheus/src/rabbit_stream_prometheus.erl +++ /dev/null @@ -1,38 +0,0 @@ -%% 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}, []}}. diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE.erl b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE.erl deleted file mode 100644 index cc0b5fbc4b19..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE.erl +++ /dev/null @@ -1,72 +0,0 @@ -%% 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-2021 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). diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.gitignore b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.gitignore deleted file mode 100644 index 4c70cdb707da..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/build/ -/lib/ -/target/ diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/MavenWrapperDownloader.java b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index b901097f2db6..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * 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(); - } - -} diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/maven-wrapper.jar b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0c..000000000000 Binary files a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/maven-wrapper.properties b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -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 diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/Makefile b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/Makefile deleted file mode 100644 index fdd09d6a72ef..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -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 diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/mvnw b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/mvnw deleted file mode 100755 index 41c0f0c23db5..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/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 "$@" diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/mvnw.cmd b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/mvnw.cmd deleted file mode 100644 index 86115719e538..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@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% diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/pom.xml b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/pom.xml deleted file mode 100644 index 95b109daa669..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/pom.xml +++ /dev/null @@ -1,143 +0,0 @@ - - - 4.0.0 - - com.rabbitmq.stream - rabbitmq-stream-prometheus-tests - 1.0-SNAPSHOT - - - - MPL 2.0 - https://www.mozilla.org/en-US/MPL/2.0/ - repo - - - - - - info@rabbitmq.com - Team RabbitMQ - VMware, Inc. or its affiliates. - https://rabbitmq.com - - - - - 0.1.0-SNAPSHOT - 0.33.8 - 5.7.2 - 3.19.0 - 4.9.1 - 1.2.3 - 3.8.1 - 2.22.2 - 2.2.0 - UTF-8 - - - - - - com.rabbitmq - stream-client - ${stream-client.version} - - - - org.apache.qpid - proton-j - ${proton-j.version} - - - - org.junit.jupiter - junit-jupiter-engine - ${junit.jupiter.version} - test - - - - org.junit.jupiter - junit-jupiter-params - ${junit.jupiter.version} - test - - - - org.assertj - assertj-core - ${assertj.version} - test - - - - com.squareup.okhttp3 - okhttp - ${okhttp.version} - test - - - - ch.qos.logback - logback-classic - ${logback.version} - test - - - - - - - - - - maven-compiler-plugin - ${maven.compiler.plugin.version} - - 1.8 - 1.8 - - -Xlint:deprecation - -Xlint:unchecked - - - - - - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - - com.diffplug.spotless - spotless-maven-plugin - ${spotless.version} - - - - 1.9 - - - - - - - - - - - - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - true - false - - - - - \ No newline at end of file diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/java/com/rabbitmq/stream/MetricsUtils.java b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/java/com/rabbitmq/stream/MetricsUtils.java deleted file mode 100644 index d3eb637a306d..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/java/com/rabbitmq/stream/MetricsUtils.java +++ /dev/null @@ -1,212 +0,0 @@ -// 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 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") - || 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 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>) - (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 labels; - - MetricValue(int value, Map 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 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 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 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 + '}'; - } - } -} diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/java/com/rabbitmq/stream/PrometheusHttpTest.java b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/java/com/rabbitmq/stream/PrometheusHttpTest.java deleted file mode 100644 index b3c339f892f2..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/java/com/rabbitmq/stream/PrometheusHttpTest.java +++ /dev/null @@ -1,305 +0,0 @@ -// 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.METRICS; -import static com.rabbitmq.stream.MetricsUtils.METRIC_CONSUMERS; -import static com.rabbitmq.stream.MetricsUtils.METRIC_CONSUMERS_CONSUMED; -import static com.rabbitmq.stream.MetricsUtils.METRIC_PUBLISHERS; -import static com.rabbitmq.stream.MetricsUtils.METRIC_PUBLISHERS_CONFIRMED; -import static com.rabbitmq.stream.MetricsUtils.METRIC_PUBLISHERS_ERRORED; -import static com.rabbitmq.stream.MetricsUtils.METRIC_PUBLISHERS_PUBLISHED; -import static com.rabbitmq.stream.MetricsUtils.Metric; -import static com.rabbitmq.stream.MetricsUtils.MetricValue; -import static com.rabbitmq.stream.MetricsUtils.parseMetrics; -import static com.rabbitmq.stream.TestUtils.counter; -import static com.rabbitmq.stream.TestUtils.gauge; -import static com.rabbitmq.stream.TestUtils.help; -import static com.rabbitmq.stream.TestUtils.noValue; -import static com.rabbitmq.stream.TestUtils.value; -import static com.rabbitmq.stream.TestUtils.valueCount; -import static com.rabbitmq.stream.TestUtils.valuesWithLabels; -import static com.rabbitmq.stream.TestUtils.waitUntil; -import static com.rabbitmq.stream.TestUtils.zero; -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; - } - - static Metrics metrics() throws IOException { - return parseMetrics(get("")); - } - - static Metrics metricsPerObject() throws IOException { - return parseMetrics(get("/per-object")); - } - - @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 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 producers = Collections.emptyList(); - List consumers = Collections.emptyList(); - CallableSupplier 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())) - .offset(OffsetSpecification.first()) - .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 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 producers = Collections.emptyList(); - List consumers = Collections.emptyList(); - CallableSupplier 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())) - .offset(OffsetSpecification.first()) - .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(); - } - } -} diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java deleted file mode 100644 index e90dbfdf3b41..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/java/com/rabbitmq/stream/TestUtils.java +++ /dev/null @@ -1,138 +0,0 @@ -// 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", "5552"); - 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 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 gauge() { - return new Condition<>(m -> m.isGauge(), "should be a gauge"); - } - - static Condition counter() { - return new Condition<>(m -> m.isCounter(), "should be a counter"); - } - - static Condition help() { - return new Condition<>(m -> m.help != null, "should have a help description"); - } - - static Condition zero() { - return new Condition<>( - m -> m.values.size() == 1 && m.values.get(0).value == 0, "should have one metric at 0"); - } - - static Condition noValue() { - return new Condition<>(m -> m.values.isEmpty(), "should have no value"); - } - - static Condition value(int expected) { - return new Condition<>(m -> m.value() == expected, "should have value " + expected); - } - - static Condition valueCount(int expected) { - return new Condition<>(m -> m.values.size() == expected, "should have " + expected + " values"); - } - - static Condition valuesWithLabels(String... expectedLabels) { - Collection 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 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); - } -} diff --git a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/resources/logback-test.xml b/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/resources/logback-test.xml deleted file mode 100644 index 45d598991dca..000000000000 --- a/deps/rabbitmq_stream_prometheus/test/prometheus_http_SUITE_data/src/test/resources/logback-test.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - \ No newline at end of file diff --git a/plugins.mk b/plugins.mk index 9053ad362874..17739f535ff8 100644 --- a/plugins.mk +++ b/plugins.mk @@ -33,7 +33,6 @@ PLUGINS := rabbitmq_amqp1_0 \ rabbitmq_stomp \ rabbitmq_stream \ rabbitmq_stream_management \ - rabbitmq_stream_prometheus \ rabbitmq_top \ rabbitmq_tracing \ rabbitmq_trust_store \ diff --git a/rabbitmq-components.mk b/rabbitmq-components.mk index 64a6fbcc2247..604880a82d4e 100644 --- a/rabbitmq-components.mk +++ b/rabbitmq-components.mk @@ -91,7 +91,6 @@ dep_rabbitmq_stomp = git_rmq-subfolder rabbitmq-stomp $(curre dep_rabbitmq_stream = git_rmq-subfolder rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) master dep_rabbitmq_stream_common = git_rmq-subfolder rabbitmq-stream-common $(current_rmq_ref) $(base_rmq_ref) master dep_rabbitmq_stream_management = git_rmq-subfolder rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) master -dep_rabbitmq_stream_prometheus = git_rmq-subfolder 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-subfolder rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master dep_rabbitmq_tracing = git_rmq-subfolder rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master @@ -179,7 +178,6 @@ RABBITMQ_COMPONENTS = amqp_client \ rabbitmq_stream \ rabbitmq_stream_common \ rabbitmq_stream_management \ - rabbitmq_stream_prometheus \ rabbitmq_toke \ rabbitmq_top \ rabbitmq_tracing \