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