emqx_rule_engine.schema 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. %%-*- mode: erlang -*-
  2. %% emqx_rule_engine config mapping
  3. {mapping, "rule_engine.ignore_sys_message", "emqx_rule_engine.ignore_sys_message", [
  4. {default, on},
  5. {datatype, flag}
  6. ]}.
  7. {mapping, "rule_engine.events.$name", "emqx_rule_engine.events", [
  8. {default, "off, qos1"},
  9. {datatype, string}
  10. ]}.
  11. {translation, "emqx_rule_engine.events", fun(Conf) ->
  12. SupportedHooks =
  13. [ 'client.connected'
  14. , 'client.disconnected'
  15. , 'session.subscribed'
  16. , 'session.unsubscribed'
  17. , 'message.delivered'
  18. , 'message.acked'
  19. , 'message.dropped'
  20. ],
  21. HookPoint = fun(Event) ->
  22. case string:split(Event, "_") of
  23. [Prefix, Name] ->
  24. Point = list_to_atom(lists:append([Prefix, ".", Name])),
  25. case lists:member(Point, SupportedHooks) of
  26. true -> Point;
  27. false -> error({unsupported_event, Event})
  28. end;
  29. [_] ->
  30. error({invalid_event, Event})
  31. end
  32. end,
  33. QoS = fun ("qos"++Level = QoSLevel) ->
  34. case list_to_integer(Level) of
  35. QoSL when QoSL =:= 0; QoSL =:= 1; QoSL =:= 2 ->
  36. QoSL;
  37. _ ->
  38. error({invalid_qos_level, QoSLevel})
  39. end;
  40. (QoSLevel) ->
  41. error({invalid_qos, QoSLevel})
  42. end,
  43. lists:foldl(
  44. fun({EE=[_,"events",EvtName], Val}, Acc) ->
  45. case string:split(string:trim(Val), ",", all) of
  46. ["on"++_, Snd] ->
  47. [{HookPoint(EvtName), on, QoS(string:trim(Snd))} | Acc];
  48. ["on"++_] ->
  49. [{HookPoint(EvtName), on, 1} | Acc];
  50. [_] ->
  51. Acc
  52. end;
  53. ({_, _}, Acc) -> Acc
  54. end, [], cuttlefish_variable:filter_by_prefix("rule_engine.events", Conf))
  55. end}.