Merge branch 'dev/v5.0' into umbrella-for-430

This commit is contained in:
Zaiming Shi 2020-12-02 17:37:34 +01:00
commit 5f0f91bb15
831 changed files with 80322 additions and 462 deletions

14
.gitignore vendored
View File

@ -12,32 +12,26 @@ ebin
test/ebin/*.beam test/ebin/*.beam
.exrc .exrc
plugins/*/ebin plugins/*/ebin
log/
*.swp *.swp
*.so *.so
.erlang.mk/ .erlang.mk/
cover/ cover/
emqx.d
eunit.coverdata eunit.coverdata
test/ct.cover.spec test/ct.cover.spec
logs
ct.coverdata ct.coverdata
.idea/ .idea/
emqx.iml
_rel/
data/
_build _build
.rebar3 .rebar3
rebar3.crashdump rebar3.crashdump
.DS_Store .DS_Store
emqx.iml
bbmustache/
etc/gen.emqx.conf etc/gen.emqx.conf
compile_commands.json compile_commands.json
cuttlefish cuttlefish
rebar.lock
xrefr xrefr
erlang.mk
*.coverdata *.coverdata
etc/emqx.conf.rendered etc/emqx.conf.rendered
Mnesia.*/ Mnesia.*/
*.DS_Store
_checkouts
rebar.config.rendered
/rebar3

183
Makefile
View File

