emqx/lib-opensource/emqx_rule_engine/priv/emqx_rule_engine.schema

62 lines
1.7 KiB
Erlang

%%-*- mode: erlang -*-
%% emqx_rule_engine config mapping
{mapping, "rule_engine.ignore_sys_message", "emqx_rule_engine.ignore_sys_message", [
{default, on},
{datatype, flag}
]}.
{mapping, "rule_engine.events.$name", "emqx_rule_engine.events", [
{default, "off, qos1"},
{datatype, string}
]}.
{translation, "emqx_rule_engine.events", fun(Conf) ->
SupportedHooks =
[ 'client.connected'
, 'client.disconnected'
, 'session.subscribed'
, 'session.unsubscribed'
, 'message.delivered'
, 'message.acked'
, 'message.dropped'
],
HookPoint = fun(Event) ->
case string:split(Event, "_") of
[Prefix, Name] ->
Point = list_to_atom(lists:append([Prefix, ".", Name])),
case lists:member(Point, SupportedHooks) of
true -> Point;
false -> error({unsupported_event, Event})
end;
[_] ->
error({invalid_event, Event})
end
end,
QoS = fun ("qos"++Level = QoSLevel) ->
case list_to_integer(Level) of
QoSL when QoSL =:= 0; QoSL =:= 1; QoSL =:= 2 ->
QoSL;
_ ->
error({invalid_qos_level, QoSLevel})
end;
(QoSLevel) ->
error({invalid_qos, QoSLevel})
end,
lists:foldl(
fun({EE=[_,"events",EvtName], Val}, Acc) ->
case string:split(string:trim(Val), ",", all) of
["on"++_, Snd] ->
[{HookPoint(EvtName), on, QoS(string:trim(Snd))} | Acc];
["on"++_] ->
[{HookPoint(EvtName), on, 1} | Acc];
[_] ->
Acc
end;
({_, _}, Acc) -> Acc
end, [], cuttlefish_variable:filter_by_prefix("rule_engine.events", Conf))
end}.