Giter VIP home page Giter VIP logo

emqx-plugin-template's Introduction

EMQX Plugin Template

This is a rebar3 template to ease creation of EMQX Plugins in Erlang.

This plugin template is for EMQX >= 5.0.

We introduced a AVRO config schema mechanism for plugins in EMQX 5.7.0 to facilitate configuration updates for plugins at runtime via RESTAPI. Please see priv/config_schmea.avsc.example and priv/config_i18n.json.example as examples.

For EMQX >= 4.3, please see branch emqx-v4

For older EMQX versions, plugin development is no longer maintained.

A plugin template for Elixir (experimental) can be found at https://github.com/emqx/emqx-elixir-plugin.

Prerequisites

  • A working build environment (eg build_essential) including make
  • ASDF tool-chains recommended to manage EMQX released Erlang/OTP.
  • MUST use OTP 25 For docker image deployment. See also ./.tool-versions and EMQX Release v5.5.0.
  • rebar3

Usage

$ mkdir -p ~/.config/rebar3/templates
$ pushd ~/.config/rebar3/templates
$ git clone https://github.com/emqx/emqx-plugin-template.git
$ popd
$ rebar3 new emqx-plugin my_emqx_plugin
$ make -C my_emqx_plugin rel

Note

In order to use the AVRO config schema feature, please make sure the plugin template tag version >= 5.7.0 Rename files in the ./priv directory to ensure that EMQX can load them correctly after the plugin is installed. See also EMQX Documents - Plugins for more detail.

Note

If the REBAR_CACHE_DIR environment variable has been set, the directory for templates should be $REBAR_CACHE_DIR/.config/rebar3/templates. Here is a relevant issue.

This will create a tarball containing your custom plugin. You can use EMQX's Dashboard or it's command line tools to deploy it into your running EMQX cluster.

See EMQX documentation for details on how to deploy custom plugins.

emqx-plugin-template's People

Contributors

6293 avatar emqplus avatar gilbertwong96 avatar hjianbo avatar huangdan avatar jimmoen avatar jostar-y avatar keynslug avatar lafirest avatar qzhuyan avatar rory-z avatar sstrigler avatar terry-xiaoyu avatar thalesmg avatar tigercl avatar zhongwencool avatar zmstone avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

emqx-plugin-template's Issues

How to call emqx client api in hook?

Hi, I'm writing an mysql backend plugin.
I had stored the user subscribed topic list in mysql. I want to resubscribe the topic while reconnecting.
And how can I send offline message back to client while reconnecting.
Can any body have any information about it.
Thanks very much.

'make erl' Compiling _build/default/lib/cowlib/src/cow_sse.erl failed

Hi, I am trying to test the compile flow, according to instructions from the doc: https://www.emqx.io/docs/zh/v5.0/extensions/plugins.html#_2-%E6%B5%8B%E8%AF%95%E7%BC%96%E8%AF%91%E7%8E%AF%E5%A2%83

Well, I just clone the repo and run make rel.
Unfortunately, I got the following error info

