Skip to content

Commit

Permalink
Add error :reason to :execute_query Telemetry event
Browse files Browse the repository at this point in the history
Closes #366.
  • Loading branch information
whatyouhide committed May 11, 2024
1 parent e5c6cd7 commit d62eff9
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
5 changes: 4 additions & 1 deletion lib/xandra/connection.ex
Expand Up @@ -209,7 +209,10 @@ defmodule Xandra.Connection do
end

:telemetry.span([:xandra, :execute_query], telemetry_meta, fn ->
{fun.(), telemetry_meta}
case fun.() do
{:ok, response} -> {{:ok, response}, telemetry_meta}
{:error, error} -> {{:error, error}, Map.put(telemetry_meta, :reason, error)}
end
end)

{:error, error} ->
Expand Down
35 changes: 34 additions & 1 deletion test/integration/telemetry_test.exs
Expand Up @@ -107,7 +107,7 @@ defmodule TelemetryTest do
assert is_integer(duration)
end

test "execute_query", %{conn: conn} do
test "execute query", %{conn: conn} do
ref =
:telemetry_test.attach_event_handlers(self(), [
[:xandra, :execute_query, :start],
Expand Down Expand Up @@ -138,4 +138,37 @@ defmodule TelemetryTest do
assert metadata.extra_metadata == %{foo: :bar}
assert is_integer(duration)
end

test "execute query with error", %{conn: conn} do
ref =
:telemetry_test.attach_event_handlers(self(), [
[:xandra, :execute_query, :start],
[:xandra, :execute_query, :stop]
])

statement = "invalid syntax"

assert {:error, %Xandra.Error{reason: :invalid_syntax}} =
Xandra.execute(conn, statement, [], telemetry_metadata: %{foo: :bar})

assert_receive {[:xandra, :execute_query, :start], ^ref, %{system_time: system_time},
metadata}

assert metadata.query.statement == statement
assert metadata.connection_name == nil
assert metadata.address == "127.0.0.1"
assert metadata.port == XandraTest.IntegrationCase.port()
assert metadata.extra_metadata == %{foo: :bar}
assert is_integer(system_time)

assert_receive {[:xandra, :execute_query, :stop], ^ref, %{duration: duration}, metadata}

assert %Xandra.Error{reason: :invalid_syntax} = metadata.reason
assert metadata.query.statement == statement
assert metadata.connection_name == nil
assert metadata.address == "127.0.0.1"
assert metadata.port == XandraTest.IntegrationCase.port()
assert metadata.extra_metadata == %{foo: :bar}
assert is_integer(duration)
end
end

0 comments on commit d62eff9

Please sign in to comment.