@@ -27,40 +27,46 @@ content_types_provided(ReqData, Context) ->
2727 {rabbit_mgmt_util :responder_map (to_json ), ReqData , Context }.
2828
2929resource_exists (ReqData , Context ) ->
30- {case protocol (ReqData ) of
30+ {case protocols (ReqData ) of
3131 none -> false ;
3232 _ -> true
3333 end , ReqData , Context }.
3434
3535to_json (ReqData , Context ) ->
36- Protocol = normalize_protocol (protocol (ReqData )),
36+ Protocols = string :split (protocols (ReqData ), " ," , all ),
37+ RequestedProtocols = sets :from_list (
38+ [normalize_protocol (P ) || P <- Protocols ],
39+ [{version , 2 }]),
3740 Listeners = rabbit_networking :node_listeners (node ()),
38- ProtoListeners = [L || # listener {protocol = P } = L <- Listeners , atom_to_list (P ) == Protocol ],
39- case ProtoListeners of
41+ ActiveProtocols = sets :from_list (
42+ [atom_to_list (P ) || # listener {protocol = P } <- Listeners ],
43+ [{version , 2 }]),
44+ MissingProtocols = sets :to_list (sets :subtract (RequestedProtocols , ActiveProtocols )),
45+ case MissingProtocols of
4046 [] ->
41- Msg = <<" No active listener" >>,
42- failure (Msg , Protocol , [P || # listener {protocol = P } <- Listeners ], ReqData , Context );
47+ Body = #{status => ok ,
48+ protocols => [list_to_binary (P ) || P <- sets :to_list (ActiveProtocols )]},
49+ rabbit_mgmt_util :reply (Body , ReqData , Context );
4350 _ ->
44- Body = #{status => ok ,
45- protocol => list_to_binary (Protocol )},
46- rabbit_mgmt_util :reply (Body , ReqData , Context )
51+ Msg = <<" No active listener" >>,
52+ failure (Msg , MissingProtocols , sets :to_list (ActiveProtocols ), ReqData , Context )
4753 end .
4854
4955failure (Message , Missing , Protocols , ReqData , Context ) ->
5056 Body = #{
5157 status => failed ,
5258 reason => Message ,
53- missing => list_to_binary (Missing ) ,
54- protocols => Protocols
59+ missing => [ list_to_binary (P ) || P <- Missing ] ,
60+ protocols => [ list_to_binary ( P ) || P <- Protocols ]
5561 },
5662 {Response , ReqData1 , Context1 } = rabbit_mgmt_util :reply (Body , ReqData , Context ),
5763 {stop , cowboy_req :reply (503 , #{}, Response , ReqData1 ), Context1 }.
5864
5965is_authorized (ReqData , Context ) ->
6066 rabbit_mgmt_util :is_authorized (ReqData , Context ).
6167
62- protocol (ReqData ) ->
63- rabbit_mgmt_util :id (protocol , ReqData ).
68+ protocols (ReqData ) ->
69+ rabbit_mgmt_util :id (protocols , ReqData ).
6470
6571normalize_protocol (Protocol ) ->
6672 case string :lowercase (binary_to_list (Protocol )) of
0 commit comments