lib/opentelemetry/instrumentation/mysql2/patches/client.rb in opentelemetry-instrumentation-mysql2-0.26.1 vs lib/opentelemetry/instrumentation/mysql2/patches/client.rb in opentelemetry-instrumentation-mysql2-0.27.0

- old
+ new

@@ -12,44 +12,65 @@ module Mysql2 module Patches # Module to prepend to Mysql2::Client for instrumentation module Client def query(sql, options = {}) - attributes = client_attributes + tracer.in_span( + _otel_span_name(sql), + attributes: _otel_span_attributes(sql), + kind: :client + ) do + super(sql, options) + end + end + + def prepare(sql) + tracer.in_span( + _otel_span_name(sql), + attributes: _otel_span_attributes(sql), + kind: :client + ) do + super(sql) + end + end + + private + + def _otel_span_name(sql) + OpenTelemetry::Helpers::MySQL.database_span_name( + sql, + OpenTelemetry::Instrumentation::Mysql2.attributes[ + SemanticConventions::Trace::DB_OPERATION + ], + _otel_database_name, + config + ) + end + + def _otel_span_attributes(sql) + attributes = _otel_client_attributes case config[:db_statement] when :include attributes[SemanticConventions::Trace::DB_STATEMENT] = sql when :obfuscate attributes[SemanticConventions::Trace::DB_STATEMENT] = OpenTelemetry::Helpers::SqlObfuscation.obfuscate_sql( sql, obfuscation_limit: config[:obfuscation_limit], adapter: :mysql ) end - tracer.in_span( - OpenTelemetry::Helpers::MySQL.database_span_name( - sql, - OpenTelemetry::Instrumentation::Mysql2.attributes[ - SemanticConventions::Trace::DB_OPERATION - ], - database_name, - config - ), - attributes: attributes.merge!(OpenTelemetry::Instrumentation::Mysql2.attributes), - kind: :client - ) do - super(sql, options) - end + + attributes.merge!(OpenTelemetry::Instrumentation::Mysql2.attributes) + attributes.compact! + attributes end - private - - def database_name + def _otel_database_name # https://github.com/brianmario/mysql2/blob/ca08712c6c8ea672df658bb25b931fea22555f27/lib/mysql2/client.rb#L78 (query_options[:database] || query_options[:dbname] || query_options[:db])&.to_s end - def client_attributes + def _otel_client_attributes # The client specific attributes can be found via the query_options instance variable # exposed on the mysql2 Client # https://github.com/brianmario/mysql2/blob/ca08712c6c8ea672df658bb25b931fea22555f27/lib/mysql2/client.rb#L25-L26 host = (query_options[:host] || query_options[:hostname]).to_s port = query_options[:port].to_s @@ -57,11 +78,12 @@ attributes = { SemanticConventions::Trace::DB_SYSTEM => 'mysql', SemanticConventions::Trace::NET_PEER_NAME => host, SemanticConventions::Trace::NET_PEER_PORT => port } - attributes[SemanticConventions::Trace::DB_NAME] = database_name if database_name - attributes[SemanticConventions::Trace::PEER_SERVICE] = config[:peer_service] if config[:peer_service] + + attributes[SemanticConventions::Trace::DB_NAME] = _otel_database_name + attributes[SemanticConventions::Trace::PEER_SERVICE] = config[:peer_service] attributes end def tracer Mysql2::Instrumentation.instance.tracer