Skip to content

Commit 1fb42cf

Browse files
committed
Include muted and error metadata for new occurrence telemetry
Aside from the occurrence itself, the new occurrence telemetry event now also includes the error and the muted flag so users can choose wether the occurrence should be reported or not.
1 parent 4e210cd commit 1fb42cf

File tree

3 files changed

+27
-22
lines changed

3 files changed

+27
-22
lines changed

lib/error_tracker.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ defmodule ErrorTracker do
336336
{existing_status, muted} =
337337
case Repo.one(status_and_muted_query) do
338338
{existing_status, muted} -> {existing_status, muted}
339-
nil -> {nil, nil}
339+
nil -> {nil, false}
340340
end
341341

342342
{:ok, {error, occurrence}} =
@@ -369,6 +369,8 @@ defmodule ErrorTracker do
369369
{error, occurrence}
370370
end)
371371

372+
occurrence = %Occurrence{occurrence | error: error}
373+
372374
# If the error existed and was marked as resolved before this exception,
373375
# sent a Telemetry event
374376
# If it is a new error, sent a Telemetry event
@@ -378,9 +380,7 @@ defmodule ErrorTracker do
378380
nil -> Telemetry.new_error(error)
379381
end
380382

381-
# Send telemetry for new occurrences if not muted
382-
if !muted, do: Telemetry.new_occurrence(occurrence)
383-
384-
%Occurrence{occurrence | error: error}
383+
Telemetry.new_occurrence(occurrence, muted)
384+
occurrence
385385
end
386386
end

lib/error_tracker/telemetry.ex

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,39 +31,45 @@ defmodule ErrorTracker.Telemetry do
3131
Each event is emitted with some measures and metadata, which can be used to
3232
receive information without having to query the database again:
3333
34-
| event | measures | metadata |
35-
| --------------------------------------- | -------------- | ------------- |
36-
| `[:error_tracker, :error, :new]` | `:system_time` | `:error` |
37-
| `[:error_tracker, :error, :unresolved]` | `:system_time` | `:error` |
38-
| `[:error_tracker, :error, :resolved]` | `:system_time` | `:error` |
39-
| `[:error_tracker, :occurrence, :new]` | `:system_time` | `:occurrence` |
34+
| event | measures | metadata |
35+
| --------------------------------------- | -------------- | ----------------------------------|
36+
| `[:error_tracker, :error, :new]` | `:system_time` | `:error` |
37+
| `[:error_tracker, :error, :unresolved]` | `:system_time` | `:error` |
38+
| `[:error_tracker, :error, :resolved]` | `:system_time` | `:error` |
39+
| `[:error_tracker, :occurrence, :new]` | `:system_time` | `:occurrence`, `:error`, `:muted` |
40+
41+
The metadata keys contain the following data:
42+
43+
* `:error` - An `%ErrorTracker.Error{}` struct representing the error.
44+
* `:occurrence` - An `%ErrorTracker.Occurrence{}` struct representing the occurrence.
45+
* `:muted` - A boolean indicating whether the error is muted or not.
4046
"""
4147

4248
@doc false
43-
def new_error(error) do
49+
def new_error(error = %ErrorTracker.Error{}) do
4450
measurements = %{system_time: System.system_time()}
4551
metadata = %{error: error}
4652
:telemetry.execute([:error_tracker, :error, :new], measurements, metadata)
4753
end
4854

4955
@doc false
50-
def unresolved_error(error) do
56+
def unresolved_error(error = %ErrorTracker.Error{}) do
5157
measurements = %{system_time: System.system_time()}
5258
metadata = %{error: error}
5359
:telemetry.execute([:error_tracker, :error, :unresolved], measurements, metadata)
5460
end
5561

5662
@doc false
57-
def resolved_error(error) do
63+
def resolved_error(error = %ErrorTracker.Error{}) do
5864
measurements = %{system_time: System.system_time()}
5965
metadata = %{error: error}
6066
:telemetry.execute([:error_tracker, :error, :resolved], measurements, metadata)
6167
end
6268

6369
@doc false
64-
def new_occurrence(occurrence) do
70+
def new_occurrence(occurrence = %ErrorTracker.Occurrence{}, muted) when is_boolean(muted) do
6571
measurements = %{system_time: System.system_time()}
66-
metadata = %{occurrence: occurrence}
72+
metadata = %{error: occurrence.error, occurrence: occurrence, muted: muted}
6773
:telemetry.execute([:error_tracker, :occurrence, :new], measurements, metadata)
6874
end
6975
end

test/error_tracker/telemetry_test.exs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ defmodule ErrorTracker.TelemetryTest do
2323
assert_receive {:telemetry_event, [:error_tracker, :error, :new], _, %{error: %Error{}}}
2424

2525
assert_receive {:telemetry_event, [:error_tracker, :occurrence, :new], _,
26-
%{occurrence: %Occurrence{}}}
26+
%{occurrence: %Occurrence{}, muted: false}}
2727

2828
# The error is already known so the new error event won't be emitted
2929
ErrorTracker.report(exception, stacktrace)
@@ -32,15 +32,14 @@ defmodule ErrorTracker.TelemetryTest do
3232
150
3333

3434
assert_receive {:telemetry_event, [:error_tracker, :occurrence, :new], _,
35-
%{occurrence: %Occurrence{}}}
35+
%{occurrence: %Occurrence{}, muted: false}}
3636

37-
# The error is muted so the new occurrence event won't be emitted
37+
# The error is muted so the new occurrence event will include the muted=true metadata
3838
ErrorTracker.mute(error)
3939
ErrorTracker.report(exception, stacktrace)
4040

41-
refute_receive {:telemetry_event, [:error_tracker, :occurrence, :new], _,
42-
%{occurrence: %Occurrence{}}},
43-
150
41+
assert_receive {:telemetry_event, [:error_tracker, :occurrence, :new], _,
42+
%{occurrence: %Occurrence{}, muted: true}}
4443
end
4544

4645
test "events are emitted for resolved and unresolved errors" do

0 commit comments

Comments
 (0)