@@ -46,60 +46,49 @@ delete(HandlerId) ->
4646 gen_server :call (? MODULE , {delete , HandlerId }).
4747
4848persist () ->
49- {Mod , State } = impl_get (),
49+ {Mod , _ , State } = impl_get (),
5050 case Mod :persist (State ) of
5151 {ok , NewState } ->
52- persistent_term : put ( telemetry , { telemetry_pt , NewState }) ,
53- ok ;
52+ ListForEventFun = fun telemetry_pt : list_for_event / 2 ,
53+ persistent_term : put ( telemetry , { telemetry_pt , ListForEventFun , NewState }) ;
5454 _ ->
5555 ok
5656 end .
5757
58- impl_get () -> persistent_term :get (telemetry , undefined ).
58+ impl_get () ->
59+ persistent_term :get (telemetry , default_impl ()).
5960
6061-spec list_for_event (telemetry :event_name ()) -> [# handler {}].
6162list_for_event (EventName ) ->
62- case impl_get () of
63- {Mod , State } ->
64- Mod :list_for_event (State , EventName );
65- undefined ->
66- ? LOG_WARNING (" Failed to lookup telemetry handlers. "
67- " Ensure the telemetry application has been started. " , []),
68- []
69- end .
63+ {_Mod , ListForEventFun , State } = impl_get (),
64+ ListForEventFun (State , EventName ).
7065
7166-spec list_by_prefix (telemetry :event_prefix ()) -> [# handler {}].
7267list_by_prefix (EventPrefix ) ->
73- case impl_get () of
74- {Mod , State } ->
75- Mod :list_by_prefix (State , EventPrefix );
76- undefined ->
77- ? LOG_WARNING (" Failed to lookup telemetry handlers. "
78- " Ensure the telemetry application has been started. " , []),
79- []
80- end .
68+ {Mod , _ListForEventFun , State } = impl_get (),
69+ Mod :list_by_prefix (State , EventPrefix ).
8170
8271init ([]) ->
72+ process_flag (trap_exit , true ),
8373 TID = create_table (),
84-
85- persistent_term :put (telemetry , {telemetry_ets , TID }),
86-
74+ ListForEventFun = fun telemetry_ets :list_for_event /2 ,
75+ persistent_term :put (telemetry , {telemetry_ets , ListForEventFun , TID }),
8776 {ok , []}.
8877
8978handle_call ({insert , HandlerId , EventNames , Function , Config }, _From , State ) ->
90- {Mod , MState } = impl_get (),
79+ {Mod , ListForEventFun , MState } = impl_get (),
9180 case Mod :insert (MState , HandlerId , EventNames , Function , Config ) of
9281 {ok , NewState } ->
93- persistent_term :put (telemetry , {Mod , NewState }),
82+ persistent_term :put (telemetry , {Mod , ListForEventFun , NewState }),
9483 {reply , ok , State };
9584 {error , _ } = Error ->
9685 {reply , Error , State }
9786 end ;
9887handle_call ({delete , HandlerId }, _From , State ) ->
99- {Mod , MState } = impl_get (),
88+ {Mod , ListForEventFun , MState } = impl_get (),
10089 case Mod :delete (MState , HandlerId ) of
10190 {ok , NewState } ->
102- persistent_term :put (telemetry , {Mod , NewState }),
91+ persistent_term :put (telemetry , {Mod , ListForEventFun , NewState }),
10392 {reply , ok , State };
10493 {error , _ } = Error ->
10594 {reply , Error , State }
@@ -120,6 +109,10 @@ terminate(_Reason, _State) ->
120109
121110% %
122111
112+ default_impl () ->
113+ ListForEventFun = fun (_ , _ ) -> [] end ,
114+ {telemetry_ets , ListForEventFun , #{}}.
115+
123116create_table () ->
124117 ets :new (? MODULE , [duplicate_bag , protected ,
125118 {keypos , # handler .event_name }, {read_concurrency , true }]).
0 commit comments