root@3210f365cfae:/home/emqx/emqx-plugin-template# make rel
/home/emqx/emqx-plugin-template/rebar3 emqx_plugrel tar
===> Verifying dependencies...
+ mkdir -p _build/cmake
+ cd _build/cmake
+ type cmake3
+ CMAKE=cmake
+ cmake -DWITH_BUNDLE_LZ4=ON -DWITH_BUNDLE_SNAPPY=ON ../../c_src
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- LZ4 library: /home/emqx/emqx-plugin-template/_build/default/lib/rocksdb/_build/cmake/lz4/lib/liblz4.a
-- LZ4 includes: /home/emqx/emqx-plugin-template/_build/default/lib/rocksdb/_build/cmake/lz4/include
-- Snappy library: /home/emqx/emqx-plugin-template/_build/default/lib/rocksdb/_build/cmake/snappy/lib/libsnappy.a
-- Snappy includes: /home/emqx/emqx-plugin-template/_build/default/lib/rocksdb/_build/cmake/snappy/include
-- cmake args -DCMAKE_POSITION_INDEPENDENT_CODE=ON;-DCMAKE_CXX_COMPILER=/usr/bin/c++;-DCMAKE_AR=/usr/bin/ar;-DCMAKE_BUILD_TYPE=Rel
ease;-DFAIL_ON_WARNINGS=OFF;-DPORTABLE=ON;-DUSE_RTTI=1;-DWITH_TOOLS=OFF;-DWITH_TESTS=OFF;-DWITH_GFLAGS=OFF;-DWITH_JEMALLOC=OFF;-DW
ITH_TBB=;-DWITH_SNAPPY=TRUE;-DWITH_LZ4=TRUE;-DWITH_ZLIB=;-DWITH_BZ2=;-DWITH_ZSTD=;-Dsnappy_ROOT_DIR=/home/emqx/emqx-plugin-templat
e/_build/default/lib/rocksdb/_build/cmake/snappy;-Dlz4_ROOT_DIR=/home/emqx/emqx-plugin-template/_build/default/lib/rocksdb/_build/
cmake/lz4
-- Found RocksDB library: /home/emqx/emqx-plugin-template/_build/default/lib/rocksdb/_build/cmake/rocksdb-prefix/src/rocksdb-build
/librocksdb.a
-- Found RocksDB includes: /home/emqx/emqx-plugin-template/_build/default/lib/rocksdb/c_src/../deps/rocksdb/include
-- Using OTP lib: /home/erlang/lib/erlang/lib - found
-- Using erl_interface version: erl_interface-5.4
-- Using erts version: erts-14.0
-- Performing Test HAVE_OMIT_LEAF_FRAME_POINTER
-- Performing Test HAVE_OMIT_LEAF_FRAME_POINTER - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/emqx/emqx-plugin-template/_build/default/lib/rocksdb/_build/cmake
+ echo done-do_cmake.
done-do_cmake.
===> Compiling c_src/decoder.c
===> Compiling c_src/encoder.c
===> Compiling c_src/jiffy.c
===> Compiling c_src/termstack.c
===> Compiling c_src/utf8.c
===> Compiling c_src/util.c
===> Compiling c_src/doubles.cc
===> Compiling c_src/objects.cc
===> Compiling c_src/double-conversion/bignum-dtoa.cc
===> Compiling c_src/double-conversion/bignum.cc
===> Compiling c_src/double-conversion/cached-powers.cc
===> Compiling c_src/double-conversion/diy-fp.cc
===> Compiling c_src/double-conversion/double-conversion.cc
===> Compiling c_src/double-conversion/fast-dtoa.cc
===> Compiling c_src/double-conversion/fixed-dtoa.cc
===> Compiling c_src/double-conversion/strtod.cc
===> Linking /home/emqx/emqx-plugin-template/_build/default/lib/jiffy/priv/jiffy.so
===> Compiling c_src/async_queue.c
===> Compiling c_src/bcrypt.c
===> Compiling c_src/bcrypt_nif.c
===> Compiling c_src/blowfish.c
===> Linking /home/emqx/emqx-plugin-template/_build/default/lib/bcrypt/priv/bcrypt_nif.so
===> Analyzing applications...
===> Compiling rocksdb
===> Compiling recon
===> Compiling sext
===> Compiling snabbkaffe
===> Compiling lc
===> Compiling cowlib
===> Compiling _build/default/lib/cowlib/src/cow_sse.erl failed
_build/default/lib/cowlib/src/cow_sse.erl:56:29: type variable 'State' is only used once (is unbound)

make: *** [Makefile:49: rel] Error 1

Have no idea what does this mean, and how to fix the error? Any suggestions will be appreciated!

build error 'Error: badarg'

