| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- %%--------------------------------------------------------------------
- %% Copyright (c) 2020-2021 EMQ Technologies Co., Ltd. All Rights Reserved.
- %%
- %% Licensed under the Apache License, Version 2.0 (the "License");
- %% you may not use this file except in compliance with the License.
- %% You may obtain a copy of the License at
- %%
- %% http://www.apache.org/licenses/LICENSE-2.0
- %%
- %% Unless required by applicable law or agreed to in writing, software
- %% distributed under the License is distributed on an "AS IS" BASIS,
- %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- %% See the License for the specific language governing permissions and
- %% limitations under the License.
- %%--------------------------------------------------------------------
- -define(APP, emqx_rule_engine).
- -define(KV_TAB, '@rule_engine_db').
- -type maybe(T) :: T | undefined.
- -type rule_id() :: binary().
- -type rule_name() :: binary().
- -type mf() :: {Module::atom(), Fun::atom()}.
- -type hook() :: atom() | 'any'.
- -type topic() :: binary().
- -type bridge_channel_id() :: binary().
- -type selected_data() :: map().
- -type envs() :: map().
- -type output_type() :: bridge | builtin | func.
- -type output_target() :: bridge_channel_id() | atom() | output_fun().
- -type output_fun_args() :: map().
- -type output() :: #{
- type := output_type(),
- target := output_target(),
- args => output_fun_args()
- }.
- -type output_fun() :: fun((selected_data(), envs(), output_fun_args()) -> any()).
- -type rule_info() ::
- #{ from := list(topic())
- , outputs := [output()]
- , sql := binary()
- , is_foreach := boolean()
- , fields := list()
- , doeach := term()
- , incase := term()
- , conditions := tuple()
- , enabled := boolean()
- , description => binary()
- }.
- -record(rule,
- { id :: rule_id()
- , created_at :: integer() %% epoch in millisecond precision
- , info :: rule_info()
- }).
- %% Arithmetic operators
- -define(is_arith(Op), (Op =:= '+' orelse
- Op =:= '-' orelse
- Op =:= '*' orelse
- Op =:= '/' orelse
- Op =:= 'div')).
- %% Compare operators
- -define(is_comp(Op), (Op =:= '=' orelse
- Op =:= '=~' orelse
- Op =:= '>' orelse
- Op =:= '<' orelse
- Op =:= '<=' orelse
- Op =:= '>=' orelse
- Op =:= '<>' orelse
- Op =:= '!=')).
- %% Logical operators
- -define(is_logical(Op), (Op =:= 'and' orelse Op =:= 'or')).
- -define(RAISE(_EXP_, _ERROR_),
- ?RAISE(_EXP_, _ = do_nothing, _ERROR_)).
- -define(RAISE(_EXP_, _EXP_ON_FAIL_, _ERROR_),
- fun() ->
- try (_EXP_)
- catch _EXCLASS_:_EXCPTION_:_ST_ ->
- _EXP_ON_FAIL_,
- throw(_ERROR_)
- end
- end()).
- %% Tables
- -define(RULE_TAB, emqx_rule).
|