Packages
new_relic_agent
1.16.7
1.40.3
1.40.2
1.40.1
1.40.0
1.39.0
1.38.0
1.37.0
1.36.0
1.35.0
1.34.0
1.33.0
1.32.0
1.31.1
1.31.0
1.30.0
1.29.0
1.28.0
1.27.8
1.27.7
1.27.6
1.27.5
1.27.4
1.27.3
1.27.2
1.27.1
1.27.0
1.26.0
1.25.3
1.25.2
1.25.1
1.25.0
1.24.5
1.24.4
1.24.3
1.24.2
1.24.1
1.24.0
1.24.0-rc.10
1.24.0-rc.9
1.24.0-rc.8
1.24.0-rc.7
1.23.6
1.23.5
1.23.4
1.23.3
1.23.2
1.23.1
1.23.0
1.23.0-rc.6
1.23.0-rc.5
1.23.0-rc.4
1.23.0-rc.3
1.23.0-rc.2
1.23.0-rc.1
1.22.6
1.22.5
1.22.4
1.22.3
1.22.2
1.22.1
1.22.0
1.21.2
1.21.1
1.21.0
1.21.0-rc.3
1.21.0-rc.1
1.20.0
1.20.0-rc.1
1.19.7
1.19.6
1.19.5
1.19.4
1.19.3
1.19.2
1.19.1
1.19.0
1.18.5
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.18.0-rc.5
1.18.0-rc.4
1.18.0-rc.2
1.18.0-rc.1
1.17.1
1.17.0
1.17.0-rc.4
1.17.0-rc.3
1.17.0-rc.2
1.17.0-rc.1
1.17.0-rc.0
1.16.7
1.16.6
1.16.5
1.16.4
1.16.3
1.16.2
1.16.1
1.16.0
1.16.0-rc.2
1.16.0-rc.1
1.16.0-rc.0
1.15.0
1.15.0-rc.3
1.15.0-rc.2
1.15.0-rc.1
1.14.0
1.13.1
1.13.0
1.12.0
1.11.0
1.10.2
1.10.1
1.10.0
1.9.12
1.9.11
1.9.10
1.9.9
1.9.8
1.9.7
1.9.6
1.9.5
1.9.4
1.9.3
1.9.2
1.9.1
1.9.0
1.8.0
1.7.0
1.6.2
1.6.1
1.6.0
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.0
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
New Relic's Open-Source Elixir Agent
Current section
Files
Jump to
Current section
Files
lib/new_relic/telemetry/ecto/metadata.ex
defmodule NewRelic.Telemetry.Ecto.Metadata do
@moduledoc false
@postgrex_insert ~r/INSERT INTO "(?<table>\w+)"/
@postgrex_create_table ~r/CREATE TABLE( IF NOT EXISTS)? "(?<table>\w+)"/
@postgrex_update ~r/UPDATE "(?<table>\w+)"/
def parse(%{
source: table,
query: query,
result: {:ok, %{__struct__: Postgrex.Result, command: command}}
}) do
table =
case {table, command} do
{nil, :insert} -> capture(@postgrex_insert, query, "table")
{nil, :create_table} -> capture(@postgrex_create_table, query, "table")
{nil, :update} -> capture(@postgrex_update, query, "table")
{nil, _} -> "other"
{table, _} -> table
end
operation =
case command do
operation when is_atom(operation) -> operation
[:rollback, :release] -> :rollback
_ -> "other"
end
{"Postgres", table, operation}
end
@myxql_insert ~r/INSERT INTO `(?<table>\w+)`/
@myxql_select ~r/FROM `(?<table>\w+)`/
@myxql_create_table ~r/CREATE TABLE( IF NOT EXISTS)? `(?<table>\w+)`/
@myxql_update ~r/UPDATE `(?<table>\w+)`/
def parse(%{
query: query,
result: {:ok, %{__struct__: MyXQL.Result}}
}) do
{operation, table} =
case query do
"SELECT" <> _ -> {"select", capture(@myxql_select, query, "table")}
"INSERT" <> _ -> {"insert", capture(@myxql_insert, query, "table")}
"UPDATE" <> _ -> {"update", capture(@myxql_update, query, "table")}
"CREATE TABLE" <> _ -> {"create_table", capture(@myxql_create_table, query, "table")}
"begin" -> {:begin, "other"}
"commit" -> {:commit, "other"}
_ -> {"other", "other"}
end
{"MySQL", table, operation}
end
def parse(%{result: {:ok, %{__struct__: Postgrex.Cursor}}}), do: :ignore
def parse(%{result: {:ok, %{__struct__: MyXQL.Cursor}}}), do: :ignore
def parse(%{result: {:ok, nil}}), do: :ignore
def parse(%{result: {:error, _}}), do: :ignore
def capture(regex, query, match) do
Regex.named_captures(regex, query)[match]
end
end