62 lines
1.7 KiB
Erlang
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}.
|