class StackifyRubyAPM::Spies::MysqlAdapterSpy
@api private
Constants
- DEFAULT_PORT
- TYPE
Public Instance Methods
check_prepared_stmt(statement, payload)
click to toggle source
# File lib/stackify_apm/spies/sinatra_activerecord/mysql_adapter.rb, line 90 def check_prepared_stmt(statement, payload) if StackifyRubyAPM.agent.config.prefix_enabled check_prepared_stmt_by_placeholder(payload[:sql].include?('?'), statement, payload) end end
exec_delete(sql, name = nil, binds = [])
click to toggle source
# File lib/stackify_apm/spies/sinatra_activerecord/mysql_adapter.rb, line 43 def exec_delete(sql, name = nil, binds = []) result = nil unless StackifyRubyAPM.current_transaction exec_delete_without_apm(sql, name, binds) end payload = {sql: sql, binds: binds} statement = query_variables(payload) check_prepared_stmt(statement, payload) ctx = Span::Context.new(statement) result = exec_delete_without_apm(sql, name, binds) StackifyRubyAPM.span name, TYPE, context: ctx do return result end end
exec_insert(sql, name, binds, _pk = nil, _sequence_name = nil)
click to toggle source
# File lib/stackify_apm/spies/sinatra_activerecord/mysql_adapter.rb, line 184 def exec_insert(sql, name, binds, _pk = nil, _sequence_name = nil) result = nil unless StackifyRubyAPM.current_transaction exec_insert_without_apm(sql, name, binds, _pk = nil, _sequence_name = nil) end ctx = Span::Context.new( CATEGORY: 'Database', SUBCATEGORY: 'Execute', COMPONENT_CATEGORY: 'DB Query', COMPONENT_DETAIL: 'Execute SQL Query', SQL: sql, PROVIDER: 'mysql' ) ctx[:URL] = get_host unless !get_host result = exec_insert_without_apm(sql, name, binds, _pk = nil, _sequence_name = nil) StackifyRubyAPM.span name, TYPE, context: ctx do return result end end
exec_query(sql, name = 'SQL', binds = [], prepare: false)
click to toggle source
rubocop:disable Lint/UnusedMethodArgument
# File lib/stackify_apm/spies/sinatra_activerecord/mysql_adapter.rb, line 63 def exec_query(sql, name = 'SQL', binds = [], prepare: false) result = nil unless StackifyRubyAPM.current_transaction exec_query_without_apm(sql, name, binds) end payload = {sql: sql, binds: binds} statement = query_variables(payload) check_prepared_stmt(statement, payload) ctx = Span::Context.new(statement) result = exec_query_without_apm(sql, name, binds) StackifyRubyAPM.span name, TYPE, context: ctx do return result end end
exec_update(sql, name = nil, binds = [])
click to toggle source
# File lib/stackify_apm/spies/sinatra_activerecord/mysql_adapter.rb, line 24 def exec_update(sql, name = nil, binds = []) result = nil unless StackifyRubyAPM.current_transaction exec_update_without_apm(sql, name, binds) end payload = {sql: sql, binds: binds} statement = query_variables(payload) check_prepared_stmt(statement, payload) ctx = Span::Context.new(statement) result = exec_update_without_apm(sql, name, binds) StackifyRubyAPM.span name, TYPE, context: ctx do return result end end
get_host()
click to toggle source
# File lib/stackify_apm/spies/sinatra_activerecord/mysql_adapter.rb, line 96 def get_host query_options = self.raw_connection.query_options.to_h "#{query_options[:host]}:#{query_options[:port] || DEFAULT_PORT}" rescue StandardError => error nil end
install()
click to toggle source
# File lib/stackify_apm/spies/sinatra_activerecord/mysql_adapter.rb, line 18 def install ActiveRecord::ConnectionAdapters::MySQL::DatabaseStatements.class_eval do alias_method 'exec_query_without_apm', 'exec_query' alias_method 'exec_delete_without_apm', 'exec_delete' alias_method 'exec_update_without_apm', 'exec_update' def exec_update(sql, name = nil, binds = []) result = nil unless StackifyRubyAPM.current_transaction exec_update_without_apm(sql, name, binds) end payload = {sql: sql, binds: binds} statement = query_variables(payload) check_prepared_stmt(statement, payload) ctx = Span::Context.new(statement) result = exec_update_without_apm(sql, name, binds) StackifyRubyAPM.span name, TYPE, context: ctx do return result end end def exec_delete(sql, name = nil, binds = []) result = nil unless StackifyRubyAPM.current_transaction exec_delete_without_apm(sql, name, binds) end payload = {sql: sql, binds: binds} statement = query_variables(payload) check_prepared_stmt(statement, payload) ctx = Span::Context.new(statement) result = exec_delete_without_apm(sql, name, binds) StackifyRubyAPM.span name, TYPE, context: ctx do return result end end # rubocop:disable Lint/UnusedMethodArgument def exec_query(sql, name = 'SQL', binds = [], prepare: false) result = nil unless StackifyRubyAPM.current_transaction exec_query_without_apm(sql, name, binds) end payload = {sql: sql, binds: binds} statement = query_variables(payload) check_prepared_stmt(statement, payload) ctx = Span::Context.new(statement) result = exec_query_without_apm(sql, name, binds) StackifyRubyAPM.span name, TYPE, context: ctx do return result end end # rubocop:enable Lint/UnusedMethodArgument def query_variables(payload) props = get_common_db_properties props[:PROVIDER] = 'mysql' props[:SQL] = payload[:sql] props[:URL] = get_host unless !get_host props end def check_prepared_stmt(statement, payload) if StackifyRubyAPM.agent.config.prefix_enabled check_prepared_stmt_by_placeholder(payload[:sql].include?('?'), statement, payload) end end def get_host query_options = self.raw_connection.query_options.to_h "#{query_options[:host]}:#{query_options[:port] || DEFAULT_PORT}" rescue StandardError => error nil end end end
query_variables(payload)
click to toggle source
rubocop:enable Lint/UnusedMethodArgument
# File lib/stackify_apm/spies/sinatra_activerecord/mysql_adapter.rb, line 82 def query_variables(payload) props = get_common_db_properties props[:PROVIDER] = 'mysql' props[:SQL] = payload[:sql] props[:URL] = get_host unless !get_host props end