Skip to content

Commit 16229ef

Browse files
authored
Add global :extra config (#866)
1 parent 07d0d19 commit 16229ef

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed

lib/sentry/config.ex

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,14 @@ defmodule Sentry.Config do
197197
A map of tags to be sent with every event.
198198
"""
199199
],
200+
extra: [
201+
type: {:map, :atom, :any},
202+
type_doc: "`t:Sentry.Context.extra/0`",
203+
default: %{},
204+
doc: """
205+
A map of extra data to be sent with every event.
206+
"""
207+
],
200208
max_breadcrumbs: [
201209
type: :non_neg_integer,
202210
default: 100,
@@ -546,6 +554,9 @@ defmodule Sentry.Config do
546554
@spec tags() :: map()
547555
def tags, do: fetch!(:tags)
548556

557+
@spec extra() :: map()
558+
def extra, do: fetch!(:extra)
559+
549560
@spec release() :: String.t() | nil
550561
def release, do: get(:release)
551562

lib/sentry/event.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,11 @@ defmodule Sentry.Event do
200200
attachments: attachments_context
201201
} = Sentry.Context.get_all()
202202

203-
extra = Map.merge(extra_context, Keyword.fetch!(opts, :extra))
203+
extra =
204+
Config.extra()
205+
|> Map.merge(extra_context)
206+
|> Map.merge(Keyword.fetch!(opts, :extra))
207+
204208
user = Map.merge(user_context, Keyword.fetch!(opts, :user))
205209
request = Map.merge(request_context, Keyword.fetch!(opts, :request))
206210

test/event_test.exs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,17 @@ defmodule Sentry.EventTest do
9494
assert map_size(event.modules) > 0
9595
end
9696

97+
test "includes the config defaults" do
98+
put_test_config(
99+
tags: %{"test-tag" => "test-value"},
100+
extra: %{"some-data": "with-a-value"}
101+
)
102+
103+
assert %Event{} = event = Event.create_event([])
104+
assert event.tags == %{"test-tag" => "test-value"}
105+
assert event.extra == %{"some-data": "with-a-value"}
106+
end
107+
97108
test "fills in passed-in options" do
98109
assert %Event{} = event = Event.create_event(level: :info)
99110
assert event.level == :info
@@ -144,6 +155,50 @@ defmodule Sentry.EventTest do
144155
end
145156
end
146157

158+
test "fills in `:tags` and `:extra` with precedence of options > context > config" do
159+
put_test_config(
160+
tags: %{
161+
"not-overriden" => "config",
162+
"overriden-by-context" => "config",
163+
"overriden-by-options" => "config"
164+
},
165+
extra: %{
166+
"not-overriden": "config",
167+
"overriden-by-context": "config",
168+
"overriden-by-options": "config"
169+
}
170+
)
171+
172+
Sentry.Context.set_tags_context(%{
173+
"overriden-by-context" => "context",
174+
"overriden-by-options" => "context"
175+
})
176+
177+
Sentry.Context.set_extra_context(%{
178+
"overriden-by-context": "context",
179+
"overriden-by-options": "context"
180+
})
181+
182+
assert %Event{} =
183+
event =
184+
Event.create_event(
185+
tags: %{"overriden-by-options" => "options"},
186+
extra: %{"overriden-by-options": "options"}
187+
)
188+
189+
assert event.tags == %{
190+
"not-overriden" => "config",
191+
"overriden-by-context" => "context",
192+
"overriden-by-options" => "options"
193+
}
194+
195+
assert event.extra == %{
196+
"not-overriden": "config",
197+
"overriden-by-context": "context",
198+
"overriden-by-options": "options"
199+
}
200+
end
201+
147202
test "supports the :fingerprint option" do
148203
assert %Event{} = event = Event.create_event(fingerprint: ["foo", "bar"])
149204
assert event.fingerprint == ["foo", "bar"]

0 commit comments

Comments
 (0)