Skip to content
This repository was archived by the owner on May 23, 2024. It is now read-only.

Commit 957b3a5

Browse files
committed
improve error handling in fcm
1 parent 576f0ee commit 957b3a5

File tree

1 file changed

+21
-29
lines changed

1 file changed

+21
-29
lines changed

src/mod_pushoff_fcm.erl

+21-29
Original file line numberDiff line numberDiff line change
@@ -94,35 +94,34 @@ handle_info(send, #state{send_queue = SendQ,
9494
Response = httpc:request(post, Request, HTTPOptions, Options), %https://firebase.google.com/docs/cloud-messaging/http-server-ref
9595
case Response of
9696
{ok, {{_, StatusCode5xx, _}, _, ErrorBody5xx}} when StatusCode5xx >= 500, StatusCode5xx < 600 ->
97-
?DEBUG("recoverable FCM error: ~p, retrying...", [ErrorBody5xx]),
97+
?INFO_MSG("recoverable error: ~p, retrying...", [ErrorBody5xx]),
9898
NewRetryList = pending_to_retry(Head, RetryList),
9999
{NewRetryTimer, Timestamp} = restart_retry_timer(RetryTimer),
100100
State#state{retry_list = NewRetryList,
101101
send_queue = NewSendQ,
102102
retry_timer = NewRetryTimer,
103103
retry_timestamp = Timestamp};
104+
104105
{ok, {{_, 200, _}, _, ResponseBody}} ->
105106
case parse_response(ResponseBody) of
106107
ok -> ok;
107-
_ -> mod_pushoff_mnesia:unregister_client(DisableArgs)
108+
E ->
109+
?ERROR_MSG("error: ~p, deleting registration", [E]),
110+
mod_pushoff_mnesia:unregister_client(DisableArgs)
108111
end,
109112
Timestamp = erlang:timestamp(),
110113
State#state{send_queue = NewSendQ,
111-
pending_timestamp = Timestamp
112-
};
114+
pending_timestamp = Timestamp};
113115

114116
{ok, {{_, _, _}, _, ResponseBody}} ->
115-
116-
?DEBUG("non-recoverable FCM error: ~p, delete registration", [ResponseBody]),
117-
NewRetryList = pending_to_retry(Head, RetryList),
118-
{NewRetryTimer, Timestamp} = restart_retry_timer(RetryTimer),
119-
State#state{retry_list = NewRetryList,
120-
send_queue = NewSendQ,
121-
retry_timer = NewRetryTimer,
122-
retry_timestamp = Timestamp};
117+
?ERROR_MSG("error: ~p, deleting registration", [ResponseBody]),
118+
mod_pushoff_mnesia:unregister_client(DisableArgs),
119+
Timestamp = erlang:timestamp(),
120+
State#state{send_queue = NewSendQ,
121+
pending_timestamp = Timestamp};
123122

124123
{error, Reason} ->
125-
?ERROR_MSG("FCM request failed: ~p, retrying...", [Reason]),
124+
?ERROR_MSG("request failed: ~p, retrying...", [Reason]),
126125
NewRetryList = pending_to_retry(Head, RetryList),
127126
{NewRetryTimer, Timestamp} = restart_retry_timer(RetryTimer),
128127
State#state{retry_list = NewRetryList,
@@ -183,19 +182,12 @@ pending_element_to_json(_) ->
183182
unknown.
184183

185184
parse_response(ResponseBody) ->
186-
{JsonData} = jiffy:decode(ResponseBody),
187-
case proplists:get_value(<<"success">>, JsonData) of
188-
1 ->
189-
ok;
190-
0 ->
191-
[{Result}] = proplists:get_value(<<"results">>, JsonData),
192-
case proplists:get_value(<<"error">>, Result) of
193-
<<"NotRegistered">> ->
194-
?ERROR_MSG("FCM error: NotRegistered, unregistered user", []),
195-
not_registered;
196-
<<"InvalidRegistration">> ->
197-
?ERROR_MSG("FCM error: InvalidRegistration, unregistered user", []),
198-
invalid_registration;
199-
_ -> other
200-
end
201-
end.
185+
try jiffy:decode(ResponseBody) of
186+
{JsonData} ->
187+
case proplists:get_value(<<"success">>, JsonData) of
188+
1 -> ok;
189+
0 -> [{Result}] = proplists:get_value(<<"results">>, JsonData),
190+
{error, proplists:get_value(<<"error">>, Result)}
191+
end;
192+
Bad -> {error, Bad}
193+
catch throw:E -> E end.

0 commit comments

Comments
 (0)