Hi, I want to install plugin in windows. I occured error.
gksrb@PASSTECH-HANGYU MINGW64 /d/download/emqx-plugin-template-master $ make rel C:/ProgramData/chocolatey/lib/make/tools/install/bin/make.exe get-rebar3 make[1]: Entering directory 'D:/download/emqx-plugin-template-master' make[1]: Leaving directory 'D:/download/emqx-plugin-template-master' /c/Erlang/bin/rebar3 emqx_plugrel tar ===> Fetching emqx_plugrel (from {git,"https://github.com/emqx/emqx_plugrel.git", {tag,"0.3.0"}}) ===> Fetching jsx v3.1.0 ===> Analyzing applications... ===> Compiling jsx ===> Compiling emqx_plugrel ===> Verifying dependencies... ===> Fetching emqx (from {git_subdir,"https://github.com/emqx/emqx.git", {tag,"v5.0.25"}, "apps/emqx"}) ===> Fetching rebar3_proper v0.12.1 ===> Analyzing applications... ===> Compiling rebar3_proper ===> Fetching rebar3_path_deps v0.4.0 ===> Analyzing applications... ===> Compiling rebar3_path_deps ===> Fetching emqx_utils (from {git_subdir,"https://github.com/emqx/emqx.git", {tag,"v5.0.25"}, "apps/emqx_utils"}) ===> Fetching map_sets v1.1.0 ===> Fetching cowboy (from {git,"https://github.com/emqx/cowboy",{tag,"2.9.0"}}) ===> Fetching ekka (from {git,"https://github.com/emqx/ekka",{tag,"0.15.1"}}) ===> Fetching emqx_http_lib (from {git,"https://github.com/emqx/emqx_http_lib.git", {tag,"0.5.2"}}) ===> Skipping emqx_utils (from {path,"../emqx_utils"}) as an app of the same name has already been fetched ===> Fetching esockd (from {git,"https://github.com/emqx/esockd",{tag,"5.9.6"}}) ===> Fetching gen_rpc (from {git,"https://github.com/emqx/gen_rpc",{tag,"2.8.1"}}) ===> Fetching rebar3_hex v7.0.6 ===> Fetching hex_core v0.8.4 ===> Fetching verl v1.1.1 ===> Analyzing applications... ===> Compiling hex_core ===> Compiling verl ===> Compiling rebar3_hex ===> Fetching gproc (from {git,"https://github.com/uwiger/gproc",{tag,"0.8.0"}}) ===> Fetching hocon (from {git,"https://github.com/emqx/hocon.git",{tag,"0.39.4"}}) ===> Fetching jiffy (from {git,"https://github.com/emqx/jiffy",{tag,"1.0.5"}}) ===> Fetching pc (from {git,"https://github.com/emqx/port_compiler.git",{tag,"v1.11.1"}}) ===> Analyzing applications... ===> Compiling pc ===> Fetching lc (from {git,"https://github.com/emqx/lc.git",{tag,"0.3.2"}}) ===> Fetching pbkdf2 (from {git,"https://github.com/emqx/erlang-pbkdf2.git",{tag,"2.0.4"}}) ===> Fetching recon (from {git,"https://github.com/ferd/recon",{tag,"2.5.1"}}) ===> Fetching snabbkaffe (from {git,"https://github.com/kafka4beam/snabbkaffe.git", {tag,"1.0.8"}}) ===> Fetching cowlib (from {git,"https://github.com/ninenines/cowlib",{tag,"2.8.0"}}) ===> Fetching eetcd (from {git,"https://github.com/zhongwencool/eetcd",{tag,"v0.3.4"}}) ===> Fetching rebar3_gpb_plugin v2.13.1 ===> Fetching gpb v4.11.1 ===> Analyzing applications... ===> Compiling gpb ===> Compiling rebar3_gpb_plugin Compiling descriptor.proto... Compiling gpb_descriptor.erl... Compiling gpb_compile_descr.erl... ===> Fetching rebar3_eetcd_plugin v0.3.0 ===> Fetching providers v1.8.1 ===> Fetching getopt v1.0.1 ===> Analyzing applications... ===> Compiling getopt ===> Compiling providers ===> Compiling gpb ===> Compiling rebar3_eetcd_plugin ===> Fetching getopt v1.0.1 ===> Fetching mria (from {git,"https://github.com/emqx/mria",{tag,"0.5.2"}}) ===> Fetching ranch (from {git,"https://github.com/ninenines/ranch",{tag,"1.8.0"}}) ===> Skipping snabbkaffe (from {git,"https://github.com/kafka4beam/snabbkaffe", {tag,"1.0.0"}}) as an app of the same name has already been fetched ===> Skipping snabbkaffe (from {git,"https://github.com/kafka4beam/snabbkaffe", {tag,"0.17.1"}}) as an app of the same name has already been fetched ===> Skipping snabbkaffe v1.0.1 as an app of the same name has already been fetched ===> Fetching typerefl (from {git,"https://github.com/k32/typerefl.git",{tag,"0.9.0"}}) ===> Skipping typerefl (from {git,"https://github.com/ieQu1/typerefl.git",{tag,"0.9.1"}}) as an app of the same name has already been fetched ===> Skipping gen_rpc (from {git,"https://github.com/emqx/gen_rpc",{tag,"3.0.1"}}) as an app of the same name has already been fetched ===> Fetching gun v1.3.3 ===> Fetching mnesia_rocksdb (from {git,"https://github.com/emqx/mnesia_rocksdb", {tag,"0.1.12"}}) ===> Fetching optvar (from {git,"https://github.com/emqx/optvar",{tag,"1.0.4"}}) ===> Fetching replayq (from {git,"https://github.com/emqx/replayq",{tag,"0.3.6"}}) ===> Fetching coveralls v2.2.0 ===> Analyzing applications... ===> Compiling coveralls ===> Skipping snabbkaffe (from {git,"https://github.com/kafka4beam/snabbkaffe", {tag,"1.0.7"}}) as an app of the same name has already been fetched ===> Skipping cowlib v2.7.3 as an app of the same name has already been fetched ===> Fetching rocksdb (from {git,"https://github.com/emqx/erlang-rocksdb.git", {tag,"1.7.2-emqx-9"}}) ===> Fetching sext v1.8.0 -- Building for: Visual Studio 17 2022 -- The C compiler identification is MSVC 19.32.31329.0 -- The CXX compiler identification is MSVC 19.32.31329.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- LZ4 library: D:/download/emqx-plugin-template-master/_build/default/lib/rocksdb/_build/cmake/lz4/lib/lz4.lib -- LZ4 includes: D:/download/emqx-plugin-template-master/_build/default/lib/rocksdb/_build/cmake/lz4/include -- Snappy library: D:/download/emqx-plugin-template-master/_build/default/lib/rocksdb/_build/cmake/snappy/lib/snappy.lib -- Snappy includes: D:/download/emqx-plugin-template-master/_build/default/lib/rocksdb/_build/cmake/snappy/include -- cmake args -DCMAKE_POSITION_INDEPENDENT_CODE=ON;-DCMAKE_CXX_COMPILER=C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe;-DCMAKE_AR=C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/lib.exe;-DCMAKE_BUILD_TYPE=Release;-DFAIL_ON_WARNINGS=OFF;-DPORTABLE=ON;-DUSE_RTTI=1;-DWITH_TOOLS=OFF;-DWITH_TESTS=OFF;-DWITH_GFLAGS=OFF;-DWITH_JEMALLOC=OFF;-DWITH_TBB=;-DWITH_SNAPPY=TRUE;-DWITH_LZ4=TRUE;-DWITH_ZLIB=;-DWITH_BZ2=;-DWITH_ZSTD=;-DWITHOUT_THIRDPARTY_INC=ON;-Dsnappy_ROOT_DIR=D:/download/emqx-plugin-template-master/_build/default/lib/rocksdb/_build/cmake/snappy;-Dlz4_ROOT_DIR=D:/download/emqx-plugin-template-master/_build/default/lib/rocksdb/_build/cmake/lz4 -- Found RocksDB library: D:/download/emqx-plugin-template-master/_build/default/lib/rocksdb/_build/cmake/rocksdb-prefix/src/rocksdb-build/Release/rocksdb.lib -- Found RocksDB includes: D:/download/emqx-plugin-template-master/_build/default/lib/rocksdb/c_src/../deps/rocksdb/include -- Using OTP lib: c:/Erlang/lib - found -- Using erl_interface version: erl_interface-5.4 -- Using erts version: erts-14.0.1 -- Configuring done -- Generating done -- Build files have been written to: D:/download/emqx-plugin-template-master/_build/default/lib/rocksdb/_build/cmake ===> Compiling d:/download/emqx-plugin-template-master/c_src/decoder.c ===> Uncaught error in rebar_core. Run with DIAGNOSTIC=1 to see stacktrace or consult rebar3.crashdump ===> When submitting a bug report, please include the output of 'rebar3 report "your command"' make: *** [Makefile:49: rel] Error 1