@ -1,139 +1,62 @@
## shallow clone for speed REBAR_VERSION = 3.13.2-emqx-3
REBAR = ./rebar3
REBAR_GIT_CLONE_OPTIONS += --depth 1 PROFILE ?= emqx
export REBAR_GIT_CLONE_OPTIONS PROFILES := emqx emqx-edge
PKG_PROFILES := emqx-pkg emqx-edge-pkg
SUITES_FILES := $(shell find test -name '*_SUITE.erl' | sort) export REBAR_GIT_CLONE_OPTIONS=--depth=1
CT_SUITES := $(foreach value,$(SUITES_FILES),$(shell val=$$(basename $(value) .erl); echo $${val%_*})) .PHONY: default
default: $(REBAR) $(PROFILE)
CT_NODE_NAME = emqxct@127.0.0.1
RUN_NODE_NAME = emqxdebug@127.0.0.1
.PHONY: all .PHONY: all
all: compile all: $(REBAR) $(PROFILES)
.PHONY: tests .PHONY: ensure-rebar3
tests: eunit ct ensure-rebar3:
@./ensure-rebar3.sh $(REBAR_VERSION)
.PHONY: run $(REBAR): ensure-rebar3
run: run_setup unlock
@rebar3 as test get-deps
@rebar3 as test auto --name $(RUN_NODE_NAME) --script scripts/run_emqx.escript
.PHONY: run_setup
run_setup:
@erl -noshell -eval \
"{ok, [[HOME]]} = init:get_argument(home), \
FilePath = HOME ++ \"/.config/rebar3/rebar.config\", \
case file:consult(FilePath) of \
{ok, Term} -> \
NewTerm = case lists:keyfind(plugins, 1, Term) of \
false -> [{plugins, [rebar3_auto]} | Term]; \
{plugins, OldPlugins} -> \
NewPlugins0 = OldPlugins -- [rebar3_auto], \
NewPlugins = [rebar3_auto | NewPlugins0], \
lists:keyreplace(plugins, 1, Term, {plugins, NewPlugins}) \
end, \
ok = file:write_file(FilePath, [io_lib:format(\"~p.\n\", [I]) || I <- NewTerm]); \
_Enoent -> \
os:cmd(\"mkdir -p ~/.config/rebar3/ \"), \
NewTerm=[{plugins, [rebar3_auto]}], \
ok = file:write_file(FilePath, [io_lib:format(\"~p.\n\", [I]) || I <- NewTerm]) \
end, \
halt(0)."
.PHONY: shell
shell:
@rebar3 as test auto
compile: unlock
@rebar3 compile
unlock:
@rebar3 unlock
clean: distclean
## Cuttlefish escript is built by default when cuttlefish app (as dependency) was built
CUTTLEFISH_SCRIPT := _build/default/lib/cuttlefish/cuttlefish
.PHONY: cover
cover:
@rebar3 cover
.PHONY: coveralls
coveralls:
@rebar3 as test coveralls send
.PHONY: xref
xref:
@rebar3 xref
.PHONY: dialyzer
dialyzer:
@rebar3 dialyzer
.PHONY: proper
proper:
@rebar3 proper -d test/props -c
.PHONY: deps
deps:
@rebar3 get-deps
.PHONY: eunit
eunit:
@rebar3 eunit -v
.PHONY: ct_setup
ct_setup:
rebar3 as test compile
@mkdir -p data
@if [ ! -f data/loaded_plugins ]; then touch data/loaded_plugins; fi
@ln -s -f '../../../../etc' _build/test/lib/emqx/
@ln -s -f '../../../../data' _build/test/lib/emqx/
.PHONY: ct
ct: ct_setup
@rebar3 ct -v --name $(CT_NODE_NAME) --suite=$(shell echo $(foreach var,$(CT_SUITES),test/$(var)_SUITE) | tr ' ' ',')
## Run one single CT with rebar3
## e.g. make ct-one-suite suite=emqx_bridge
.PHONY: $(SUITES:%=ct-%)
$(CT_SUITES:%=ct-%): ct_setup
@rebar3 ct -v --readable=false --name $(CT_NODE_NAME) --suite=$(@:ct-%=%)_SUITE --cover
.PHONY: app.config
app.config: $(CUTTLEFISH_SCRIPT) etc/gen.emqx.conf
$(CUTTLEFISH_SCRIPT) -l info -e etc/ -c etc/gen.emqx.conf -i priv/emqx.schema -d data/
$(CUTTLEFISH_SCRIPT):
@rebar3 get-deps
@if [ ! -f cuttlefish ]; then make -C _build/default/lib/cuttlefish; fi
bbmustache:
@git clone https://github.com/soranoba/bbmustache.git && cd bbmustache && ./rebar3 compile && cd ..
# This hack is to generate a conf file for testing
# relx overlay is used for release
etc/gen.emqx.conf: bbmustache etc/emqx.conf
@erl -noshell -pa bbmustache/_build/default/lib/bbmustache/ebin -eval \
"{ok, Temp} = file:read_file('etc/emqx.conf'), \
{ok, Vars0} = file:consult('vars'), \
Vars = [{atom_to_list(N), list_to_binary(V)} || {N, V} <- Vars0], \
Targ = bbmustache:render(Temp, Vars), \
ok = file:write_file('etc/gen.emqx.conf', Targ), \
halt(0)."
.PHONY: gen-clean
gen-clean:
@rm -rf bbmustache
@rm -f etc/gen.emqx.conf etc/emqx.conf.rendered
.PHONY: distclean .PHONY: distclean
distclean: gen-clean distclean:
@rm -rf Mnesia.* @rm -rf _build
@rm -rf _build cover deps logs log data
@rm -f rebar.lock compile_commands.json cuttlefish erl_crash.dump .PHONY: $(PROFILES)
$(PROFILES:%=%): $(REBAR)
ifneq ($(shell echo $(@) |grep edge),)
export EMQX_DESC="EMQ X Edge"
else
export EMQX_DESC="EMQ X Broker"
endif
$(REBAR) as $(@) release
.PHONY: $(PROFILES:%=build-%)
$(PROFILES:%=build-%): $(REBAR)
$(REBAR) as $(@:build-%=%) compile
# rebar clean
.PHONY: clean $(PROFILES:%=clean-%)
clean: $(PROFILES:%=clean-%) clean-stamps
$(PROFILES:%=clean-%): $(REBAR)
$(REBAR) as $(@:clean-%=%) clean
.PHONY: clean-stamps
clean-stamps:
find -L _build -name '.stamp' -type f | xargs rm -f
.PHONY: deps-all
deps-all: $(REBAR) $(PROFILES:%=deps-%) $(PKG_PROFILES:%=deps-%)
.PHONY: $(PROFILES:%=deps-%) $(PKG_PROFILES:%=deps-%)
$(PROFILES:%=deps-%) $(PKG_PROFILES:%=deps-%): $(REBAR)
ifneq ($(shell echo $(@) |grep edge),)
export EMQX_DESC="EMQ X Edge"
else
export EMQX_DESC="EMQ X Broker"
endif
$(REBAR) as $(@:deps-%=%) get-deps
include packages.mk
include docker.mk

