diff options
| author | Michael Klishin <michael@novemberain.com> | 2016-10-06 18:01:34 +0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-10-06 18:01:34 +0400 |
| commit | ce111d7f9f116c2e873edc12985b9d2896f6b4be (patch) | |
| tree | 186dafb1d90c60dad4c72ca4cd80376bcb636e7f | |
| parent | 41bfe8f020f62871f02f41e236d6458ef969d9f2 (diff) | |
| parent | 25aeb359102ad4673b35e187fe70df693af68c21 (diff) | |
| download | rabbitmq-server-git-ce111d7f9f116c2e873edc12985b9d2896f6b4be.tar.gz | |
Merge pull request #985 from rabbitmq/rabbitmq-management-289
Vhost limit API functions to set/list/clear specific limits
| -rw-r--r-- | src/rabbit_vhost_limit.erl | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/rabbit_vhost_limit.erl b/src/rabbit_vhost_limit.erl index bd79f4dd45..b933c31402 100644 --- a/src/rabbit_vhost_limit.erl +++ b/src/rabbit_vhost_limit.erl @@ -21,12 +21,14 @@ -include("rabbit.hrl"). -export([register/0]). --export([parse_set/2, clear/1]). +-export([parse_set/2, set/2, clear/1]). +-export([list/0, list/1]). +-export([update_limit/3, clear_limit/2, get_limit/2]). -export([validate/5, notify/4, notify_clear/3]). -export([connection_limit/1, queue_limit/1, is_over_queue_limit/1, is_over_connection_limit/1]). --import(rabbit_misc, [pget/2]). +-import(rabbit_misc, [pget/2, pget/3]). -rabbit_boot_step({?MODULE, [{description, "vhost limit parameters"}, @@ -57,6 +59,21 @@ connection_limit(VirtualHost) -> queue_limit(VirtualHost) -> get_limit(VirtualHost, <<"max-queues">>). +-spec list() -> [{rabbit_types:vhost(), rabbit_types:infos()}]. + +list() -> + case rabbit_runtime_parameters:list_component(<<"vhost-limits">>) of + [] -> []; + Params -> [ {pget(vhost, Param), pget(value, Param)} + || Param <- Params, + pget(value, Param) =/= undefined, + pget(name, Param) == <<"limits">> ] + end. + +-spec list(rabbit_types:vhost()) -> rabbit_types:infos(). + +list(VHost) -> + rabbit_runtime_parameters:value(VHost, <<"vhost-limits">>, <<"limits">>, []). -spec is_over_connection_limit(rabbit_types:vhost()) -> {true, non_neg_integer()} | false. @@ -122,6 +139,22 @@ clear(VHost) -> rabbit_runtime_parameters:clear_any(VHost, <<"vhost-limits">>, <<"limits">>). +update_limit(VHost, Name, Value) -> + OldDef = case rabbit_runtime_parameters:list(VHost, <<"vhost-limits">>) of + [] -> []; + [Param] -> pget(value, Param, []) + end, + NewDef = [{Name, Value} | lists:keydelete(Name, 1, OldDef)], + set(VHost, NewDef). + +clear_limit(VHost, Name) -> + OldDef = case rabbit_runtime_parameters:list(VHost, <<"vhost-limits">>) of + [] -> []; + [Param] -> pget(value, Param, []) + end, + NewDef = lists:keydelete(Name, 1, OldDef), + set(VHost, NewDef). + vhost_limit_validation() -> [{<<"max-connections">>, fun rabbit_parameter_validation:integer/2, optional}, {<<"max-queues">>, fun rabbit_parameter_validation:integer/2, optional}]. |
