Skip to content

Commit 08ee585

Browse files
committed
Store breadcrumbs and supporting functions.
1 parent a9d12e5 commit 08ee585

File tree

1 file changed

+29
-11
lines changed

1 file changed

+29
-11
lines changed

lib/error_tracker.ex

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -119,15 +119,14 @@ defmodule ErrorTracker do
119119
{:ok, stacktrace} = ErrorTracker.Stacktrace.new(stacktrace)
120120
{:ok, error} = Error.new(kind, reason, stacktrace)
121121
context = Map.merge(get_context(), given_context)
122-
123-
context =
124-
if bread_crumbs = bread_crumbs(exception),
125-
do: Map.put(context, "bread_crumbs", bread_crumbs),
126-
else: context
122+
bread_crumbs = exception_bread_crumbs(exception) ++ get_bread_crumbs()
127123

128124
if enabled?() && !ignored?(error, context) do
129125
sanitized_context = sanitize_context(context)
130-
{_error, occurrence} = upsert_error!(error, stacktrace, sanitized_context, reason)
126+
127+
{_error, occurrence} =
128+
upsert_error!(error, stacktrace, sanitized_context, bread_crumbs, reason)
129+
131130
occurrence
132131
else
133132
:noop
@@ -205,6 +204,24 @@ defmodule ErrorTracker do
205204
Process.get(:error_tracker_context, %{})
206205
end
207206

207+
@spec set_context(String.t()) :: list(String.t())
208+
def add_bread_crumb(bread_crumb) when is_binary(bread_crumb) do
209+
current_bread_crumbs = Process.get(:error_tracker_bread_crumbs, [])
210+
new_bread_crumbs = current_bread_crumbs ++ [bread_crumb]
211+
212+
Process.put(:error_tracker_bread_crumbs, new_bread_crumbs)
213+
214+
new_bread_crumbs
215+
end
216+
217+
@doc """
218+
Obtain the context of the current process.
219+
"""
220+
@spec get_bread_crumbs() :: list(String.t())
221+
def get_bread_crumbs do
222+
Process.get(:error_tracker_bread_crumbs, [])
223+
end
224+
208225
defp enabled? do
209226
!!Application.get_env(:error_tracker, :enabled, true)
210227
end
@@ -237,15 +254,15 @@ defmodule ErrorTracker do
237254
end
238255
end
239256

240-
defp bread_crumbs(exception) do
257+
defp exception_bread_crumbs(exception) do
241258
case exception do
242-
{_kind, exception} -> bread_crumbs(exception)
243-
%{bread_crumbs: bread_crumbs} -> bread_crumbs
244-
_other -> nil
259+
{_kind, exception} -> exception_bread_crumbs(exception)
260+
%{bread_crumbs: bread_crumbs} -> [bread_crumbs]
261+
_other -> []
245262
end
246263
end
247264

248-
defp upsert_error!(error, stacktrace, context, reason) do
265+
defp upsert_error!(error, stacktrace, context, bread_crumbs, reason) do
249266
existing_status =
250267
Repo.one(from e in Error, where: [fingerprint: ^error.fingerprint], select: e.status)
251268

@@ -271,6 +288,7 @@ defmodule ErrorTracker do
271288
|> Occurrence.changeset(%{
272289
stacktrace: stacktrace,
273290
context: context,
291+
bread_crumbs: bread_crumbs,
274292
reason: reason
275293
})
276294
|> Repo.insert!()

0 commit comments

Comments
 (0)