Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,7 @@ module Mysql2
# The Instrumentation class contains logic to detect and install the Mysql2
# instrumentation
class Instrumentation < OpenTelemetry::Instrumentation::Base
install do |config|
if config[:enable_sql_obfuscation]
config[:db_statement] = :obfuscate
OpenTelemetry.logger.warn(
'Instrumentation mysql2 configuration option enable_sql_obfuscation has been deprecated,' \
'use db_statement option instead'
)
end

install do |_config|
require_dependencies
patch_client
end
Expand All @@ -28,7 +20,6 @@ class Instrumentation < OpenTelemetry::Instrumentation::Base
end

option :peer_service, default: nil, validate: :string
option :enable_sql_obfuscation, default: false, validate: :boolean
option :db_statement, default: :include, validate: %I[omit include obfuscate]
option :span_name, default: :statement_type, validate: %I[statement_type db_name db_operation_and_name]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,57 +192,6 @@
end
end

describe 'when enable_sql_obfuscation is enabled' do
let(:config) { { enable_sql_obfuscation: true } }

it 'is compatible with legacy enable_sql_obfuscation option' do
sql = "SELECT * from users where users.id = 1 and users.email = '[email protected]'"
obfuscated_sql = 'SELECT * from users where users.id = ? and users.email = ?'
expect do
client.query(sql)
end.must_raise Mysql2::Error

_(span.attributes['db.system']).must_equal 'mysql'
_(span.attributes['db.name']).must_equal 'mysql'
_(span.name).must_equal 'select'
_(span.attributes['db.statement']).must_equal obfuscated_sql
_(span.attributes['net.peer.name']).must_equal host.to_s
_(span.attributes['net.peer.port']).must_equal port.to_s
end

it 'encodes invalid byte sequences for db.statement' do
# \255 is off-limits https://en.wikipedia.org/wiki/UTF-8#Codepage_layout
sql = "SELECT * from users where users.id = 1 and users.email = '[email protected]\255'"
obfuscated_sql = 'SELECT * from users where users.id = ? and users.email = ?'

expect do
client.query(sql)
end.must_raise Mysql2::Error

_(span.name).must_equal 'mysql'
_(span.attributes['db.statement']).must_equal obfuscated_sql
end
end

describe 'when enable_sql_obfuscation is enabled with db_statement set' do
let(:config) { { enable_sql_obfuscation: true, db_statement: :omit } }

it 'respects enable_sql_obfuscation when enabled' do
sql = "SELECT * from users where users.id = 1 and users.email = '[email protected]'"
obfuscated_sql = 'SELECT * from users where users.id = ? and users.email = ?'
expect do
client.query(sql)
end.must_raise Mysql2::Error

_(span.attributes['db.system']).must_equal 'mysql'
_(span.attributes['db.name']).must_equal 'mysql'
_(span.name).must_equal 'select'
_(span.attributes['db.statement']).must_equal obfuscated_sql
_(span.attributes['net.peer.name']).must_equal host.to_s
_(span.attributes['net.peer.port']).must_equal port.to_s
end
end

describe 'when db_statement is configured via environment variable' do
describe 'when db_statement set as omit' do
it 'omits db.statement attribute' do
Expand Down
2 changes: 1 addition & 1 deletion instrumentation/pg/example/pg.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

ENV['OTEL_TRACES_EXPORTER'] = 'console'
OpenTelemetry::SDK.configure do |c|
c.use 'OpenTelemetry::Instrumentation::PG', enable_sql_obfuscation: true
c.use 'OpenTelemetry::Instrumentation::PG'
end

conn = PG::Connection.open(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,7 @@ module PG
class Instrumentation < OpenTelemetry::Instrumentation::Base
MINIMUM_VERSION = Gem::Version.new('1.1.0')

install do |config|
if config[:enable_sql_obfuscation]
config[:db_statement] = :obfuscate
OpenTelemetry.logger.warn(
'Instrumentation pg configuration option enable_sql_obfuscation has been deprecated,' \
'use db_statement option instead'
)
end

unless config[:enable_statement_attribute]
config[:db_statement] = :omit
OpenTelemetry.logger.warn(
'Instrumentation pg configuration option enable_statement_attribute has been deprecated,' \
'use db_statement option instead'
)
end

install do |_config|
require_dependencies
patch_client
end
Expand All @@ -41,8 +25,6 @@ class Instrumentation < OpenTelemetry::Instrumentation::Base
end

option :peer_service, default: nil, validate: :string
option :enable_sql_obfuscation, default: false, validate: :boolean
option :enable_statement_attribute, default: true, validate: :boolean
option :db_statement, default: :include, validate: %I[omit include obfuscate]

private
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,26 +291,6 @@
end
end

describe 'when enable_statement_attribute is false' do
let(:config) { { enable_statement_attribute: false } }

it 'does not include SQL statement as db.statement attribute' do
sql = "SELECT * from users where users.id = 1 and users.email = '[email protected]'"
expect do
client.exec(sql)
end.must_raise PG::UndefinedTable

_(span.attributes['db.system']).must_equal 'postgresql'
_(span.attributes['db.name']).must_equal 'postgres'
_(span.name).must_equal 'SELECT postgres'
_(span.attributes['db.operation']).must_equal 'SELECT'
_(span.attributes['net.peer.name']).must_equal host.to_s
_(span.attributes['net.peer.port']).must_equal port.to_i

_(span.attributes['db.statement']).must_be_nil
end
end

describe 'when using a database socket' do
let(:host) { nil }
let(:port) { nil }
Expand Down