@@ -13,11 +13,11 @@ defmodule Feeb.DB.SQLite do
1313
1414 @ default_chunk_size 50
1515
16- def open ( path ) when is_binary ( path ) , do: Driver . open ( path )
16+ def open ( path ) when is_binary ( path ) , do: traced_driver_operation ( :open , [ path ] )
1717
18- def close ( conn ) , do: Driver . close ( conn )
18+ def close ( conn ) , do: traced_driver_operation ( :close , [ conn ] )
1919
20- def exec ( conn , sql ) , do: Driver . execute ( conn , sql )
20+ def exec ( conn , sql ) , do: traced_driver_operation ( :execute , [ conn , sql ] )
2121
2222 def raw ( conn , sql ) do
2323 with { :ok , stmt } <- prepare ( conn , sql ) do
@@ -35,15 +35,15 @@ defmodule Feeb.DB.SQLite do
3535
3636 # TODO: What is the error type? Add typespecs and review Repo code
3737 def prepare ( conn , sql ) do
38- Driver . prepare ( conn , sql )
38+ traced_driver_operation ( :prepare , [ conn , sql ] )
3939 end
4040
4141 def bind ( _ , _ , [ ] ) ,
4242 do: :ok
4343
4444 def bind ( stmt , bindings ) when is_list ( bindings ) do
4545 try do
46- Driver . bind ( stmt , bindings )
46+ traced_driver_operation ( :bind , [ stmt , bindings ] )
4747 rescue
4848 e in ArgumentError ->
4949 Logger . error ( e )
@@ -83,10 +83,16 @@ defmodule Feeb.DB.SQLite do
8383 end
8484
8585 defp step_chunk ( conn , stmt , chunk_size ) do
86- case Driver . multi_step ( conn , stmt , chunk_size ) do
86+ case traced_driver_operation ( :multi_step , [ conn , stmt , chunk_size ] ) do
8787 { :rows , rows } -> { :ok , :not_done , rows }
8888 { :done , rows } -> { :ok , :done , rows }
8989 { :error , _ } = error -> error
9090 end
9191 end
92+
93+ defp traced_driver_operation ( operation , args ) do
94+ { duration , result } = :timer . tc ( fn -> apply ( Driver , operation , args ) end )
95+ :telemetry . execute ( [ :feebdb , :driver_op , operation ] , % { duration: duration } , % { args: args } )
96+ result
97+ end
9298end
0 commit comments