Skip to content

Commit d8bf0a8

Browse files
authored
Rename stuff in opentelemetry_xandra and release v0.2.0 (#354)
1 parent 1285d68 commit d8bf0a8

File tree

5 files changed

+59
-22
lines changed

5 files changed

+59
-22
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Changelog
2+
3+
## v0.2.0
4+
5+
* Rename `OpenTelemetryXandra` to `OpentelemetryXandra` (notice the case change) to be in line with other libraries in this collection.
6+
* Rename `OpenTelemetryXandra.setup/1` to `OpentelemetryXandra.attach/1`.
7+
* Rename the `query_parser_fun` type to `operation_parser_fun`.
8+
* Rename the `:query_parser` option to `:operation_parser`.
9+
10+
## v0.1.0
11+
12+
First release.

instrumentation/opentelemetry_xandra/README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# OpenTelemetryXandra
1+
# OpentelemetryXandra
22

33
This library uses [Telemetry](https://github.com/beam-telemetry/telemetry/) events to create OpenTelemetry Spans for [Xandra](https://github.com/whatyouhide/xandra) queries.
44

@@ -17,6 +17,7 @@ end
1717

1818
## Compatibility Matrix
1919

20-
| OpenTelemetryXandra Version | OpenTelemetry Version |
20+
| OpentelemetryXandra Version | OpenTelemetry Version |
2121
| :-------------------------- | :-------------------- |
2222
| v0.1.0 | v1.0.0 |
23+
| v0.2.0 | v1.0.0 |

instrumentation/opentelemetry_xandra/lib/opentelemetry_xandra.ex

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
defmodule OpenTelemetryXandra do
1+
defmodule OpentelemetryXandra do
22
@moduledoc """
33
A module to trace Xandra queries with OpenTelemetry.
44
@@ -32,7 +32,7 @@ defmodule OpenTelemetryXandra do
3232
3333
See `attach/1` for more information.
3434
"""
35-
@type query_parser_fun ::
35+
@type operation_parser_fun ::
3636
(String.t() -> {operation :: String.t(), database :: String.t(), table :: String.t()})
3737

3838
@doc """
@@ -47,14 +47,14 @@ defmodule OpenTelemetryXandra do
4747
# ...
4848
]
4949
50-
OpenTelemetryXandra.attach()
50+
OpentelemetryXandra.setup()
5151
5252
Supervisor.start_link(children, strategy: :one_for_one)
5353
end
5454
5555
## Options
5656
57-
* `:query_parser` - a function that takes a query (as a string) and should
57+
* `:operation_parser` - a function that takes a query (as a string) and should
5858
return a DB operation string that will be used in the span name. For example,
5959
for a query like `INSERT INTO users (id, name) VALUES (1, 'Alice')`, the
6060
operation parser could return `INSERT`. The default operation parser
@@ -73,8 +73,8 @@ defmodule OpenTelemetryXandra do
7373
> option.
7474
7575
"""
76-
@spec attach(keyword()) :: :ok | {:error, :already_exists}
77-
def attach(options \\ []) when is_list(options) do
76+
@spec setup(keyword()) :: :ok | {:error, :already_exists}
77+
def setup(options \\ []) when is_list(options) do
7878
config = %{
7979
operation_parser: Keyword.get(options, :operation_parser, &parse_operation/1)
8080
}
@@ -98,13 +98,11 @@ defmodule OpenTelemetryXandra do
9898
end
9999

100100
defp handle_event(:start, metadata, config) do
101-
dbg(metadata)
102-
103101
attributes = attributes_from_query(metadata.query, config)
104102

105103
OpentelemetryTelemetry.start_telemetry_span(
106104
@tracer_id,
107-
"#{Map.fetch!(attributes, :db_operation)}",
105+
Map.fetch!(attributes, :"db.operation"),
108106
metadata,
109107
%{
110108
kind: :client,
@@ -148,11 +146,16 @@ defmodule OpenTelemetryXandra do
148146

149147
defp attributes_from_query(query, config)
150148
when is_struct(query, Xandra.Simple) or is_struct(query, Xandra.Prepared) do
151-
{operation, database, table} = config.query_parser.(query.statement)
152-
153-
["db.operation": operation, "db.name": database, "db.sql.table": table]
154-
|> Enum.reject(&match?({_, nil}, &1))
155-
|> Map.new()
149+
case config.operation_parser.(query.statement) do
150+
{operation, database, table} ->
151+
["db.operation": operation, "db.name": database, "db.sql.table": table]
152+
|> Enum.reject(&match?({_, nil}, &1))
153+
|> Map.new()
154+
155+
other ->
156+
raise ArgumentError,
157+
":operation_parser must return a tuple with 3 elements, got: #{inspect(other)}"
158+
end
156159
end
157160

158161
defp attributes_from_query(_meta, _config) do
@@ -161,8 +164,9 @@ defmodule OpenTelemetryXandra do
161164

162165
defp parse_operation(statement) do
163166
case String.trim(statement) do
164-
"SELECT" <> _rest -> "SELECT"
165-
_other -> "UNKNOWN"
167+
"SELECT" <> _rest -> {"SELECT", nil, nil}
168+
"UPDATE" <> _rest -> {"UPDATE", nil, nil}
169+
_other -> {"UNKNOWN", nil, nil}
166170
end
167171
end
168172
end

instrumentation/opentelemetry_xandra/mix.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule OpentelemetryXandra.MixProject do
22
use Mix.Project
33

4-
@version "0.1.0"
4+
@version "0.2.0"
55
@description "Trace Xandra queries with OpenTelemetry."
66
@repo_url "https://github.com/open-telemetry/opentelemetry-erlang-contrib"
77
@folder_url "https://github.com/open-telemetry/opentelemetry-erlang-contrib/tree/main/instrumentation/opentelemetry_xandra"
@@ -19,7 +19,7 @@ defmodule OpentelemetryXandra.MixProject do
1919
source_url: @folder_url,
2020
docs: [
2121
source_url_pattern: "#{@folder_url}/%{path}#L%{line}",
22-
main: "OpenTelemetryXandra",
22+
main: "OpentelemetryXandra",
2323
extras: ["README.md"]
2424
],
2525

instrumentation/opentelemetry_xandra/test/opentelemetry_xandra_test.exs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ defmodule OpentelemetryXandraTest do
2424

2525
describe "span creation when executing queries" do
2626
test "when the query is successful" do
27-
OpenTelemetryXandra.attach()
27+
OpentelemetryXandra.setup()
2828

2929
conn = start_supervised!({Xandra, connect_timeout: 5_000})
3030

@@ -44,7 +44,7 @@ defmodule OpentelemetryXandraTest do
4444
end
4545

4646
test "when the query is a prepared query" do
47-
OpenTelemetryXandra.attach()
47+
OpentelemetryXandra.setup()
4848

4949
conn = start_supervised!({Xandra, connect_timeout: 5_000})
5050

@@ -63,5 +63,25 @@ defmodule OpentelemetryXandraTest do
6363
assert attributes[:"network.peer.address"] == "127.0.0.1"
6464
assert attributes[:"network.peer.port"] == 9042
6565
end
66+
67+
test "with the :operation_parser option" do
68+
OpentelemetryXandra.setup(operation_parser: fn _query -> {"SELECT", nil, nil} end)
69+
70+
conn = start_supervised!({Xandra, connect_timeout: 5000})
71+
72+
Xandra.execute!(conn, "SELECT * FROM system.local", [])
73+
74+
assert_receive {:span, span(name: "SELECT") = span}
75+
76+
assert span(span, :kind) == :client
77+
assert span(span, :status) == OpenTelemetry.status(:ok)
78+
79+
attributes = :otel_attributes.map(span(span, :attributes))
80+
assert attributes[:"db.system"] == "cassandra"
81+
assert attributes[:"db.operation"] == "SELECT"
82+
assert attributes[:"server.address"] == "127.0.0.1"
83+
assert attributes[:"network.peer.address"] == "127.0.0.1"
84+
assert attributes[:"network.peer.port"] == 9042
85+
end
6686
end
6787
end

0 commit comments

Comments
 (0)