@@ -41,6 +41,9 @@ defmodule Sentry.Transport do
41
41
Process . sleep ( delay_ms )
42
42
post_envelope_with_retries ( client , endpoint , headers , payload , tl ( retries_left ) )
43
43
44
+ { :retry_after , _delay_ms } ->
45
+ { :error , "Sentry server asked us to retry too many times" }
46
+
44
47
{ :error , _reason } when retries_left != [ ] ->
45
48
[ sleep_interval | retries_left ] = retries_left
46
49
Process . sleep ( sleep_interval )
@@ -56,23 +59,27 @@ defmodule Sentry.Transport do
56
59
{ :ok , json } <- Config . json_library ( ) . decode ( body ) do
57
60
{ :ok , Map . get ( json , "id" ) }
58
61
else
62
+ { :ok , 429 , headers , _body } ->
63
+ delay_ms =
64
+ with timeout when is_binary ( timeout ) <-
65
+ :proplists . get_value ( "Retry-After" , headers , nil ) ,
66
+ { delay_s , "" } <- Integer . parse ( timeout ) do
67
+ delay_s * 1000
68
+ else
69
+ _ ->
70
+ # https://develop.sentry.dev/sdk/rate-limiting/#stage-1-parse-response-headers
71
+ 60_000
72
+ end
73
+
74
+ { :retry_after , delay_ms }
75
+
59
76
{ :ok , status , headers , _body } ->
60
77
error_header =
61
78
:proplists . get_value ( "X-Sentry-Error" , headers , nil ) ||
62
79
:proplists . get_value ( "x-sentry-error" , headers , nil ) || ""
63
80
64
81
{ :error , "Received #{ status } from Sentry server: #{ error_header } " }
65
82
66
- { :ok , 429 , headers , _body } ->
67
- with timeout when is_binary ( timeout ) <- :proplists . get_value ( "Retry-After" , headers , nil ) ,
68
- { delay_ms , "" } <- Integer . parse ( timeout ) do
69
- { :retry_after , delay_ms * 1000 }
70
- else
71
- _ ->
72
- # https://develop.sentry.dev/sdk/rate-limiting/#stage-1-parse-response-headers
73
- { :retry_after , 60_000 }
74
- end
75
-
76
83
{ :error , reason } ->
77
84
{ :error , reason }
78
85
end
0 commit comments