Log MQTT connection.
This commit is contained in:
parent
954016c69f
commit
17e4c707c6
|
|
@ -20,8 +20,7 @@
|
|||
-record(state, { socket,
|
||||
conn_name,
|
||||
await_recv,
|
||||
no_data_received,
|
||||
connected_at,
|
||||
protocol_connected,
|
||||
connection_state,
|
||||
keepalive,
|
||||
keepalive_sup,
|
||||
|
|
|
|||
|
|
@ -56,23 +56,22 @@ init([KeepaliveSup, Ref, Sock]) ->
|
|||
rabbit_net:accept_ack(Ref, Sock),
|
||||
case rabbit_net:connection_string(Sock, inbound) of
|
||||
{ok, ConnStr} ->
|
||||
log(debug, "incoming MQTT connection ~p (~s)~n", [self(), ConnStr]),
|
||||
log(debug, "accepting MQTT TCP connection ~p (~s)~n", [self(), ConnStr]),
|
||||
rabbit_alarm:register(
|
||||
self(), {?MODULE, conserve_resources, []}),
|
||||
ProcessorState = rabbit_mqtt_processor:initial_state(Sock,ssl_login_name(Sock)),
|
||||
gen_server2:enter_loop(?MODULE, [],
|
||||
control_throttle(
|
||||
#state{socket = Sock,
|
||||
conn_name = ConnStr,
|
||||
await_recv = false,
|
||||
connection_state = running,
|
||||
no_data_received = true,
|
||||
connected_at = time_compat:os_system_time(seconds),
|
||||
keepalive = {none, none},
|
||||
keepalive_sup = KeepaliveSup,
|
||||
conserve = false,
|
||||
parse_state = rabbit_mqtt_frame:initial_state(),
|
||||
proc_state = ProcessorState }),
|
||||
#state{socket = Sock,
|
||||
conn_name = ConnStr,
|
||||
await_recv = false,
|
||||
connection_state = running,
|
||||
protocol_connected = false,
|
||||
keepalive = {none, none},
|
||||
keepalive_sup = KeepaliveSup,
|
||||
conserve = false,
|
||||
parse_state = rabbit_mqtt_frame:initial_state(),
|
||||
proc_state = ProcessorState }),
|
||||
{backoff, 1000, 1000, 10000});
|
||||
{network_error, Reason} ->
|
||||
rabbit_net:fast_close(Sock),
|
||||
|
|
@ -85,24 +84,6 @@ init([KeepaliveSup, Ref, Sock]) ->
|
|||
terminate({network_error, Reason}, undefined)
|
||||
end.
|
||||
|
||||
log_new_connection(State) -> log_new_connection(State, accepted).
|
||||
|
||||
log_new_connection(#state{no_data_received = false}, _) -> ok;
|
||||
log_new_connection(#state{conn_name = ConnStr,
|
||||
connected_at = ConnectionTime},
|
||||
LogReason) ->
|
||||
BaseDate = calendar:datetime_to_gregorian_seconds({{1970, 1, 1},
|
||||
{0, 0, 0}}),
|
||||
{{Year, Month, Day}, {Hour, Min, Sec}} =
|
||||
calendar:gregorian_seconds_to_datetime(BaseDate + ConnectionTime),
|
||||
log(case LogReason of
|
||||
closed -> debug;
|
||||
accepted -> info
|
||||
end,
|
||||
"new MQTT connection ~p (~s) - "
|
||||
"accepted at ~b-~2..0b-~2..0b::~2..0b:~2..0b:~2..0b~n",
|
||||
[self(), ConnStr, Year, Month, Day, Hour, Min, Sec]).
|
||||
|
||||
handle_call(Msg, From, State) ->
|
||||
{stop, {mqtt_unexpected_call, Msg, From}, State}.
|
||||
|
||||
|
|
@ -138,10 +119,8 @@ handle_info({inet_reply, _Ref, ok}, State) ->
|
|||
|
||||
handle_info({inet_async, Sock, _Ref, {ok, Data}},
|
||||
State = #state{ socket = Sock }) ->
|
||||
log_new_connection(State),
|
||||
process_received_bytes(
|
||||
Data, control_throttle(State #state{ await_recv = false,
|
||||
no_data_received = false }));
|
||||
Data, control_throttle(State #state{ await_recv = false }));
|
||||
|
||||
handle_info({inet_async, _Sock, _Ref, {error, Reason}}, State = #state {}) ->
|
||||
network_error(Reason, State);
|
||||
|
|
@ -233,6 +212,17 @@ ssl_login_name(Sock) ->
|
|||
|
||||
%%----------------------------------------------------------------------------
|
||||
|
||||
log_new_connection(#state{conn_name = ConnStr}) ->
|
||||
log(info, "accepting MQTT connection ~p (~s)~n", [self(), ConnStr]).
|
||||
|
||||
process_received_bytes(<<>>, State = #state{ proc_state = ProcState,
|
||||
protocol_connected = false } ) ->
|
||||
MqttConn = ProcState#proc_state.connection,
|
||||
case MqttConn of
|
||||
undefined -> ok;
|
||||
_ -> log_new_connection(State)
|
||||
end,
|
||||
{noreply, State#state{ protocol_connected = true }, hibernate};
|
||||
process_received_bytes(<<>>, State) ->
|
||||
{noreply, State, hibernate};
|
||||
process_received_bytes(Bytes,
|
||||
|
|
@ -294,12 +284,11 @@ send_will_and_terminate(PState, Reason, State) ->
|
|||
|
||||
network_error(closed,
|
||||
State = #state{ conn_name = ConnStr,
|
||||
proc_state = PState,
|
||||
no_data_received = NoDataReceived }) ->
|
||||
log_new_connection(State, closed),
|
||||
log(case NoDataReceived of
|
||||
true -> debug;
|
||||
false -> info
|
||||
proc_state = PState }) ->
|
||||
MqttConn = PState#proc_state.connection,
|
||||
log(case MqttConn of
|
||||
undefined -> debug;
|
||||
_ -> info
|
||||
end,
|
||||
"MQTT detected network error for ~p: peer closed TCP connection~n",
|
||||
[ConnStr]),
|
||||
|
|
|
|||
Loading…
Reference in New Issue