1
apps/emqx/rebar.config Normal file
View File

@ -0,0 +1 @@
{deps, []}.

View File

@ -1,11 +1,10 @@
{application, emqx, {application, emqx,
[{description, "EMQ X Broker"}, [{description, "EMQ X Broker"},
{id, "emqx"}, {id, "emqx"},
{vsn, "git"}, {vsn, "5.0.0"}, % strict semver, bump manually!
{modules, []}, {modules, []},
{registered, []}, {registered, []},
{applications, [kernel,stdlib,gproc,gen_rpc,esockd,cowboy, {applications, [kernel,stdlib,gproc,gen_rpc,esockd,cowboy,sasl,os_mon,emqx_libs]},
sasl,os_mon]},
{mod, {emqx_app,[]}}, {mod, {emqx_app,[]}},
{env, []}, {env, []},
{licenses, ["Apache-2.0"]}, {licenses, ["Apache-2.0"]},

View File

@ -16,9 +16,9 @@
-module(emqx). -module(emqx).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[EMQ X]"). -logger_header("[EMQ X]").

View File

@ -16,7 +16,7 @@
-module(emqx_access_control). -module(emqx_access_control).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-export([authenticate/1]). -export([authenticate/1]).

View File

@ -16,7 +16,7 @@
-module(emqx_access_rule). -module(emqx_access_rule).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
%% APIs %% APIs
-export([ match/3 -export([ match/3

View File

@ -16,7 +16,7 @@
-module(emqx_acl_cache). -module(emqx_acl_cache).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-export([ list_acl_cache/0 -export([ list_acl_cache/0
, get_acl_cache/2 , get_acl_cache/2

View File

@ -18,8 +18,8 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[Alarm Handler]"). -logger_header("[Alarm Handler]").

View File

@ -18,8 +18,8 @@
-behaviour(gen_event). -behaviour(gen_event).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[Alarm Handler]"). -logger_header("[Alarm Handler]").

View File

@ -18,9 +18,9 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Banned]"). -logger_header("[Banned]").

View File

@ -18,10 +18,10 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-logger_header("[Broker]"). -logger_header("[Broker]").

View File

@ -18,8 +18,8 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Broker Helper]"). -logger_header("[Broker Helper]").

View File

@ -17,10 +17,10 @@
%% MQTT Channel %% MQTT Channel
-module(emqx_channel). -module(emqx_channel).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Channel]"). -logger_header("[Channel]").

View File

@ -19,9 +19,9 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[CM]"). -logger_header("[CM]").

View File

@ -16,8 +16,8 @@
-module(emqx_cm_locker). -module(emqx_cm_locker).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export([start_link/0]). -export([start_link/0]).

View File

@ -19,9 +19,9 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Registry]"). -logger_header("[Registry]").

View File

@ -17,10 +17,10 @@
%% MQTT/TCP|TLS Connection %% MQTT/TCP|TLS Connection
-module(emqx_connection). -module(emqx_connection).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[MQTT]"). -logger_header("[MQTT]").

View File

@ -18,8 +18,8 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[Ctl]"). -logger_header("[Ctl]").

View File

@ -18,9 +18,9 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[Flapping]"). -logger_header("[Flapping]").

View File

@ -16,8 +16,8 @@
-module(emqx_frame). -module(emqx_frame).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-export([ initial_parse_state/0 -export([ initial_parse_state/0
, initial_parse_state/1 , initial_parse_state/1

View File

@ -26,7 +26,7 @@
-module(emqx_gc). -module(emqx_gc).
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export([ init/1 -export([ init/1
, run/2 , run/2

View File

@ -18,7 +18,7 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export([start_link/0, stop/0]). -export([start_link/0, stop/0]).

View File

@ -18,8 +18,8 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Hooks]"). -logger_header("[Hooks]").

View File

@ -17,7 +17,7 @@
%% Ratelimit or Quota checker %% Ratelimit or Quota checker
-module(emqx_limiter). -module(emqx_limiter).
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export([ init/2 -export([ init/2
, init/4 %% XXX: Compatible with before 4.2 version , init/4 %% XXX: Compatible with before 4.2 version

View File

@ -17,7 +17,7 @@
%% @doc Start/Stop MQTT listeners. %% @doc Start/Stop MQTT listeners.
-module(emqx_listeners). -module(emqx_listeners).
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
%% APIs %% APIs
-export([ start/0 -export([ start/0

View File

@ -18,9 +18,9 @@
-compile(inline). -compile(inline).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
%% Create %% Create
-export([ make/2 -export([ make/2

View File

@ -18,10 +18,10 @@
-behavior(gen_server). -behavior(gen_server).
-include("logger.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/types.hrl").
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-logger_header("[Metrics]"). -logger_header("[Metrics]").

View File

@ -18,8 +18,8 @@
-compile(inline). -compile(inline).
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-export([ merge_opts/2 -export([ merge_opts/2
, maybe_apply/2 , maybe_apply/2

View File

@ -18,8 +18,8 @@
-behaviour(emqx_gen_mod). -behaviour(emqx_gen_mod).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[ACL_INTERNAL]"). -logger_header("[ACL_INTERNAL]").

View File

@ -19,8 +19,8 @@
-behaviour(gen_server). -behaviour(gen_server).
-behaviour(emqx_gen_mod). -behaviour(emqx_gen_mod).
-include_lib("emqx/include/emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include_lib("emqx/include/logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
%% Mnesia bootstrap %% Mnesia bootstrap
-export([mnesia/1]). -export([mnesia/1]).

View File

@ -18,8 +18,8 @@
-behaviour(emqx_gen_mod). -behaviour(emqx_gen_mod).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[Presence]"). -logger_header("[Presence]").

View File

@ -18,8 +18,8 @@
-behaviour(emqx_gen_mod). -behaviour(emqx_gen_mod).
-include_lib("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include_lib("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-ifdef(TEST). -ifdef(TEST).
-export([ compile/1 -export([ compile/1

View File

@ -18,8 +18,8 @@
-behaviour(emqx_gen_mod). -behaviour(emqx_gen_mod).
-include_lib("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include_lib("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
%% emqx_gen_mod callbacks %% emqx_gen_mod callbacks
-export([ load/1 -export([ load/1

View File

@ -18,7 +18,7 @@
-behaviour(supervisor). -behaviour(supervisor).
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export([ start_link/0 -export([ start_link/0
, start_child/1 , start_child/1

View File

@ -19,9 +19,9 @@
-behaviour(gen_server). -behaviour(gen_server).
-behaviour(emqx_gen_mod). -behaviour(emqx_gen_mod).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-logger_header("[TOPIC_METRICS]"). -logger_header("[TOPIC_METRICS]").
@ -52,6 +52,9 @@
, all_registered_topics/0 , all_registered_topics/0
]). ]).
%% stats.
-export([ rates/2 ]).
%% gen_server callbacks %% gen_server callbacks
-export([ init/1 -export([ init/1
, handle_call/3 , handle_call/3
@ -78,13 +81,15 @@
]). ]).
-define(TICKING_INTERVAL, 1). -define(TICKING_INTERVAL, 1).
-define(SPEED_AVERAGE_WINDOW_SIZE, 5).
-define(SPEED_MEDIUM_WINDOW_SIZE, 60).
-define(SPEED_LONG_WINDOW_SIZE, 300).
-record(speed, { -record(speed, {
last = 0 :: number(), last = 0 :: number(),
tick = 1 :: number(),
last_v = 0 :: number(), last_v = 0 :: number(),
acc = 0 :: number(), last_medium = 0 :: number(),
samples = [] :: list() last_long = 0 :: number()
}). }).
-record(state, { -record(state, {
@ -180,7 +185,15 @@ val(Topic, Metric) ->
end. end.
rate(Topic, Metric) -> rate(Topic, Metric) ->
gen_server:call(?MODULE, {get_rate, Topic, Metric}). case rates(Topic, Metric) of
#{short := Last} ->
Last;
{error, Reason} ->
{error, Reason}
end.
rates(Topic, Metric) ->
gen_server:call(?MODULE, {get_rates, Topic, Metric}).
metrics(Topic) -> metrics(Topic) ->
case ets:lookup(?TAB, Topic) of case ets:lookup(?TAB, Topic) of
@ -253,7 +266,7 @@ handle_call({unregister, Topic}, _From, State = #state{speeds = Speeds}) ->
{reply, ok, State#state{speeds = NSpeeds}} {reply, ok, State#state{speeds = NSpeeds}}
end; end;
handle_call({get_rate, Topic, Metric}, _From, State = #state{speeds = Speeds}) -> handle_call({get_rates, Topic, Metric}, _From, State = #state{speeds = Speeds}) ->
case is_registered(Topic) of case is_registered(Topic) of
false -> false ->
{reply, {error, topic_not_found}, State}; {reply, {error, topic_not_found}, State};
@ -261,8 +274,8 @@ handle_call({get_rate, Topic, Metric}, _From, State = #state{speeds = Speeds}) -
case maps:get({Topic, Metric}, Speeds, undefined) of case maps:get({Topic, Metric}, Speeds, undefined) of
undefined -> undefined ->
{reply, {error, invalid_metric}, State}; {reply, {error, invalid_metric}, State};
#speed{last = Last} -> #speed{last = Short, last_medium = Medium, last_long = Long} ->
{reply, Last, State} {reply, #{ short => Short, medium => Medium, long => Long }, State}
end end
end. end.
@ -358,25 +371,29 @@ counters_size() ->
number_of_registered_topics() -> number_of_registered_topics() ->
proplists:get_value(size, ets:info(?TAB)). proplists:get_value(size, ets:info(?TAB)).
calculate_speed(CurVal, #speed{last_v = LastVal, tick = Tick, acc = Acc, samples = Samples}) -> calculate_speed(CurVal, #speed{last = Last,
last_v = LastVal,
last_medium = LastMedium,
last_long = LastLong
}) ->
%% calculate the current speed based on the last value of the counter %% calculate the current speed based on the last value of the counter
CurSpeed = (CurVal - LastVal) / ?TICKING_INTERVAL, CurSpeed = (CurVal - LastVal) / ?TICKING_INTERVAL,
#speed{
last_v = CurVal,
last = short_mma(Last, CurSpeed),
last_medium = medium_mma(LastMedium, CurSpeed),
last_long = long_mma(LastLong, CurSpeed)
}.
%% calculate the average speed in last 5 seconds %% Modified Moving Average ref: https://en.wikipedia.org/wiki/Moving_average
case Tick < 5 of mma(WindowSize, LastSpeed, CurSpeed) ->
true -> (LastSpeed * (WindowSize - 1) + CurSpeed) / WindowSize.
Acc1 = Acc + CurSpeed,
#speed{last = Acc1 / Tick, short_mma(LastSpeed, CurSpeed) ->
last_v = CurVal, mma(?SPEED_AVERAGE_WINDOW_SIZE, LastSpeed, CurSpeed).
acc = Acc1,
samples = Samples ++ [CurSpeed], medium_mma(LastSpeed, CurSpeed) ->
tick = Tick + 1}; mma(?SPEED_MEDIUM_WINDOW_SIZE, LastSpeed, CurSpeed).
false ->
[FirstSpeed | Speeds] = Samples, long_mma(LastSpeed, CurSpeed) ->
Acc1 = Acc + CurSpeed - FirstSpeed, mma(?SPEED_LONG_WINDOW_SIZE, LastSpeed, CurSpeed).
#speed{last = Acc1 / Tick,
last_v = CurVal,
acc = Acc1,
samples = Speeds ++ [CurSpeed],
tick = Tick}
end.

View File

@ -16,7 +16,7 @@
-module(emqx_modules). -module(emqx_modules).
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[Modules]"). -logger_header("[Modules]").

View File

@ -16,8 +16,8 @@
-module(emqx_mountpoint). -module(emqx_mountpoint).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export([ mount/2 -export([ mount/2
, unmount/2 , unmount/2

View File

@ -17,8 +17,8 @@
%% @doc MQTTv5 Capabilities %% @doc MQTTv5 Capabilities
-module(emqx_mqtt_caps). -module(emqx_mqtt_caps).
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export([ check_pub/2 -export([ check_pub/2
, check_sub/3 , check_sub/3

View File

@ -17,7 +17,7 @@
%% @doc MQTT5 Properties %% @doc MQTT5 Properties
-module(emqx_mqtt_props). -module(emqx_mqtt_props).
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-export([ id/1 -export([ id/1
, name/1 , name/1

View File

@ -49,9 +49,9 @@
-module(emqx_mqueue). -module(emqx_mqueue).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-export([ init/1 -export([ init/1
, info/1 , info/1

View File

@ -18,7 +18,7 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[OS_MON]"). -logger_header("[OS_MON]").
@ -47,7 +47,7 @@
, code_change/3 , code_change/3
]). ]).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-define(OS_MON, ?MODULE). -define(OS_MON, ?MODULE).

View File

@ -16,8 +16,8 @@
-module(emqx_packet). -module(emqx_packet).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
%% Header APIs %% Header APIs
-export([ type/1 -export([ type/1

View File

@ -17,7 +17,7 @@
%% @doc The utility functions for erlang process dictionary. %% @doc The utility functions for erlang process dictionary.
-module(emqx_pd). -module(emqx_pd).
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export([ get_counters/1 -export([ get_counters/1
, get_counter/1 , get_counter/1

View File

@ -16,8 +16,8 @@
-module(emqx_plugins). -module(emqx_plugins).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[Plugins]"). -logger_header("[Plugins]").
@ -234,7 +234,7 @@ generate_configs(App) ->
Conf = cuttlefish_conf:file(ConfFile), Conf = cuttlefish_conf:file(ConfFile),
cuttlefish_generator:map(Schema, Conf); cuttlefish_generator:map(Schema, Conf);
{false, false} -> {false, false} ->
error(no_avaliable_configuration) error({config_not_found, {ConfigFile, ConfFile, SchemaFile}})
end. end.
apply_configs([]) -> apply_configs([]) ->

View File

@ -18,8 +18,8 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Pool]"). -logger_header("[Pool]").

View File

@ -18,7 +18,7 @@
-behaviour(supervisor). -behaviour(supervisor).
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export([spec/1, spec/2]). -export([spec/1, spec/2]).

View File

@ -16,7 +16,7 @@
-module(emqx_psk). -module(emqx_psk).
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[PSK]"). -logger_header("[PSK]").

View File

@ -17,7 +17,7 @@
%% @doc MQTT5 reason codes %% @doc MQTT5 reason codes
-module(emqx_reason_codes). -module(emqx_reason_codes).
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-export([ name/1 -export([ name/1
, name/2 , name/2

View File

@ -18,9 +18,9 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-include_lib("ekka/include/ekka.hrl"). -include_lib("ekka/include/ekka.hrl").
-logger_header("[Router]"). -logger_header("[Router]").

View File

@ -18,9 +18,9 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Router Helper]"). -logger_header("[Router Helper]").

View File

@ -43,10 +43,10 @@
%% MQTT Session %% MQTT Session
-module(emqx_session). -module(emqx_session).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Session]"). -logger_header("[Session]").

View File

@ -18,10 +18,10 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Shared Sub]"). -logger_header("[Shared Sub]").

View File

@ -18,9 +18,9 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Stats]"). -logger_header("[Stats]").

View File

@ -18,7 +18,7 @@
-behaviour(supervisor). -behaviour(supervisor).
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export([ start_link/0 -export([ start_link/0
, start_child/1 , start_child/1

View File

@ -18,9 +18,9 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[SYS]"). -logger_header("[SYS]").

View File

@ -18,8 +18,8 @@
-behavior(gen_server). -behavior(gen_server).
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[SYSMON]"). -logger_header("[SYSMON]").

View File

@ -16,8 +16,8 @@
-module(emqx_tracer). -module(emqx_tracer).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-logger_header("[Tracer]"). -logger_header("[Tracer]").

View File

@ -16,7 +16,7 @@
-module(emqx_trie). -module(emqx_trie).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
%% Mnesia bootstrap %% Mnesia bootstrap
-export([mnesia/1]). -export([mnesia/1]).

View File

@ -16,9 +16,9 @@
-module(emqx_types). -module(emqx_types).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-export_type([ ver/0 -export_type([ ver/0
, qos/0 , qos/0

View File

@ -18,7 +18,7 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
%% APIs %% APIs
-export([start_link/1]). -export([start_link/1]).

View File

@ -17,10 +17,10 @@
%% MQTT/WS|WSS Connection %% MQTT/WS|WSS Connection
-module(emqx_ws_connection). -module(emqx_ws_connection).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[MQTT/WS]"). -logger_header("[MQTT/WS]").

View File

@ -18,10 +18,10 @@
-behaviour(gen_server). -behaviour(gen_server).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include("logger.hrl"). -include_lib("emqx_libs/include/logger.hrl").
-include("types.hrl"). -include_lib("emqx_libs/include/types.hrl").
-logger_header("[Zone]"). -logger_header("[Zone]").

View File

@ -19,7 +19,7 @@
-compile(export_all). -compile(export_all).
-compile(nowarn_export_all). -compile(nowarn_export_all).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include_lib("eunit/include/eunit.hrl"). -include_lib("eunit/include/eunit.hrl").
-include_lib("common_test/include/ct.hrl"). -include_lib("common_test/include/ct.hrl").

View File

@ -19,7 +19,7 @@
-compile(export_all). -compile(export_all).
-compile(nowarn_export_all). -compile(nowarn_export_all).
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include_lib("eunit/include/eunit.hrl"). -include_lib("eunit/include/eunit.hrl").
all() -> emqx_ct:all(?MODULE). all() -> emqx_ct:all(?MODULE).

View File

@ -19,8 +19,8 @@
-compile(export_all). -compile(export_all).
-compile(nowarn_export_all). -compile(nowarn_export_all).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include("emqx_mqtt.hrl"). -include_lib("emqx_libs/include/emqx_mqtt.hrl").
-include_lib("eunit/include/eunit.hrl"). -include_lib("eunit/include/eunit.hrl").
all() -> emqx_ct:all(?MODULE). all() -> emqx_ct:all(?MODULE).

View File

@ -19,7 +19,7 @@
-compile(export_all). -compile(export_all).
-compile(nowarn_export_all). -compile(nowarn_export_all).
-include("emqx.hrl"). -include_lib("emqx_libs/include/emqx.hrl").
-include_lib("eunit/include/eunit.hrl"). -include_lib("eunit/include/eunit.hrl").
all() -> emqx_ct:all(?MODULE). all() -> emqx_ct:all(?MODULE).

Some files were not shown because too many files have changed in this diff Show More