One step closer for better code abstraction for opensorce vs enterprise So far this relocation is to make opensource to enterprise merges conflict free.
165 lines
4.7 KiB
Markdown
165 lines
4.7 KiB
Markdown
#Rule-Engine-CLIs
|
|
|
|
## Rules
|
|
|
|
### create
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl rules create 'SELECT payload FROM "t/#" username="Steven"' '[{"name":"data_to_webserver", "params": {"$resource": "resource:9093f1cb"}}]' --descr="Msg From Steven to WebServer"
|
|
|
|
Rule rule:98a75239 created
|
|
```
|
|
|
|
### modify
|
|
|
|
|
|
```shell
|
|
## update sql, action, description
|
|
$ ./bin/emqx_ctl rules update 'rule:98a75239' \
|
|
-s "select * from \"t/a\" " \
|
|
-a '[{"name":"do_nothing", "fallbacks": []' -g continue \
|
|
-d 'Rule for debug2' \
|
|
|
|
## update sql only
|
|
$ ./bin/emqx_ctl rules update 'rule:98a75239' -s 'SELECT * FROM "t/a"'
|
|
|
|
## disable the rule
|
|
$ ./bin/emqx_ctl rules update 'rule:98a75239' -e false
|
|
|
|
```
|
|
|
|
### show
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl rules show rule:98a75239
|
|
|
|
rule(id='rule:98a75239', rawsql='SELECT payload FROM "t/#" username="Steven"', actions=[{"name":"data_to_webserver","params":{"$resource":"resource:9093f1cb","url":"http://host-name/chats"}}], enabled='true', description='Msg From Steven to WebServer')
|
|
```
|
|
|
|
### list
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl rules list
|
|
|
|
rule(id='rule:98a75239', rawsql='SELECT payload FROM "t/#" username="Steven"', actions=[{"name":"data_to_webserver","params":{"$resource":"resource:9093f1cb","url":"http://host-name/chats"}}], enabled='true', description='Msg From Steven to WebServer')
|
|
|
|
```
|
|
|
|
### delete
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl rules delete 'rule:98a75239'
|
|
|
|
ok
|
|
```
|
|
|
|
## Actions
|
|
|
|
### list
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl rule-actions list
|
|
|
|
action(name='republish', app='emqx_rule_engine', types=[], params=#{...}, description='Republish a MQTT message to a another topic')
|
|
action(name='inspect', app='emqx_rule_engine', types=[], params=#{...}, description='Inspect the details of action params for debug purpose')
|
|
action(name='data_to_webserver', app='emqx_web_hook', types=[], params=#{...}, description='Forward Messages to Web Server')
|
|
```
|
|
|
|
### show
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl rule-actions show 'data_to_webserver'
|
|
|
|
action(name='data_to_webserver', app='emqx_web_hook', types=['web_hook'], params=#{...}, description='Forward Messages to Web Server')
|
|
```
|
|
|
|
## Resource
|
|
|
|
### create
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl resources create 'web_hook' -c '{"url": "http://host-name/chats"}' --descr 'Resource towards http://host-name/chats'
|
|
|
|
Resource resource:19addfef created
|
|
```
|
|
|
|
### list
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl resources list
|
|
|
|
resource(id='resource:19addfef', type='web_hook', config=#{<<"url">> => <<"http://host-name/chats">>}, attrs=undefined, description='Resource towards http://host-name/chats')
|
|
|
|
```
|
|
|
|
### list all resources of a type
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl resources list -t 'web_hook'
|
|
|
|
resource(id='resource:19addfef', type='web_hook', config=#{<<"url">> => <<"http://host-name/chats">>}, attrs=undefined, description='Resource towards http://host-name/chats')
|
|
```
|
|
|
|
### show
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl resources show 'resource:19addfef'
|
|
|
|
resource(id='resource:19addfef', type='web_hook', config=#{<<"url">> => <<"http://host-name/chats">>}, attrs=undefined, description='Resource towards http://host-name/chats')
|
|
```
|
|
|
|
### delete
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl resources delete 'resource:19addfef'
|
|
|
|
ok
|
|
```
|
|
|
|
## Resources Types
|
|
|
|
### list
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl resource-types list
|
|
|
|
resource_type(name='built_in', provider='emqx_rule_engine', params=#{...}, on_create={emqx_rule_actions,on_resource_create}, description='The built in resource type for debug purpose')
|
|
resource_type(name='web_hook', provider='emqx_web_hook', params=#{...}, on_create={emqx_web_hook_actions,on_resource_create}, description='WebHook Resource')
|
|
```
|
|
|
|
### show
|
|
|
|
```shell
|
|
$ ./bin/emqx_ctl resource-types show built_in
|
|
|
|
resource_type(name='built_in', provider='emqx_rule_engine', params=#{}, description='The built in resource type for debug purpose')
|
|
```
|
|
|
|
## Rule example using webhook
|
|
|
|
``` shell
|
|
1. Create a webhook resource to URL http://127.0.0.1:9910.
|
|
./bin/emqx_ctl resources create 'web_hook' --config '{"url": "http://127.0.0.1:9910", "headers": {"token":"axfw34y235wrq234t4ersgw4t"}, "method": "POST"}'
|
|
Resource resource:3128243e created
|
|
|
|
2. Create a rule using action data_to_webserver, and bind above resource to that action.
|
|
./bin/emqx_ctl rules create 'client.connected' 'SELECT clientid as c, username as u.name FROM "#"' '[{"name":"data_to_webserver", "params": {"$resource": "resource:3128243e"}}]' --descr "Forward Connected Events to WebServer"
|
|
Rule rule:222b59f7 created
|
|
```
|
|
|
|
Start a simple `Web Server` using `nc`, and then connect to emqx broker using a mqtt client with username = 'Shawn':
|
|
|
|
```shell
|
|
$ echo -e "HTTP/1.1 200 OK\n\n $(date)" | nc -l 127.0.0.1 9910
|
|
|
|
POST / HTTP/1.1
|
|
content-type: application/json
|
|
content-length: 48
|
|
te:
|
|
host: 127.0.0.1:9910
|
|
connection: keep-alive
|
|
token: axfw34y235wrq234t4ersgw4t
|
|
|
|
{"c":"clientId-bP70ymeIyo","u":{"name":"Shawn"}
|
|
```
|