11defmodule ExAudit.Schema do
2+ require Logger
23 def insert_all ( module , name , schema_or_source , entries , tuplet = { _adapter_meta , opts } ) do
34 # TODO!
45 opts = augment_opts ( opts )
@@ -13,7 +14,7 @@ defmodule ExAudit.Schema do
1314
1415 case result do
1516 { :ok , resulting_struct } ->
16- ExAudit.Tracking . track_change ( module , :created , struct , resulting_struct , opts )
17+ track_change ( module , :created , struct , resulting_struct , opts )
1718
1819 _ ->
1920 :ok
@@ -31,7 +32,7 @@ defmodule ExAudit.Schema do
3132
3233 case result do
3334 { :ok , resulting_struct } ->
34- ExAudit.Tracking . track_change ( module , :updated , struct , resulting_struct , opts )
35+ track_change ( module , :updated , struct , resulting_struct , opts )
3536
3637 _ ->
3738 :ok
@@ -50,7 +51,7 @@ defmodule ExAudit.Schema do
5051 case result do
5152 { :ok , resulting_struct } ->
5253 state = if changeset . data . __meta__ . state == :loaded , do: :updated , else: :created
53- ExAudit.Tracking . track_change ( module , state , changeset , resulting_struct , opts )
54+ track_change ( module , state , changeset , resulting_struct , opts )
5455
5556 _ ->
5657 :ok
@@ -64,12 +65,12 @@ defmodule ExAudit.Schema do
6465 opts = augment_opts ( opts )
6566
6667 augment_transaction ( module , fn ->
67- ExAudit.Tracking . track_assoc_deletion ( module , struct , opts )
68+ track_assoc_deletion ( module , struct , opts )
6869 result = Ecto.Repo.Schema . delete ( module , name , struct , tuplet )
6970
7071 case result do
7172 { :ok , resulting_struct } ->
72- ExAudit.Tracking . track_change ( module , :deleted , struct , resulting_struct , opts )
73+ track_change ( module , :deleted , struct , resulting_struct , opts )
7374
7475 _ ->
7576 :ok
@@ -86,7 +87,7 @@ defmodule ExAudit.Schema do
8687 module ,
8788 fn ->
8889 result = Ecto.Repo.Schema . insert! ( module , name , struct , tuplet )
89- ExAudit.Tracking . track_change ( module , :created , struct , result , opts )
90+ track_change ( module , :created , struct , result , opts )
9091 result
9192 end ,
9293 true
@@ -100,7 +101,7 @@ defmodule ExAudit.Schema do
100101 module ,
101102 fn ->
102103 result = Ecto.Repo.Schema . update! ( module , name , struct , tuplet )
103- ExAudit.Tracking . track_change ( module , :updated , struct , result , opts )
104+ track_change ( module , :updated , struct , result , opts )
104105 result
105106 end ,
106107 true
@@ -115,7 +116,7 @@ defmodule ExAudit.Schema do
115116 fn ->
116117 result = Ecto.Repo.Schema . insert_or_update! ( module , name , changeset , tuplet )
117118 state = if changeset . data . __meta__ . state == :loaded , do: :updated , else: :created
118- ExAudit.Tracking . track_change ( module , state , changeset , result , opts )
119+ track_change ( module , state , changeset , result , opts )
119120 result
120121 end ,
121122 true
@@ -128,9 +129,9 @@ defmodule ExAudit.Schema do
128129 augment_transaction (
129130 module ,
130131 fn ->
131- ExAudit.Tracking . track_assoc_deletion ( module , struct , opts )
132+ track_assoc_deletion ( module , struct , opts )
132133 result = Ecto.Repo.Schema . delete! ( module , name , struct , tuplet )
133- ExAudit.Tracking . track_change ( module , :deleted , struct , result , opts )
134+ track_change ( module , :deleted , struct , result , opts )
134135 result
135136 end ,
136137 true
@@ -174,4 +175,25 @@ defmodule ExAudit.Schema do
174175 end ++ custom_fields
175176 end )
176177 end
178+
179+ # It wraps Tracking.track_change in a try rescue block because we don't want to crash the caller process when there is exception in track_change
180+ # It's opinionated here that tracking is something that's not mission critical and thus an exception caused by bug should
181+ # TODO make this try rescue behaviour configurable
182+ defp track_change ( module , action , changeset , resulting_struct , opts ) do
183+ ExAudit.Tracking . track_change ( module , action , changeset , resulting_struct , opts )
184+ rescue
185+ e ->
186+ :error
187+ |> Exception . format ( e , __STACKTRACE__ )
188+ |> Logger . error ( crash_reason: { e , __STACKTRACE__ } )
189+ end
190+
191+ def track_assoc_deletion ( module , struct , opts ) do
192+ ExAudit.Tracking . track_assoc_deletion ( module , struct , opts )
193+ rescue
194+ e ->
195+ :error
196+ |> Exception . format ( e , __STACKTRACE__ )
197+ |> Logger . error ( crash_reason: { e , __STACKTRACE__ } )
198+ end
177199end
0 commit comments