@@ -40,8 +40,10 @@ defmodule Sentry.Client do
4040
4141 require Logger
4242
43- @ type send_event_result :: { :ok , Task . t ( ) | String . t ( ) | pid ( ) } | :error | :unsampled
43+ @ type send_event_result ::
44+ { :ok , Task . t ( ) | String . t ( ) | pid ( ) } | :error | :unsampled | :excluded
4445 @ type dsn :: { String . t ( ) , String . t ( ) , String . t ( ) } | :error
46+ @ type result :: :sync | :none | :async
4547 @ sentry_version 5
4648 @ max_attempts 4
4749 @ hackney_pool_name :sentry_pool
@@ -66,13 +68,19 @@ defmodule Sentry.Client do
6668
6769 event = maybe_call_before_send_event ( event )
6870
69- if sample_event? ( sample_rate ) do
70- encode_and_send ( event , result )
71- else
72- :unsampled
71+ case { event , sample_event? ( sample_rate ) } do
72+ { false , _ } ->
73+ :excluded
74+
75+ { % Event { } , false } ->
76+ :unsampled
77+
78+ { % Event { } , true } ->
79+ encode_and_send ( event , result )
7380 end
7481 end
7582
83+ @ spec encode_and_send ( Event . t ( ) , result ( ) ) :: send_event_result ( )
7684 defp encode_and_send ( event , result ) do
7785 json_library = Config . json_library ( )
7886
@@ -88,6 +96,7 @@ defmodule Sentry.Client do
8896 end
8997 end
9098
99+ @ spec do_send_event ( Event . t ( ) , map ( ) , :async ) :: { :ok , Task . t ( ) } | :error
91100 defp do_send_event ( event , body , :async ) do
92101 case get_headers_and_endpoint ( ) do
93102 { endpoint , auth_headers } ->
@@ -102,6 +111,7 @@ defmodule Sentry.Client do
102111 end
103112 end
104113
114+ @ spec do_send_event ( Event . t ( ) , map ( ) , :sync ) :: { :ok , String . t ( ) } | :error
105115 defp do_send_event ( event , body , :sync ) do
106116 case get_headers_and_endpoint ( ) do
107117 { endpoint , auth_headers } ->
@@ -113,6 +123,8 @@ defmodule Sentry.Client do
113123 end
114124 end
115125
126+ @ spec do_send_event ( Event . t ( ) , map ( ) , :none ) ::
127+ { :ok , DynamicSupervisor . on_start_child ( ) } | :error
116128 defp do_send_event ( event , body , :none ) do
117129 case get_headers_and_endpoint ( ) do
118130 { endpoint , auth_headers } ->
@@ -128,6 +140,12 @@ defmodule Sentry.Client do
128140 end
129141 end
130142
143+ @ spec try_request (
144+ String . t ( ) ,
145+ list ( { String . t ( ) , String . t ( ) } ) ,
146+ { Event . t ( ) , String . t ( ) } ,
147+ pos_integer ( )
148+ ) :: { :ok , String . t ( ) } | :error
131149 defp try_request ( url , headers , event_body_tuple , current_attempt \\ 1 )
132150
133151 defp try_request ( _ , _ , _ , current_attempt )
@@ -206,6 +224,7 @@ defmodule Sentry.Client do
206224 "Sentry " <> query
207225 end
208226
227+ @ spec authorization_headers ( String . t ( ) , String . t ( ) ) :: list ( { String . t ( ) , String . t ( ) } )
209228 defp authorization_headers ( public_key , secret_key ) do
210229 [
211230 { "User-Agent" , @ sentry_client } ,
@@ -257,14 +276,14 @@ defmodule Sentry.Client do
257276 result
258277 end
259278
260- @ spec maybe_call_before_send_event ( Event . t ( ) ) :: Event . t ( )
279+ @ spec maybe_call_before_send_event ( Event . t ( ) ) :: Event . t ( ) | false
261280 def maybe_call_before_send_event ( event ) do
262281 case Config . before_send_event ( ) do
263282 function when is_function ( function , 1 ) ->
264- function . ( event )
283+ function . ( event ) || false
265284
266285 { module , function } ->
267- apply ( module , function , [ event ] )
286+ apply ( module , function , [ event ] ) || false
268287
269288 nil ->
270289 event
@@ -345,11 +364,13 @@ defmodule Sentry.Client do
345364 )
346365 end
347366
367+ @ spec sleep ( pos_integer ( ) ) :: :ok
348368 defp sleep ( 1 ) , do: :timer . sleep ( 2000 )
349369 defp sleep ( 2 ) , do: :timer . sleep ( 4000 )
350370 defp sleep ( 3 ) , do: :timer . sleep ( 8000 )
351371 defp sleep ( _ ) , do: :timer . sleep ( 8000 )
352372
373+ @ spec sample_event? ( number ( ) ) :: boolean ( )
353374 defp sample_event? ( 1 ) , do: true
354375 defp sample_event? ( 1.0 ) , do: true
355376 defp sample_event? ( 0 ) , do: false
0 commit comments