rewrite from lager
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

67 wiersze
1.8 KiB

4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
  1. %% @doc A simple gen_event backend used to monitor mailbox size and
  2. %% switch log messages between synchronous and asynchronous modes.
  3. %% A gen_event handler is used because a process getting its own mailbox
  4. %% size doesn't involve getting a lock, and gen_event handlers run in their
  5. %% parent's process.
  6. -module(rumBackendThrottle).
  7. -behaviour(gen_event).
  8. -include("eRum.hrl").
  9. -export([
  10. init/1
  11. , handle_call/2
  12. , handle_event/2
  13. , handle_info/2
  14. , terminate/2,
  15. code_change/3
  16. ]).
  17. -record(state, {
  18. sink :: atom(),
  19. hwm :: non_neg_integer(),
  20. window_min :: non_neg_integer(),
  21. async = true :: boolean()
  22. }).
  23. init([{sink, Sink}, Hwm, Window]) ->
  24. rumConfig:set({Sink, async}, true),
  25. {ok, #state{sink = Sink, hwm = Hwm, window_min = Hwm - Window}}.
  26. handle_call(get_loglevel, State) ->
  27. {ok, {mask, ?LOG_NONE}, State};
  28. handle_call({set_loglevel, _Level}, State) ->
  29. {ok, ok, State};
  30. handle_call(_Request, State) ->
  31. {ok, ok, State}.
  32. handle_event({mWriteLog, _Message}, State) ->
  33. {message_queue_len, Len} = erlang:process_info(self(), message_queue_len),
  34. case {Len > State#state.hwm, Len < State#state.window_min, State#state.async} of
  35. {true, _, true} ->
  36. %% need to flip to sync mode
  37. rumConfig:set({State#state.sink, async}, false),
  38. {ok, State#state{async = false}};
  39. {_, true, false} ->
  40. %% need to flip to async mode
  41. rumConfig:set({State#state.sink, async}, true),
  42. {ok, State#state{async = true}};
  43. _ ->
  44. %% nothing needs to change
  45. {ok, State}
  46. end;
  47. handle_event(_Event, State) ->
  48. {ok, State}.
  49. handle_info(_Info, State) ->
  50. {ok, State}.
  51. %% @private
  52. terminate(_Reason, _State) ->
  53. ok.
  54. %% @private
  55. code_change(_OldVsn, State, _Extra) ->
  56. {ok, State}.