From 818d4741a69cc1f65b7c0b1e2859e1f3948c52bd Mon Sep 17 00:00:00 2001 From: Ery Lee Date: Sat, 7 Mar 2015 01:32:21 +0800 Subject: [PATCH] broker, metrics --- apps/emqtt/include/emqtt_topic.hrl | 4 ++-- apps/emqtt/src/emqtt_app.erl | 3 +++ apps/emqtt/src/emqtt_broker.erl | 15 ++++++++------- apps/emqtt/src/emqtt_metrics.erl | 4 +--- apps/emqtt/src/emqtt_pubsub.erl | 5 +++++ rel/files/app.config | 3 +++ 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/apps/emqtt/include/emqtt_topic.hrl b/apps/emqtt/include/emqtt_topic.hrl index fc7dc1a2d..364606c58 100644 --- a/apps/emqtt/include/emqtt_topic.hrl +++ b/apps/emqtt/include/emqtt_topic.hrl @@ -25,8 +25,8 @@ %%------------------------------------------------------------------------------ -record(topic, { name :: binary(), - type :: static | dynamic | bridge - node :: node(), + type :: static | dynamic | bridge, + node :: node() }). -type topic() :: #topic{}. diff --git a/apps/emqtt/src/emqtt_app.erl b/apps/emqtt/src/emqtt_app.erl index 2b282e9a5..e167c1324 100644 --- a/apps/emqtt/src/emqtt_app.erl +++ b/apps/emqtt/src/emqtt_app.erl @@ -61,6 +61,7 @@ print_vsn() -> start_servers(Sup) -> {ok, SessOpts} = application:get_env(session), {ok, RetainOpts} = application:get_env(retain), + {ok, BrokerOpts} = application:get_env(broker), lists:foreach( fun({Name, F}) when is_function(F) -> ?PRINT("~s is starting...", [Name]), @@ -83,6 +84,8 @@ start_servers(Sup) -> {"emqtt auth", emqtt_auth}, {"emqtt pubsub", emqtt_pubsub}, {"emqtt router", emqtt_router}, + {"emqtt broker", emqtt_broker, BrokerOpts}, + {"emqtt metrics", emqtt_metrics}, {"emqtt monitor", emqtt_monitor} ]). diff --git a/apps/emqtt/src/emqtt_broker.erl b/apps/emqtt/src/emqtt_broker.erl index e6d7fa48e..681f7bc7f 100644 --- a/apps/emqtt/src/emqtt_broker.erl +++ b/apps/emqtt/src/emqtt_broker.erl @@ -58,12 +58,10 @@ start_link(Options) -> gen_server:start_link({local, ?SERVER}, ?MODULE, [Options], []). version() -> - {ok, Version} = application:get_key(emqtt, vsn), - Version. + {ok, Version} = application:get_key(emqtt, vsn), Version. description() -> - {ok, Descr} = application:get_key(emqtt, description), - Descr. + {ok, Descr} = application:get_key(emqtt, description), Descr. uptime() -> gen_server:call(?SERVER, uptime). @@ -78,9 +76,8 @@ init([Options]) -> ets:new(?MODULE, [set, public, name_table, {write_concurrency, true}]), {ok, #state{started_at = os:timestamp(), sys_interval = SysInterval}}. -handle_call(uptime, _From, State = #state{started_at = Ts}) -> - Secs = timer:now_diff(os:timestamp(), Ts) div 1000000, - {reply, uptime(seconds, Secs), State}; +handle_call(uptime, _From, State) -> + {reply, uptime(State), State}; handle_call(_Request, _From, State) -> {reply, ok, State}. @@ -103,6 +100,10 @@ code_change(_OldVsn, State, _Extra) -> systop(Topic) -> <<"$SYS/broker/", Topic/binary>>. +uptime(#state{started_at = Ts}) -> + Secs = timer:now_diff(os:timestamp(), Ts) div 1000000, + uptime(seconds, Secs). + uptime(seconds, Secs) when Secs < 60 -> [integer_to_list(Secs), " seconds"]; uptime(seconds, Secs) -> diff --git a/apps/emqtt/src/emqtt_metrics.erl b/apps/emqtt/src/emqtt_metrics.erl index 8b9ea662a..ca69551a3 100644 --- a/apps/emqtt/src/emqtt_metrics.erl +++ b/apps/emqtt/src/emqtt_metrics.erl @@ -80,7 +80,7 @@ dec(Metric, Val) -> init(_Args) -> % Bytes sent and received - [ok = emqtt_pubsub:create(<<"$SYS/broker/", Topic/binary>>) || Topic <- ?SYSTOP_METRICS], + [ok = emqtt_pubsub:create(Topic) || Topic <- ?SYSTOP_METRICS], % $SYS/broker/version %## Uptime % $SYS/broker/uptime @@ -111,5 +111,3 @@ code_change(_OldVsn, State, _Extra) -> %% Internal Function Definitions %% ------------------------------------------------------------------ - - diff --git a/apps/emqtt/src/emqtt_pubsub.erl b/apps/emqtt/src/emqtt_pubsub.erl index 3dac3aac0..ec80235cf 100644 --- a/apps/emqtt/src/emqtt_pubsub.erl +++ b/apps/emqtt/src/emqtt_pubsub.erl @@ -39,6 +39,7 @@ -export([start_link/0]). -export([topics/0, + create/1, subscribe/2, unsubscribe/2, publish/1, @@ -94,6 +95,10 @@ start_link() -> topics() -> mnesia:dirty_all_keys(topic). +%TODO +create(Topic) -> + ok. + %% %% @doc Subscribe Topic or Topics %% diff --git a/rel/files/app.config b/rel/files/app.config index 6d2c17c06..399e43c25 100644 --- a/rel/files/app.config +++ b/rel/files/app.config @@ -49,6 +49,9 @@ {retain, [ {store_limit, 100000} ]}, + {broker, [ + {sys_interval, 60} + ]}, {listen, [ {mqtt, 1883, [ {backlog, 512},