@@ -2658,23 +2658,102 @@ end}.
26582658{mapping , " message_interceptors.incoming.$interceptor.overwrite" , " rabbit.incoming_message_interceptors" , [
26592659 {datatype , {enum , [true , false ]}}]}.
26602660
2661+ % Pseudo-key to include the interceptor in the list of interceptors.
2662+ % - If any other configuration is provided for the interceptor this
2663+ % configuration is not required.
2664+ % - If no other configuration is provided, this one is required so that the
2665+ % interceptor gets invoked.
2666+ {mapping , " message_interceptors.incoming.$interceptor.enabled" , " rabbit.incoming_message_interceptors" , [
2667+ {datatype , {enum , [true ]}}]}.
2668+
2669+ {mapping , " message_interceptors.outgoing.$interceptor.enabled" , " rabbit.outgoing_message_interceptors" , [
2670+ {datatype , {enum , [true ]}}]}.
2671+
2672+ {mapping ,
2673+ " message_interceptors.incoming.set_header_timestamp.overwrite" ,
2674+ " rabbit.incoming_message_interceptors" ,
2675+ [{datatype , {enum , [true , false ]}}]}.
2676+ {mapping ,
2677+ " message_interceptors.incoming.rabbit_message_interceptor_routing_node.overwrite" ,
2678+ " rabbit.incoming_message_interceptors" ,
2679+ [{datatype , {enum , [true , false ]}}]}.
2680+
2681+ {mapping ,
2682+ " message_interceptors.incoming.set_header_routing_node.overwrite" ,
2683+ " rabbit.incoming_message_interceptors" ,
2684+ [{datatype , {enum , [true , false ]}}]}.
2685+ {mapping ,
2686+ " message_interceptors.incoming.rabbit_message_interceptor_timestamp.overwrite" ,
2687+ " rabbit.incoming_message_interceptors" ,
2688+ [{datatype , {enum , [true , false ]}}]}.
2689+
26612690{translation , " rabbit.incoming_message_interceptors" ,
26622691 fun (Conf ) ->
2663- case cuttlefish_variable :filter_by_prefix (" message_interceptors" , Conf ) of
2664- [] ->
2665- cuttlefish :unset ();
2666- L ->
2667- [begin
2668- Interceptor = list_to_atom (Interceptor0 ),
2669- case lists :member (Interceptor , [set_header_timestamp ,
2670- set_header_routing_node ]) of
2671- true ->
2672- {Interceptor , Overwrite };
2673- false ->
2674- cuttlefish :invalid (io_lib :format (" ~p is invalid" , [Interceptor ]))
2675- end
2676- end || {[" message_interceptors" , " incoming" , Interceptor0 , " overwrite" ], Overwrite } <- L ]
2677- end
2692+ case cuttlefish_variable :filter_by_prefix (" message_interceptors.incoming" , Conf ) of
2693+ [] ->
2694+ cuttlefish :unset ();
2695+ L ->
2696+ InterceptorsConfig = [
2697+ {Module0 , Config , Value }
2698+ || {[" message_interceptors" , " incoming" , Module0 , Config ], Value } <- L
2699+ ],
2700+ {Result , Order0 } = lists :foldl (
2701+ fun ({Interceptor0 , Key0 , Value }, {Acc , Order }) ->
2702+ Interceptor = list_to_atom (Interceptor0 ),
2703+ Key = list_to_atom (Key0 ),
2704+ MapPutFun = fun (Old ) -> maps :put (Key , Value , Old ) end ,
2705+ % This Interceptor -> Module alias exists for
2706+ % compatibility reasons
2707+ Module = case Interceptor of
2708+ set_header_timestamp ->
2709+ rabbit_message_interceptor_timestamp ;
2710+ set_header_routing_node ->
2711+ rabbit_message_interceptor_routing_node ;
2712+ _ ->
2713+ Interceptor
2714+ end ,
2715+ NewAcc = maps :update_with (Module ,
2716+ MapPutFun ,
2717+ #{Key => Value },
2718+ Acc ),
2719+ {NewAcc , [Module | Order ]}
2720+ end ,
2721+ {#{}, []},
2722+ InterceptorsConfig
2723+ ),
2724+ Order = lists :uniq (Order0 ),
2725+ [{O , maps :without ([enabled ], maps :get (O , Result ))} || O <- Order ]
2726+ end
2727+ end
2728+ }.
2729+
2730+ {translation , " rabbit.outgoing_message_interceptors" ,
2731+ fun (Conf ) ->
2732+ case cuttlefish_variable :filter_by_prefix (" message_interceptors.outgoing" , Conf ) of
2733+ [] ->
2734+ cuttlefish :unset ();
2735+ L ->
2736+ InterceptorsConfig = [
2737+ {Module0 , Config , Value }
2738+ || {[" message_interceptors" , " outgoing" , Module0 , Config ], Value } <- L
2739+ ],
2740+ {Result , Order0 } = lists :foldl (
2741+ fun ({Interceptor0 , Key0 , Value }, {Acc , Order }) ->
2742+ Module = list_to_atom (Interceptor0 ),
2743+ Key = list_to_atom (Key0 ),
2744+ MapPutFun = fun (Old ) -> maps :put (Key , Value , Old ) end ,
2745+ NewAcc = maps :update_with (Module ,
2746+ MapPutFun ,
2747+ #{Key => Value },
2748+ Acc ),
2749+ {NewAcc , [Module | Order ]}
2750+ end ,
2751+ {#{}, []},
2752+ InterceptorsConfig
2753+ ),
2754+ Order = lists :uniq (Order0 ),
2755+ [{O , maps :without ([enabled ], maps :get (O , Result ))} || O <- Order ]
2756+ end
26782757 end
26792758}.
26802759
0 commit comments