rebar3.crashdump
Error: badarg [{re,replace, [[77,105,99,114,111,115,111,102,116,32,40,82,41,32,67,47,67,43,43,32, 52572,51201,54868,32,52980,54028,51068,47084,32,48260,51204,32,49,57, 46,51,50,46,51,49,51,50,57,40,120,54,52,41,10,67,111,112,121,114,105, 103,104,116,32,40,99,41,32,77,105,99,114,111,115,111,102,116,32,67,111, 114,112,111,114,97,116,105,111,110,46,32,65,108,108,32,114,105,103,104, 116,115,32,114,101,115,101,114,118,101,100,46,10,10,100,101,99,111,100, 101,114,46,99,10,99,95,115,114,99,47,100,101,99,111,100,101,114,46,99, 40,52,41,58,32,102,97,116,97,108,32,101,114,114,111,114,32,67,49,48,56, 51,58,32,54252,54632,32,54028,51068,51012,32,50676,32,49688,32,50630, 49845,45768,45796,46,32,39,97,115,115,101,114,116,46,104,39,58,32,78, 111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101, 99,116,111,114,121,10], "c_src/decoder.c", "d:/download/emqx-plugin-template-master/c_src/decoder.c", [{return,list},global]], [{file,"re.erl"},{line,987},{error_info,#{module => erl_stdlib_errors}}]}, {pc_compilation,exec_compiler,4, [{file,"d:/download/emqx-plugin-template-master/_build/default/plugins/pc/src/pc_compilation.erl"}, {line,197}]}, {pc_compilation,compile_each,5, [{file,"d:/download/emqx-plugin-template-master/_build/default/plugins/pc/src/pc_compilation.erl"}, {line,135}]}, {pc_compilation,'-compile_sources/2-lists^foldl/2-0-',3, [{file,"d:/download/emqx-plugin-template-master/_build/default/plugins/pc/src/pc_compilation.erl"}, {line,96}]}, {pc_compilation,compile_sources,2, [{file,"d:/download/emqx-plugin-template-master/_build/default/plugins/pc/src/pc_compilation.erl"}, {line,96}]}, {pc_compilation,compile_and_link,2, [{file,"d:/download/emqx-plugin-template-master/_build/default/plugins/pc/src/pc_compilation.erl"}, {line,42}]}, {pc_prv_compile,'-do/1-lc$^0/1-0-',2, [{file,"d:/download/emqx-plugin-template-master/_build/default/plugins/pc/src/pc_prv_compile.erl"}, {line,53}]}, {pc_prv_compile,do,1, [{file,"d:/download/emqx-plugin-template-master/_build/default/plugins/pc/src/pc_prv_compile.erl"}, {line,54}]}]

$ rebar3 --version rebar 3.22.0 on Erlang/OTP 26 Erts 14.0.1

erlang version is otp_win64_26.0.1

How can I fix this?

Unable to get hooks value after enabling plugin

I have enabled the emqttd_plugin_template in the broker but how would I get the metrics from a broker as described in plugins description.

Description of plugin is-

The plugin could register callbacks for hooks. The hooks will be run by the broker when a client connected/disconnected, a topic subscribed/unsubscribed or a message published/delivered:

client.connected Run when a client connected to the broker successfully
client.subscribe Run before a client subscribes topics
client.subscribe.after Run after a client subscribed topics
client.unsubscribe Run when a client unsubscribes topics
message.publish Run when a message is published
message.delivered Run when a message is delivered
message.acked Run when a message(qos1/2) is acked
client.disconnected Run when a client is disconnnected

Problem - According to the description, I am unable to get the metrics information from a broker like when the client connected , client disconnected, message published, message delivered and message acknowledged.

Issue posting MQTT messages

So I am using an Ubuntu 16.04 on AWS with EMQX 3.1, trying to post MQTT messages to my Dreamfactory mySQL. I am following this tutorial: Learn, How to save MQTT messages into a MySQL Database, which runs on EMQ 2.3.5. So far the only thing you had to modify there was this code on:

ubuntu@ip-172-31-19-97:~/emqx-rel/deps/emqx_plugin_template/src$ nano emqx_plugin_template.erl

%% Transform message and return
on_message_publish(Message = #message{topic = <<"$SYS/", _/binary>>}, _Env) ->
    {ok, Message};

on_message_publish(Message, _Env) ->

    io:format("publish ~s~n", [emqttd_message:format(Message)]),
    MessageBin = element(12, Message),
    MessageStr = binary_to_list(MessageBin),inets:start(),
    Method = post,URL = "http://127.0.0.1/api/v2/mysql/_table/log",
    Header = [{"X-DreamFactory-Api-Key", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}],
    Type = "application/json",Body = MessageStr,HTTPOptions = [],
    Options = [],
    R = httpc:request(Method, {URL, Header, Type, Body}, HTTPOptions, Options),

    {ok, Message}.

I am wondering if there is anything that I need to change in order to make in work in EMQX 3.1.

I have tried changing the emqtt_message:format to emqx_message:format following the full code structure but it didn't work.

Configuration is different from included plugins

Im not sure how you get any configuration data into the plugin as its quite different from any of the other included plugins. How do we access it?

Also there is no priv folder with a schema file in it

Cheers

Plugin Development Is not Clear or Difficult to follow

I'd like to develop my own plugin that performs custom actions, and am not entirely sure how to go about it... When can we have a plugin development guide ready?

What I'd like to know:

3. Add the plugin development guide

emqx-plugin-template auth problem

I try emqx-plugin-template v3.0.0 in emqx 3.0.0, if open emqx-plugin-template plugin,any username and password will auth success, which version fix this problem

Could tell me which version fixed this issue? This record is not found in the updated log and issues

Compilation of emqx_plugin_template plugin with EMQX fails

Hi,

I am following the documentation to compile emqx with the template plugin:

export EMQX_EXTRA_PLUGINS=emqx_plugin_template
make

Output/Error:

===> Verifying dependencies...
===> Fetching emqx_plugin_template (from {git,"https://github.com/emqx/emqx-plugin-template",
                                {tag,"4.3.0"}})
===> Compiling emqx_plugin_template
===> Compiling _build/default/lib/emqx_plugin_template/src/emqx_plugin_template.erl failed
emqx_plugin_template.erl:19: can't find include file "emqx.hrl"

emqx_plugin_template.erl:145: record message undefined
emqx_plugin_template.erl:152: record message undefined

make: *** [Makefile:78: emqx] Error 1                                

PS. I know this is community supported but I am an erlang newbie to contribute a fix here.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.