@@ -48,7 +48,7 @@ defmodule Sentry.Transport do
4848 retries_left ,
4949 envelope_items
5050 ) do
51- case request ( client , endpoint , headers , payload ) do
51+ case request ( client , endpoint , headers , payload , envelope_items ) do
5252 { :ok , id } ->
5353 { :ok , id }
5454
@@ -79,8 +79,19 @@ defmodule Sentry.Transport do
7979 end
8080 end
8181
82- defp request ( client , endpoint , headers , body ) do
83- with { :ok , 200 , _headers , body } <-
82+ defp check_rate_limited ( envelope_items ) do
83+ rate_limited? =
84+ Enum . any? ( envelope_items , fn item ->
85+ category = Envelope . get_data_category ( item )
86+ RateLimiter . rate_limited? ( category )
87+ end )
88+
89+ if rate_limited? , do: { :error , :rate_limited } , else: :ok
90+ end
91+
92+ defp request ( client , endpoint , headers , body , envelope_items ) do
93+ with :ok <- check_rate_limited ( envelope_items ) ,
94+ { :ok , 200 , _headers , body } <-
8495 client_post_and_validate_return_value ( client , endpoint , headers , body ) ,
8596 { :ok , json } <- Sentry.JSON . decode ( body , Config . json_library ( ) ) do
8697 { :ok , Map . get ( json , "id" ) }
@@ -91,6 +102,9 @@ defmodule Sentry.Transport do
91102 { :ok , status , headers , body } ->
92103 { :error , { :http , { status , headers , body } } }
93104
105+ { :error , :rate_limited } ->
106+ { :error , :rate_limited }
107+
94108 { :error , reason } ->
95109 { :error , { :request_failure , reason } }
96110 end
0 commit comments