This commit adds a default timeout of 10 seconds to the rule engine's
`jq/2` function, and adds a new function `jq/3` (where the last parameter is
a timeout value). The default timeout can be configured with the setting
"rule_engine.jq_function_default_timeout".
Having a timeout when executing jq code in the rule engine is important
as jq code can potentially run forever. Also, the Erlang jq library
limits the number of jq programs that can execute concurrently so a jq
program that loops forever could potentially also prevent a "non-buggy"
jq program from ever starting.
This commit adds a function to the rule engine that alows users
to transform text or JSON objects using [jq filter programs][1].
[jq][1] is a command line tool that can be used to transform
and filter JSON text using jq's built-in language. The rule engine
function that is added with this commit uses the
[Erlang jq NIF library][2] that wraps the jq C library in an
Erlang NIF function.
[1]: https://stedolan.github.io/jq/
[2]: https://github.com/emqx/jq
Surprisingly enough, by doing small cirurgical changes in the existing
EMQX control scripts, we are able to get it running with Elixir and
with existing functionalities (`console`, `remote_console`, `start`,
`stop`, `ctl`, `foreground`, `eval`).
In order for us to reuse most of the functionalities implemented in
`bin/eqmx` also in the Elixir release script, common variable and
function definitions are extracted in separated bash files that can be
sourced by both Rebar and Elixir release scripts.
By treating the apps in the umbrella as dependencies to be managed and
built by rebar3, we can simplify the maintenance of the release, at
the cost of increased build times: using Mix as before, it could track
changed files better than using rebar. But the complexity and
possibility of discrepancies make it using rebar much more compelling.
The compile flag was introduced in EQM X 4.3 series
where CE and EE code was diverged large enough which made
non-practicle to determin edition at runtime.
such approach made testing quite challenging as we'll have to
build with different compile flags inorder to run per-edition
test cases
In this commit, we try to retrieve edition info from EMQX's
description text, (put to PT for fast access) at runtime
so we can test ALL editions from a super-set edition (EE).
* feat(emqx_conf): move conf manager for emqx_machine to emqx_conf
* chore(emqx_conf): change emqx:get_config/2 to emqx_conf:get/2
* fix: common test failed
* fix: badmatch by typo wrong key
* fix(emqx_conf): get the wrong core nodes
* fix(emqx_conf): get core node's tnx_id not latest tnx_id
* fix: add ro_transation when copy conf file
* fix: delete debug info
* fix: change ekka_rlog to mria_rlog
* fix: remove cluster_rpc from emqx_machine.
* fix: don't call ekka:start/0 explicitly
* fix: ekka should be start in emqx_machine
* feat(gateway): add gateway application
* chore(gateway): add normalize confs function
* refactor: move emqx-stomp to emqx-gateway subdir
* chore(gateway): fix some bad function defination
* chore(gateway): rename type to gwid
* chore(gw-stomp): upgrade the implementation to suppport gateway instance
* feat(gw-stomp): add reconnect mechanism
* refactor(stomp): upgrade connection&channel module to latest
* refactor(stomp): more details for handle_in/out
* refactor(stomp): get it up and running
* chore(gw): load some modules by default
* refactor: upgrade the emqx-gateway schema module
* test(stomp): fix testcases for stomp gateway
* chore(gw): remove needless lines
* chore(gateway): correct a lot of specs
* chore(gw): add a draft for metrics
* chore(gw): add metrics process
* fix(gw): fix cm process monitor
* test(gw): add test cases for gateway-regitry
* feat(gw): add metrics/cli for gateway
* fix(gw): fix xref errors
* chore(gw): pretty gateway metrics print format
* chore(gw-stomp): generate clientid by default
* chore(gw): more reliable
* chore(gw): rename gwid -> type
* chore(gw): impl the update logic
* chore(gw): some format improvement
* chore(gw): adapts the hocon configs
* fix(gw): fix xref errors
* test(gw): update configurations for tests
* chore(gw): ignore diaylzer warnings
* fix(gw): fix bad function call
* chore(gw): remove needless comments