parent
15b8e8cf4d
commit
b03dfa2dd2
|
@ -13,6 +13,7 @@
|
||||||
/logs/
|
/logs/
|
||||||
/plugins/
|
/plugins/
|
||||||
|
|
||||||
/rabbitmq_management_metrics.d
|
|
||||||
erl_crash.dump
|
erl_crash.dump
|
||||||
prometheus/data
|
prometheus/data
|
||||||
|
|
||||||
|
test/config_schema_SUITE_data/schema/rabbit.schema
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
%% ----------------------------------------------------------------------------
|
||||||
|
%% RabbitMQ Prometheus Plugin
|
||||||
|
%%
|
||||||
|
%% See https://rabbitmq.com/prometheus.html for details
|
||||||
|
%% ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%% HTTP (TCP) listener options ========================================================
|
||||||
|
|
||||||
|
%% HTTP listener consistent with the management plugin, Web STOMP and Web MQTT.
|
||||||
|
%%
|
||||||
|
%% {tcp_config, [{port, 15692},
|
||||||
|
%% {ip, "127.0.0.1"}]}
|
||||||
|
|
||||||
|
{mapping, "prometheus.tcp.port", "rabbitmq_prometheus.tcp_config.port",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
{mapping, "prometheus.tcp.ip", "rabbitmq_prometheus.tcp_config.ip",
|
||||||
|
[{datatype, string},
|
||||||
|
{validators, ["is_ip"]}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.tcp.compress", "rabbitmq_prometheus.tcp_config.cowboy_opts.compress",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
{mapping, "prometheus.tcp.idle_timeout", "rabbitmq_prometheus.tcp_config.cowboy_opts.idle_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.tcp.inactivity_timeout", "rabbitmq_prometheus.tcp_config.cowboy_opts.inactivity_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.tcp.request_timeout", "rabbitmq_prometheus.tcp_config.cowboy_opts.request_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.tcp.shutdown_timeout", "rabbitmq_prometheus.tcp_config.cowboy_opts.shutdown_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.tcp.max_keepalive", "rabbitmq_prometheus.tcp_config.cowboy_opts.max_keepalive",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
|
||||||
|
|
||||||
|
%% HTTPS (TLS) listener options ========================================================
|
||||||
|
|
||||||
|
%% HTTPS listener consistent with the management plugin, Web STOMP and Web MQTT.
|
||||||
|
%%
|
||||||
|
%% {ssl_config, [{port, 15691},
|
||||||
|
%% {ip, "127.0.0.1"},
|
||||||
|
%% {cacertfile, "/path/to/cacert.pem"},
|
||||||
|
%% {certfile, "/path/to/cert.pem"},
|
||||||
|
%% {keyfile, "/path/to/key.pem"}]}
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.port", "rabbitmq_prometheus.ssl_config.port",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
{mapping, "prometheus.ssl.backlog", "rabbitmq_prometheus.ssl_config.backlog",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
{mapping, "prometheus.ssl.ip", "rabbitmq_prometheus.ssl_config.ip",
|
||||||
|
[{datatype, string}, {validators, ["is_ip"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.certfile", "rabbitmq_prometheus.ssl_config.certfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.keyfile", "rabbitmq_prometheus.ssl_config.keyfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.cacertfile", "rabbitmq_prometheus.ssl_config.cacertfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.password", "rabbitmq_prometheus.ssl_config.password",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.verify", "rabbitmq_prometheus.ssl_config.verify", [
|
||||||
|
{datatype, {enum, [verify_peer, verify_none]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.fail_if_no_peer_cert", "rabbitmq_prometheus.ssl_config.fail_if_no_peer_cert", [
|
||||||
|
{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.honor_cipher_order", "rabbitmq_prometheus.ssl_config.honor_cipher_order",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.honor_ecc_order", "rabbitmq_prometheus.ssl_config.honor_ecc_order",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.reuse_sessions", "rabbitmq_prometheus.ssl_config.reuse_sessions",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.secure_renegotiate", "rabbitmq_prometheus.ssl_config.secure_renegotiate",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.client_renegotiation", "rabbitmq_prometheus.ssl_config.client_renegotiation",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.depth", "rabbitmq_prometheus.ssl_config.depth",
|
||||||
|
[{datatype, integer}, {validators, ["byte"]}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.versions.$version", "rabbitmq_prometheus.ssl_config.versions",
|
||||||
|
[{datatype, atom}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_prometheus.ssl_config.versions",
|
||||||
|
fun(Conf) ->
|
||||||
|
Settings = cuttlefish_variable:filter_by_prefix("prometheus.ssl.versions", Conf),
|
||||||
|
[V || {_, V} <- Settings]
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.ciphers.$cipher", "rabbitmq_prometheus.ssl_config.ciphers",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_prometheus.ssl_config.ciphers",
|
||||||
|
fun(Conf) ->
|
||||||
|
Settings = cuttlefish_variable:filter_by_prefix("prometheus.ssl.ciphers", Conf),
|
||||||
|
lists:reverse([V || {_, V} <- Settings])
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.compress", "rabbitmq_prometheus.ssl_config.cowboy_opts.compress",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
{mapping, "prometheus.ssl.idle_timeout", "rabbitmq_prometheus.ssl_config.cowboy_opts.idle_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.inactivity_timeout", "rabbitmq_prometheus.ssl_config.cowboy_opts.inactivity_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.request_timeout", "rabbitmq_prometheus.ssl_config.cowboy_opts.request_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.shutdown_timeout", "rabbitmq_prometheus.ssl_config.cowboy_opts.shutdown_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.max_keepalive", "rabbitmq_prometheus.ssl_config.cowboy_opts.max_keepalive",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
|
@ -0,0 +1,63 @@
|
||||||
|
%% The contents of this file are subject to the Mozilla Public License
|
||||||
|
%% Version 1.1 (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/MPL/
|
||||||
|
%%
|
||||||
|
%% 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 GoPivotal, Inc.
|
||||||
|
%% Copyright (c) 2018 Pivotal Software, Inc. All rights reserved.
|
||||||
|
%%
|
||||||
|
|
||||||
|
-module(config_schema_SUITE).
|
||||||
|
|
||||||
|
-compile(export_all).
|
||||||
|
|
||||||
|
all() ->
|
||||||
|
[
|
||||||
|
run_snippets
|
||||||
|
].
|
||||||
|
|
||||||
|
%% -------------------------------------------------------------------
|
||||||
|
%% Testsuite setup/teardown.
|
||||||
|
%% -------------------------------------------------------------------
|
||||||
|
|
||||||
|
init_per_suite(Config) ->
|
||||||
|
rabbit_ct_helpers:log_environment(),
|
||||||
|
Config1 = rabbit_ct_helpers:run_setup_steps(Config),
|
||||||
|
rabbit_ct_config_schema:init_schemas(rabbitmq_prometheus, Config1).
|
||||||
|
|
||||||
|
|
||||||
|
end_per_suite(Config) ->
|
||||||
|
rabbit_ct_helpers:run_teardown_steps(Config).
|
||||||
|
|
||||||
|
init_per_testcase(Testcase, Config) ->
|
||||||
|
rabbit_ct_helpers:testcase_started(Config, Testcase),
|
||||||
|
Config1 = rabbit_ct_helpers:set_config(Config, [
|
||||||
|
{rmq_nodename_suffix, Testcase}
|
||||||
|
]),
|
||||||
|
rabbit_ct_helpers:run_steps(Config1,
|
||||||
|
rabbit_ct_broker_helpers:setup_steps() ++
|
||||||
|
rabbit_ct_client_helpers:setup_steps()).
|
||||||
|
|
||||||
|
end_per_testcase(Testcase, Config) ->
|
||||||
|
Config1 = rabbit_ct_helpers:run_steps(Config,
|
||||||
|
rabbit_ct_client_helpers:teardown_steps() ++
|
||||||
|
rabbit_ct_broker_helpers:teardown_steps()),
|
||||||
|
rabbit_ct_helpers:testcase_finished(Config1, Testcase).
|
||||||
|
|
||||||
|
%% -------------------------------------------------------------------
|
||||||
|
%% Testcases.
|
||||||
|
%% -------------------------------------------------------------------
|
||||||
|
|
||||||
|
run_snippets(Config) ->
|
||||||
|
ok = rabbit_ct_broker_helpers:rpc(Config, 0,
|
||||||
|
?MODULE, run_snippets1, [Config]).
|
||||||
|
|
||||||
|
run_snippets1(Config) ->
|
||||||
|
rabbit_ct_config_schema:run_snippets(Config).
|
|
@ -0,0 +1 @@
|
||||||
|
I'm not a certificate
|
|
@ -0,0 +1 @@
|
||||||
|
I'm not a certificate
|
|
@ -0,0 +1 @@
|
||||||
|
I'm not a certificate
|
262
deps/rabbitmq_prometheus/test/config_schema_SUITE_data/rabbitmq_prometheus.snippets
vendored
Normal file
262
deps/rabbitmq_prometheus/test/config_schema_SUITE_data/rabbitmq_prometheus.snippets
vendored
Normal file
|
@ -0,0 +1,262 @@
|
||||||
|
[
|
||||||
|
%%
|
||||||
|
%% TCP listener
|
||||||
|
%%
|
||||||
|
|
||||||
|
{tcp_listener_port_only,
|
||||||
|
"prometheus.tcp.port = 15692",
|
||||||
|
[{rabbitmq_prometheus,[
|
||||||
|
{tcp_config,[
|
||||||
|
{port,15692}
|
||||||
|
]}
|
||||||
|
]}],
|
||||||
|
[rabbitmq_prometheus]},
|
||||||
|
|
||||||
|
{tcp_listener_interface_port,
|
||||||
|
"prometheus.tcp.ip = 192.168.1.2
|
||||||
|
prometheus.tcp.port = 15692",
|
||||||
|
[{rabbitmq_prometheus,[
|
||||||
|
{tcp_config,[
|
||||||
|
{ip, "192.168.1.2"},
|
||||||
|
{port,15692}
|
||||||
|
]}
|
||||||
|
]}],
|
||||||
|
[rabbitmq_prometheus]},
|
||||||
|
|
||||||
|
{tcp_listener_server_opts_compress,
|
||||||
|
"prometheus.tcp.compress = true",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{tcp_config, [{cowboy_opts, [{compress, true}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
{tcp_listener_server_opts_compress_and_idle_timeout,
|
||||||
|
"prometheus.tcp.compress = true
|
||||||
|
prometheus.tcp.idle_timeout = 123",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{tcp_config, [{cowboy_opts, [{compress, true},
|
||||||
|
{idle_timeout, 123}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
{tcp_listener_server_opts_compress_and_multiple_timeouts,
|
||||||
|
"prometheus.tcp.compress = true
|
||||||
|
prometheus.tcp.idle_timeout = 123
|
||||||
|
prometheus.tcp.inactivity_timeout = 456
|
||||||
|
prometheus.tcp.request_timeout = 789",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{tcp_config, [{cowboy_opts, [{compress, true},
|
||||||
|
{idle_timeout, 123},
|
||||||
|
{inactivity_timeout, 456},
|
||||||
|
{request_timeout, 789}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
{tcp_listener_server_opts_multiple_timeouts_only,
|
||||||
|
"prometheus.tcp.idle_timeout = 123
|
||||||
|
prometheus.tcp.inactivity_timeout = 456
|
||||||
|
prometheus.tcp.request_timeout = 789",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{tcp_config, [{cowboy_opts, [{idle_timeout, 123},
|
||||||
|
{inactivity_timeout, 456},
|
||||||
|
{request_timeout, 789}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
{tcp_listener_server_opts_shutdown_timeout,
|
||||||
|
"prometheus.tcp.shutdown_timeout = 7000",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{tcp_config, [{cowboy_opts, [{shutdown_timeout, 7000}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
{tcp_listener_server_opts_max_keepalive,
|
||||||
|
"prometheus.tcp.max_keepalive = 120",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{tcp_config, [{cowboy_opts, [{max_keepalive, 120}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
%%
|
||||||
|
%% TLS listener
|
||||||
|
%%
|
||||||
|
|
||||||
|
{tls_listener_port_only,
|
||||||
|
"prometheus.ssl.port = 15691",
|
||||||
|
[{rabbitmq_prometheus,[
|
||||||
|
{ssl_config,[
|
||||||
|
{port,15691}
|
||||||
|
]}
|
||||||
|
]}],
|
||||||
|
[rabbitmq_prometheus]},
|
||||||
|
|
||||||
|
{tls_listener_interface_port,
|
||||||
|
"prometheus.ssl.ip = 192.168.1.2
|
||||||
|
prometheus.ssl.port = 15691",
|
||||||
|
[{rabbitmq_prometheus,[
|
||||||
|
{ssl_config,[
|
||||||
|
{ip, "192.168.1.2"},
|
||||||
|
{port,15691}
|
||||||
|
]}
|
||||||
|
]}],
|
||||||
|
[rabbitmq_prometheus]},
|
||||||
|
|
||||||
|
{tls_listener,
|
||||||
|
"prometheus.ssl.ip = 192.168.1.2
|
||||||
|
prometheus.ssl.port = 15691
|
||||||
|
prometheus.ssl.cacertfile = test/config_schema_SUITE_data/certs/cacert.pem
|
||||||
|
prometheus.ssl.certfile = test/config_schema_SUITE_data/certs/cert.pem
|
||||||
|
prometheus.ssl.keyfile = test/config_schema_SUITE_data/certs/key.pem
|
||||||
|
prometheus.ssl.verify = verify_none
|
||||||
|
prometheus.ssl.fail_if_no_peer_cert = false",
|
||||||
|
[{rabbitmq_prometheus,[
|
||||||
|
{ssl_config,[
|
||||||
|
{ip, "192.168.1.2"},
|
||||||
|
{port,15691},
|
||||||
|
{cacertfile,"test/config_schema_SUITE_data/certs/cacert.pem"},
|
||||||
|
{certfile,"test/config_schema_SUITE_data/certs/cert.pem"},
|
||||||
|
{keyfile,"test/config_schema_SUITE_data/certs/key.pem"},
|
||||||
|
{verify, verify_none},
|
||||||
|
{fail_if_no_peer_cert, false}
|
||||||
|
]}
|
||||||
|
]}],
|
||||||
|
[rabbitmq_prometheus]},
|
||||||
|
|
||||||
|
{tls_listener_cipher_suites,
|
||||||
|
"prometheus.ssl.ip = 192.168.1.2
|
||||||
|
prometheus.ssl.port = 15691
|
||||||
|
prometheus.ssl.cacertfile = test/config_schema_SUITE_data/certs/cacert.pem
|
||||||
|
prometheus.ssl.certfile = test/config_schema_SUITE_data/certs/cert.pem
|
||||||
|
prometheus.ssl.keyfile = test/config_schema_SUITE_data/certs/key.pem
|
||||||
|
|
||||||
|
prometheus.ssl.honor_cipher_order = true
|
||||||
|
prometheus.ssl.honor_ecc_order = true
|
||||||
|
prometheus.ssl.client_renegotiation = false
|
||||||
|
prometheus.ssl.secure_renegotiate = true
|
||||||
|
|
||||||
|
prometheus.ssl.verify = verify_peer
|
||||||
|
prometheus.ssl.fail_if_no_peer_cert = false
|
||||||
|
|
||||||
|
prometheus.ssl.versions.1 = tlsv1.2
|
||||||
|
prometheus.ssl.versions.2 = tlsv1.1
|
||||||
|
|
||||||
|
prometheus.ssl.ciphers.1 = ECDHE-ECDSA-AES256-GCM-SHA384
|
||||||
|
prometheus.ssl.ciphers.2 = ECDHE-RSA-AES256-GCM-SHA384
|
||||||
|
prometheus.ssl.ciphers.3 = ECDHE-ECDSA-AES256-SHA384
|
||||||
|
prometheus.ssl.ciphers.4 = ECDHE-RSA-AES256-SHA384
|
||||||
|
prometheus.ssl.ciphers.5 = ECDH-ECDSA-AES256-GCM-SHA384
|
||||||
|
prometheus.ssl.ciphers.6 = ECDH-RSA-AES256-GCM-SHA384
|
||||||
|
prometheus.ssl.ciphers.7 = ECDH-ECDSA-AES256-SHA384
|
||||||
|
prometheus.ssl.ciphers.8 = ECDH-RSA-AES256-SHA384
|
||||||
|
prometheus.ssl.ciphers.9 = DHE-RSA-AES256-GCM-SHA384",
|
||||||
|
[{rabbitmq_prometheus,[
|
||||||
|
{ssl_config,[
|
||||||
|
{ip, "192.168.1.2"},
|
||||||
|
{port,15691},
|
||||||
|
{cacertfile,"test/config_schema_SUITE_data/certs/cacert.pem"},
|
||||||
|
{certfile,"test/config_schema_SUITE_data/certs/cert.pem"},
|
||||||
|
{keyfile,"test/config_schema_SUITE_data/certs/key.pem"},
|
||||||
|
|
||||||
|
{verify, verify_peer},
|
||||||
|
{fail_if_no_peer_cert, false},
|
||||||
|
|
||||||
|
{honor_cipher_order, true},
|
||||||
|
{honor_ecc_order, true},
|
||||||
|
{client_renegotiation, false},
|
||||||
|
{secure_renegotiate, true},
|
||||||
|
|
||||||
|
{versions,['tlsv1.2','tlsv1.1']},
|
||||||
|
{ciphers, [
|
||||||
|
"ECDHE-ECDSA-AES256-GCM-SHA384",
|
||||||
|
"ECDHE-RSA-AES256-GCM-SHA384",
|
||||||
|
"ECDHE-ECDSA-AES256-SHA384",
|
||||||
|
"ECDHE-RSA-AES256-SHA384",
|
||||||
|
"ECDH-ECDSA-AES256-GCM-SHA384",
|
||||||
|
"ECDH-RSA-AES256-GCM-SHA384",
|
||||||
|
"ECDH-ECDSA-AES256-SHA384",
|
||||||
|
"ECDH-RSA-AES256-SHA384",
|
||||||
|
"DHE-RSA-AES256-GCM-SHA384"
|
||||||
|
]}
|
||||||
|
]}
|
||||||
|
]}],
|
||||||
|
[rabbitmq_prometheus]},
|
||||||
|
|
||||||
|
{tls_listener_server_opts_compress,
|
||||||
|
"prometheus.ssl.compress = true",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{ssl_config, [{cowboy_opts, [{compress, true}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
{tls_listener_server_opts_compress_and_idle_timeout,
|
||||||
|
"prometheus.ssl.compress = true
|
||||||
|
prometheus.ssl.idle_timeout = 123",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{ssl_config, [{cowboy_opts, [{compress, true},
|
||||||
|
{idle_timeout, 123}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
{tls_listener_server_opts_compress_and_multiple_timeouts,
|
||||||
|
"prometheus.ssl.compress = true
|
||||||
|
prometheus.ssl.idle_timeout = 123
|
||||||
|
prometheus.ssl.inactivity_timeout = 456
|
||||||
|
prometheus.ssl.request_timeout = 789",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{ssl_config, [{cowboy_opts, [{compress, true},
|
||||||
|
{idle_timeout, 123},
|
||||||
|
{inactivity_timeout, 456},
|
||||||
|
{request_timeout, 789}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
{tls_listener_server_opts_multiple_timeouts_only,
|
||||||
|
"prometheus.ssl.idle_timeout = 123
|
||||||
|
prometheus.ssl.inactivity_timeout = 456
|
||||||
|
prometheus.ssl.request_timeout = 789",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{ssl_config, [{cowboy_opts, [{idle_timeout, 123},
|
||||||
|
{inactivity_timeout, 456},
|
||||||
|
{request_timeout, 789}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
{tls_listener_server_opts_shutdown_timeout,
|
||||||
|
"prometheus.ssl.shutdown_timeout = 7000",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{ssl_config, [{cowboy_opts, [{shutdown_timeout, 7000}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
},
|
||||||
|
|
||||||
|
{tls_listener_server_opts_max_keepalive,
|
||||||
|
"prometheus.ssl.max_keepalive = 120",
|
||||||
|
[
|
||||||
|
{rabbitmq_prometheus, [
|
||||||
|
{ssl_config, [{cowboy_opts, [{max_keepalive, 120}]}]}
|
||||||
|
]}
|
||||||
|
], [rabbitmq_prometheus]
|
||||||
|
}
|
||||||
|
].
|
433
deps/rabbitmq_prometheus/test/config_schema_SUITE_data/schema/rabbitmq_management.schema
vendored
Normal file
433
deps/rabbitmq_prometheus/test/config_schema_SUITE_data/schema/rabbitmq_management.schema
vendored
Normal file
|
@ -0,0 +1,433 @@
|
||||||
|
%% ----------------------------------------------------------------------------
|
||||||
|
%% RabbitMQ Management Plugin
|
||||||
|
%%
|
||||||
|
%% See https://www.rabbitmq.com/management.html for details
|
||||||
|
%% ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%% Load definitions from a JSON file or directory of files. See
|
||||||
|
%% https://www.rabbitmq.com/management.html#load-definitions
|
||||||
|
%%
|
||||||
|
%% {load_definitions, "/path/to/schema.json"},
|
||||||
|
%% {load_definitions, "/path/to/schemas"},
|
||||||
|
{mapping, "management.load_definitions", "rabbitmq_management.load_definitions",
|
||||||
|
[{datatype, string},
|
||||||
|
{validators, ["file_accessible"]}]}.
|
||||||
|
|
||||||
|
%% Log all requests to the management HTTP API to a file.
|
||||||
|
%%
|
||||||
|
%% {http_log_dir, "/path/to/access.log"},
|
||||||
|
|
||||||
|
{mapping, "management.http_log_dir", "rabbitmq_management.http_log_dir",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
%% HTTP (TCP) listener options ========================================================
|
||||||
|
|
||||||
|
%% HTTP listener consistent with Web STOMP and Web MQTT.
|
||||||
|
%%
|
||||||
|
%% {tcp_config, [{port, 15672},
|
||||||
|
%% {ip, "127.0.0.1"}]}
|
||||||
|
|
||||||
|
{mapping, "management.tcp.port", "rabbitmq_management.tcp_config.port",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
{mapping, "management.tcp.ip", "rabbitmq_management.tcp_config.ip",
|
||||||
|
[{datatype, string},
|
||||||
|
{validators, ["is_ip"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.tcp.compress", "rabbitmq_management.tcp_config.cowboy_opts.compress",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
{mapping, "management.tcp.idle_timeout", "rabbitmq_management.tcp_config.cowboy_opts.idle_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "management.tcp.inactivity_timeout", "rabbitmq_management.tcp_config.cowboy_opts.inactivity_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "management.tcp.request_timeout", "rabbitmq_management.tcp_config.cowboy_opts.request_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "management.tcp.shutdown_timeout", "rabbitmq_management.tcp_config.cowboy_opts.shutdown_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "management.tcp.max_keepalive", "rabbitmq_management.tcp_config.cowboy_opts.max_keepalive",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
|
||||||
|
|
||||||
|
%% HTTPS (TLS) listener options ========================================================
|
||||||
|
|
||||||
|
%% HTTPS listener consistent with Web STOMP and Web MQTT.
|
||||||
|
%%
|
||||||
|
%% {ssl_config, [{port, 15671},
|
||||||
|
%% {ip, "127.0.0.1"},
|
||||||
|
%% {cacertfile, "/path/to/cacert.pem"},
|
||||||
|
%% {certfile, "/path/to/cert.pem"},
|
||||||
|
%% {keyfile, "/path/to/key.pem"}]}
|
||||||
|
|
||||||
|
{mapping, "management.ssl.port", "rabbitmq_management.ssl_config.port",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
{mapping, "management.ssl.backlog", "rabbitmq_management.ssl_config.backlog",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
{mapping, "management.ssl.ip", "rabbitmq_management.ssl_config.ip",
|
||||||
|
[{datatype, string}, {validators, ["is_ip"]}]}.
|
||||||
|
{mapping, "management.ssl.certfile", "rabbitmq_management.ssl_config.certfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
{mapping, "management.ssl.keyfile", "rabbitmq_management.ssl_config.keyfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
{mapping, "management.ssl.cacertfile", "rabbitmq_management.ssl_config.cacertfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
{mapping, "management.ssl.password", "rabbitmq_management.ssl_config.password",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.verify", "rabbitmq_management.ssl_config.verify", [
|
||||||
|
{datatype, {enum, [verify_peer, verify_none]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.fail_if_no_peer_cert", "rabbitmq_management.ssl_config.fail_if_no_peer_cert", [
|
||||||
|
{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.honor_cipher_order", "rabbitmq_management.ssl_config.honor_cipher_order",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.honor_ecc_order", "rabbitmq_management.ssl_config.honor_ecc_order",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.reuse_sessions", "rabbitmq_management.ssl_config.reuse_sessions",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.secure_renegotiate", "rabbitmq_management.ssl_config.secure_renegotiate",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.client_renegotiation", "rabbitmq_management.ssl_config.client_renegotiation",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.depth", "rabbitmq_management.ssl_config.depth",
|
||||||
|
[{datatype, integer}, {validators, ["byte"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.versions.$version", "rabbitmq_management.ssl_config.versions",
|
||||||
|
[{datatype, atom}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.ssl_config.versions",
|
||||||
|
fun(Conf) ->
|
||||||
|
Settings = cuttlefish_variable:filter_by_prefix("management.ssl.versions", Conf),
|
||||||
|
[V || {_, V} <- Settings]
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.ciphers.$cipher", "rabbitmq_management.ssl_config.ciphers",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.ssl_config.ciphers",
|
||||||
|
fun(Conf) ->
|
||||||
|
Settings = cuttlefish_variable:filter_by_prefix("management.ssl.ciphers", Conf),
|
||||||
|
lists:reverse([V || {_, V} <- Settings])
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "management.ssl.compress", "rabbitmq_management.ssl_config.cowboy_opts.compress",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
{mapping, "management.ssl.idle_timeout", "rabbitmq_management.ssl_config.cowboy_opts.idle_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "management.ssl.inactivity_timeout", "rabbitmq_management.ssl_config.cowboy_opts.inactivity_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "management.ssl.request_timeout", "rabbitmq_management.ssl_config.cowboy_opts.request_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "management.ssl.shutdown_timeout", "rabbitmq_management.ssl_config.cowboy_opts.shutdown_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "management.ssl.max_keepalive", "rabbitmq_management.ssl_config.cowboy_opts.max_keepalive",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%% Legacy listener options ========================================================
|
||||||
|
|
||||||
|
%% Legacy (pre-3.7.9) TCP listener format.
|
||||||
|
%%
|
||||||
|
%% {listener, [{port, 12345},
|
||||||
|
%% {ip, "127.0.0.1"},
|
||||||
|
%% {ssl, true},
|
||||||
|
%% {ssl_opts, [{cacertfile, "/path/to/cacert.pem"},
|
||||||
|
%% {certfile, "/path/to/cert.pem"},
|
||||||
|
%% {keyfile, "/path/to/key.pem"}]}]},
|
||||||
|
|
||||||
|
{mapping, "management.listener.port", "rabbitmq_management.listener.port",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ip", "rabbitmq_management.listener.ip",
|
||||||
|
[{datatype, string},
|
||||||
|
{validators, ["is_ip"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl", "rabbitmq_management.listener.ssl",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.server.compress", "rabbitmq_management.listener.cowboy_opts.compress",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.server.idle_timeout", "rabbitmq_management.listener.cowboy_opts.idle_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.server.inactivity_timeout", "rabbitmq_management.listener.cowboy_opts.inactivity_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.server.request_timeout", "rabbitmq_management.listener.cowboy_opts.request_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.server.shutdown_timeout", "rabbitmq_management.listener.cowboy_opts.shutdown_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.server.max_keepalive", "rabbitmq_management.listener.cowboy_opts.max_keepalive",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
|
||||||
|
%% Legacy HTTPS listener options ========================================================
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts", "rabbitmq_management.listener.ssl_opts", [
|
||||||
|
{datatype, {enum, [none]}}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.listener.ssl_opts",
|
||||||
|
fun(Conf) ->
|
||||||
|
case cuttlefish:conf_get("management.listener.ssl_opts", Conf, undefined) of
|
||||||
|
none -> [];
|
||||||
|
_ -> cuttlefish:invalid("Invalid management.listener.ssl_opts")
|
||||||
|
end
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.verify", "rabbitmq_management.listener.ssl_opts.verify", [
|
||||||
|
{datatype, {enum, [verify_peer, verify_none]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.fail_if_no_peer_cert", "rabbitmq_management.listener.ssl_opts.fail_if_no_peer_cert", [
|
||||||
|
{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.cacertfile", "rabbitmq_management.listener.ssl_opts.cacertfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.certfile", "rabbitmq_management.listener.ssl_opts.certfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.cacerts.$name", "rabbitmq_management.listener.ssl_opts.cacerts",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.listener.ssl_opts.cacerts",
|
||||||
|
fun(Conf) ->
|
||||||
|
Settings = cuttlefish_variable:filter_by_prefix("management.listener.ssl_opts.cacerts", Conf),
|
||||||
|
[ list_to_binary(V) || {_, V} <- Settings ]
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.honor_cipher_order", "rabbitmq_management.listener.ssl_opts.honor_cipher_order",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.honor_ecc_order", "rabbitmq_management.listener.ssl_opts.honor_ecc_order",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.reuse_sessions", "rabbitmq_management.listener.ssl_opts.reuse_sessions",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.secure_renegotiate", "rabbitmq_management.listener.ssl_opts.secure_renegotiate",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.client_renegotiation", "rabbitmq_management.listener.ssl_opts.client_renegotiation",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.versions.$version", "rabbitmq_management.listener.ssl_opts.versions",
|
||||||
|
[{datatype, atom}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.listener.ssl_opts.versions",
|
||||||
|
fun(Conf) ->
|
||||||
|
Settings = cuttlefish_variable:filter_by_prefix("management.listener.ssl_opts.versions", Conf),
|
||||||
|
[ V || {_, V} <- Settings ]
|
||||||
|
end}.
|
||||||
|
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.cert", "rabbitmq_management.listener.ssl_opts.cert",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.listener.ssl_opts.cert",
|
||||||
|
fun(Conf) ->
|
||||||
|
list_to_binary(cuttlefish:conf_get("management.listener.ssl_opts.cert", Conf))
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.crl_check", "rabbitmq_management.listener.ssl_opts.crl_check",
|
||||||
|
[{datatype, [{enum, [true, false, peer, best_effort]}]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.depth", "rabbitmq_management.listener.ssl_opts.depth",
|
||||||
|
[{datatype, integer}, {validators, ["byte"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.dh", "rabbitmq_management.listener.ssl_opts.dh",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.listener.ssl_opts.dh",
|
||||||
|
fun(Conf) ->
|
||||||
|
list_to_binary(cuttlefish:conf_get("management.listener.ssl_opts.dh", Conf))
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.dhfile", "rabbitmq_management.listener.ssl_opts.dhfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.key.RSAPrivateKey", "rabbitmq_management.listener.ssl_opts.key",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.key.DSAPrivateKey", "rabbitmq_management.listener.ssl_opts.key",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.key.PrivateKeyInfo", "rabbitmq_management.listener.ssl_opts.key",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.listener.ssl_opts.key",
|
||||||
|
fun(Conf) ->
|
||||||
|
case cuttlefish_variable:filter_by_prefix("management.listener.ssl_opts.key", Conf) of
|
||||||
|
[{[_,_,Key], Val}|_] -> {list_to_atom(Key), list_to_binary(Val)};
|
||||||
|
_ -> undefined
|
||||||
|
end
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.keyfile", "rabbitmq_management.listener.ssl_opts.keyfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.log_alert", "rabbitmq_management.listener.ssl_opts.log_alert",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.password", "rabbitmq_management.listener.ssl_opts.password",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{mapping, "management.listener.ssl_opts.psk_identity", "rabbitmq_management.listener.ssl_opts.psk_identity",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
|
||||||
|
%% A custom path prefix for all HTTP request handlers.
|
||||||
|
%%
|
||||||
|
%% {path_prefix, "/a/prefix"},
|
||||||
|
|
||||||
|
{mapping, "management.path_prefix", "rabbitmq_management.path_prefix",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
%% Login session timeout in minutes
|
||||||
|
|
||||||
|
{mapping, "management.login_session_timeout", "rabbitmq_management.login_session_timeout", [
|
||||||
|
{datatype, integer}, {validators, ["non_negative_integer"]}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
%% CORS
|
||||||
|
|
||||||
|
{mapping, "management.cors.allow_origins", "rabbitmq_management.cors_allow_origins", [
|
||||||
|
{datatype, {enum, [none]}}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{mapping, "management.cors.allow_origins.$name", "rabbitmq_management.cors_allow_origins", [
|
||||||
|
{datatype, string}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.cors_allow_origins",
|
||||||
|
fun(Conf) ->
|
||||||
|
case cuttlefish:conf_get("management.cors.allow_origins", Conf, undefined) of
|
||||||
|
none -> [];
|
||||||
|
_ ->
|
||||||
|
Settings = cuttlefish_variable:filter_by_prefix("management.cors.allow_origins", Conf),
|
||||||
|
[V || {_, V} <- Settings]
|
||||||
|
end
|
||||||
|
end}.
|
||||||
|
|
||||||
|
|
||||||
|
{mapping, "management.cors.max_age", "rabbitmq_management.cors_max_age", [
|
||||||
|
{datatype, integer}, {validators, ["non_negative_integer"]}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.cors_max_age",
|
||||||
|
fun(Conf) ->
|
||||||
|
case cuttlefish:conf_get("management.cors.max_age", Conf, undefined) of
|
||||||
|
undefined -> cuttlefish:unset();
|
||||||
|
Value -> Value
|
||||||
|
end
|
||||||
|
end}.
|
||||||
|
|
||||||
|
|
||||||
|
%% CSP (https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)
|
||||||
|
|
||||||
|
{mapping, "management.csp.policy", "rabbitmq_management.content_security_policy", [
|
||||||
|
{datatype, string}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.content_security_policy",
|
||||||
|
fun(Conf) ->
|
||||||
|
case cuttlefish:conf_get("management.csp.policy", Conf, undefined) of
|
||||||
|
undefined -> cuttlefish:unset();
|
||||||
|
Value -> Value
|
||||||
|
end
|
||||||
|
end}.
|
||||||
|
|
||||||
|
|
||||||
|
%% HSTS (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security)
|
||||||
|
|
||||||
|
{mapping, "management.hsts.policy", "rabbitmq_management.strict_transport_security", [
|
||||||
|
{datatype, string}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.strict_transport_security",
|
||||||
|
fun(Conf) ->
|
||||||
|
case cuttlefish:conf_get("management.hsts.policy", Conf, undefined) of
|
||||||
|
undefined -> cuttlefish:unset();
|
||||||
|
Value -> Value
|
||||||
|
end
|
||||||
|
end}.
|
||||||
|
|
||||||
|
%% OAuth 2/SSO access only
|
||||||
|
|
||||||
|
{mapping, "management.disable_basic_auth", "rabbitmq_management.disable_basic_auth",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
%% Management only
|
||||||
|
|
||||||
|
{mapping, "management.disable_stats", "rabbitmq_management.disable_management_stats", [
|
||||||
|
{datatype, {enum, [true, false]}}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
%% ===========================================================================
|
||||||
|
%% Authorization
|
||||||
|
|
||||||
|
{mapping, "management.enable_uaa", "rabbitmq_management.enable_uaa",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "management.uaa_client_id", "rabbitmq_management.uaa_client_id",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{mapping, "management.uaa_location", "rabbitmq_management.uaa_location",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
%% ===========================================================================
|
||||||
|
|
||||||
|
|
||||||
|
%% One of 'basic', 'detailed' or 'none'. See
|
||||||
|
%% https://www.rabbitmq.com/management.html#fine-stats for more details.
|
||||||
|
%% {rates_mode, basic},
|
||||||
|
{mapping, "management.rates_mode", "rabbitmq_management.rates_mode",
|
||||||
|
[{datatype, {enum, [basic, detailed, none]}}]}.
|
||||||
|
|
||||||
|
%% Configure how long aggregated data (such as message rates and queue
|
||||||
|
%% lengths) is retained. Please read the plugin's documentation in
|
||||||
|
%% https://www.rabbitmq.com/management.html#configuration for more
|
||||||
|
%% details.
|
||||||
|
%%
|
||||||
|
%% {sample_retention_policies,
|
||||||
|
%% [{global, [{60, 5}, {3600, 60}, {86400, 1200}]},
|
||||||
|
%% {basic, [{60, 5}, {3600, 60}]},
|
||||||
|
%% {detailed, [{10, 5}]}]}
|
||||||
|
% ]},
|
||||||
|
|
||||||
|
{mapping, "management.sample_retention_policies.$section.$interval",
|
||||||
|
"rabbitmq_management.sample_retention_policies",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_management.sample_retention_policies",
|
||||||
|
fun(Conf) ->
|
||||||
|
Global = cuttlefish_variable:filter_by_prefix("management.sample_retention_policies.global", Conf),
|
||||||
|
Basic = cuttlefish_variable:filter_by_prefix("management.sample_retention_policies.basic", Conf),
|
||||||
|
Detailed = cuttlefish_variable:filter_by_prefix("management.sample_retention_policies.detailed", Conf),
|
||||||
|
TranslateKey = fun("minute") -> 60;
|
||||||
|
("hour") -> 3600;
|
||||||
|
("day") -> 86400;
|
||||||
|
(Other) -> list_to_integer(Other)
|
||||||
|
end,
|
||||||
|
TranslatePolicy = fun(Section) ->
|
||||||
|
[ {TranslateKey(Key), Val} || {[_,_,_,Key], Val} <- Section ]
|
||||||
|
end,
|
||||||
|
[{global, TranslatePolicy(Global)},
|
||||||
|
{basic, TranslatePolicy(Basic)},
|
||||||
|
{detailed, TranslatePolicy(Detailed)}]
|
||||||
|
end}.
|
||||||
|
|
||||||
|
|
||||||
|
{validator, "is_dir", "is not directory",
|
||||||
|
fun(File) ->
|
||||||
|
ReadFile = file:list_dir(File),
|
||||||
|
element(1, ReadFile) == ok
|
||||||
|
end}.
|
|
@ -0,0 +1,4 @@
|
||||||
|
%% Agent collectors won't start if metrics collection is disabled, only external stats are enabled.
|
||||||
|
%% Also the management application will refuse to start if metrics collection is disabled
|
||||||
|
{mapping, "management_agent.disable_metrics_collector", "rabbitmq_management_agent.disable_metrics_collector",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
112
deps/rabbitmq_prometheus/test/config_schema_SUITE_data/schema/rabbitmq_prometheus.schema
vendored
Normal file
112
deps/rabbitmq_prometheus/test/config_schema_SUITE_data/schema/rabbitmq_prometheus.schema
vendored
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
%% ----------------------------------------------------------------------------
|
||||||
|
%% RabbitMQ Prometheus Plugin
|
||||||
|
%%
|
||||||
|
%% See https://rabbitmq.com/prometheus.html for details
|
||||||
|
%% ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%% HTTP (TCP) listener options ========================================================
|
||||||
|
|
||||||
|
%% HTTP listener consistent with the management plugin, Web STOMP and Web MQTT.
|
||||||
|
%%
|
||||||
|
%% {tcp_config, [{port, 15692},
|
||||||
|
%% {ip, "127.0.0.1"}]}
|
||||||
|
|
||||||
|
{mapping, "prometheus.tcp.port", "rabbitmq_prometheus.tcp_config.port",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
{mapping, "prometheus.tcp.ip", "rabbitmq_prometheus.tcp_config.ip",
|
||||||
|
[{datatype, string},
|
||||||
|
{validators, ["is_ip"]}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.tcp.compress", "rabbitmq_prometheus.tcp_config.cowboy_opts.compress",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
{mapping, "prometheus.tcp.idle_timeout", "rabbitmq_prometheus.tcp_config.cowboy_opts.idle_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.tcp.inactivity_timeout", "rabbitmq_prometheus.tcp_config.cowboy_opts.inactivity_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.tcp.request_timeout", "rabbitmq_prometheus.tcp_config.cowboy_opts.request_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.tcp.shutdown_timeout", "rabbitmq_prometheus.tcp_config.cowboy_opts.shutdown_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.tcp.max_keepalive", "rabbitmq_prometheus.tcp_config.cowboy_opts.max_keepalive",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
|
||||||
|
|
||||||
|
%% HTTPS (TLS) listener options ========================================================
|
||||||
|
|
||||||
|
%% HTTPS listener consistent with the management plugin, Web STOMP and Web MQTT.
|
||||||
|
%%
|
||||||
|
%% {ssl_config, [{port, 15691},
|
||||||
|
%% {ip, "127.0.0.1"},
|
||||||
|
%% {cacertfile, "/path/to/cacert.pem"},
|
||||||
|
%% {certfile, "/path/to/cert.pem"},
|
||||||
|
%% {keyfile, "/path/to/key.pem"}]}
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.port", "rabbitmq_prometheus.ssl_config.port",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
{mapping, "prometheus.ssl.backlog", "rabbitmq_prometheus.ssl_config.backlog",
|
||||||
|
[{datatype, integer}]}.
|
||||||
|
{mapping, "prometheus.ssl.ip", "rabbitmq_prometheus.ssl_config.ip",
|
||||||
|
[{datatype, string}, {validators, ["is_ip"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.certfile", "rabbitmq_prometheus.ssl_config.certfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.keyfile", "rabbitmq_prometheus.ssl_config.keyfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.cacertfile", "rabbitmq_prometheus.ssl_config.cacertfile",
|
||||||
|
[{datatype, string}, {validators, ["file_accessible"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.password", "rabbitmq_prometheus.ssl_config.password",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.verify", "rabbitmq_prometheus.ssl_config.verify", [
|
||||||
|
{datatype, {enum, [verify_peer, verify_none]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.fail_if_no_peer_cert", "rabbitmq_prometheus.ssl_config.fail_if_no_peer_cert", [
|
||||||
|
{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.honor_cipher_order", "rabbitmq_prometheus.ssl_config.honor_cipher_order",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.honor_ecc_order", "rabbitmq_prometheus.ssl_config.honor_ecc_order",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.reuse_sessions", "rabbitmq_prometheus.ssl_config.reuse_sessions",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.secure_renegotiate", "rabbitmq_prometheus.ssl_config.secure_renegotiate",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.client_renegotiation", "rabbitmq_prometheus.ssl_config.client_renegotiation",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.depth", "rabbitmq_prometheus.ssl_config.depth",
|
||||||
|
[{datatype, integer}, {validators, ["byte"]}]}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.versions.$version", "rabbitmq_prometheus.ssl_config.versions",
|
||||||
|
[{datatype, atom}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_prometheus.ssl_config.versions",
|
||||||
|
fun(Conf) ->
|
||||||
|
Settings = cuttlefish_variable:filter_by_prefix("prometheus.ssl.versions", Conf),
|
||||||
|
[V || {_, V} <- Settings]
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.ciphers.$cipher", "rabbitmq_prometheus.ssl_config.ciphers",
|
||||||
|
[{datatype, string}]}.
|
||||||
|
|
||||||
|
{translation, "rabbitmq_prometheus.ssl_config.ciphers",
|
||||||
|
fun(Conf) ->
|
||||||
|
Settings = cuttlefish_variable:filter_by_prefix("prometheus.ssl.ciphers", Conf),
|
||||||
|
lists:reverse([V || {_, V} <- Settings])
|
||||||
|
end}.
|
||||||
|
|
||||||
|
{mapping, "prometheus.ssl.compress", "rabbitmq_prometheus.ssl_config.cowboy_opts.compress",
|
||||||
|
[{datatype, {enum, [true, false]}}]}.
|
||||||
|
{mapping, "prometheus.ssl.idle_timeout", "rabbitmq_prometheus.ssl_config.cowboy_opts.idle_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.inactivity_timeout", "rabbitmq_prometheus.ssl_config.cowboy_opts.inactivity_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.request_timeout", "rabbitmq_prometheus.ssl_config.cowboy_opts.request_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.shutdown_timeout", "rabbitmq_prometheus.ssl_config.cowboy_opts.shutdown_timeout",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
||||||
|
{mapping, "prometheus.ssl.max_keepalive", "rabbitmq_prometheus.ssl_config.cowboy_opts.max_keepalive",
|
||||||
|
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
|
Loading…
Reference in New Issue