Loading lib/labkit/logging/sanitizer.rb +6 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,12 @@ module Labkit "" end def self.sql_fingerprint(normalized_sql) PgQuery.parse(normalized_sql)&.fingerprint rescue PgQuery::ParseError "" end # Ensures that URLS are sanitized to hide credentials def self.mask_url(url) url = url.to_s.strip Loading lib/labkit/tracing/rails/active_record/sql_instrumenter.rb +6 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,11 @@ module Labkit end def tags(payload) sql = Labkit::Logging::Sanitizer.sanitize_sql(payload[:sql]) if Labkit::Tracing.sampled? && payload[:sql] if Labkit::Tracing.sampled? && payload[:sql] sql = Labkit::Logging::Sanitizer.sanitize_sql(payload[:sql]) fingerprint = Labkit::Logging::Sanitizer.sql_fingerprint(sql) end { "component" => COMPONENT_TAG, "span.kind" => "client", Loading @@ -22,6 +26,7 @@ module Labkit "db.connection_id" => payload[:connection_id], "db.cached" => payload[:cached] || false, "db.statement" => sql, "db.statement_fingerprint" => fingerprint, } end end Loading spec/labkit/tracing/rails/active_record/sql_instrumenter_spec.rb +14 −11 Original line number Diff line number Diff line require_relative "../../../../support/tracing/shared_examples" require "active_support" describe Labkit::Tracing::Rails::ActiveRecord::SqlInstrumenter do using RSpec::Parameterized::TableSyntax where(:name, :operation_name, :exception, :connection_id, :cached, :cached_response, :sql, :expected_sql, :tracing_sampled) do nil | "active_record:sqlquery" | nil | nil | nil | false | nil | nil | true "" | "active_record:sqlquery" | nil | nil | nil | false | nil | nil | true "User Load" | "active_record:User Load" | nil | nil | nil | false | nil | nil | true "Repo Load" | "active_record:Repo Load" | StandardError.new | nil | nil | false | nil | nil | true nil | "active_record:sqlquery" | nil | 123 | nil | false | nil | nil | true nil | "active_record:sqlquery" | nil | nil | false | false | nil | nil | true nil | "active_record:sqlquery" | nil | nil | true | true | nil | nil | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT * FROM users" | "SELECT * FROM users" | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT 42" | "SELECT $1" | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT 42" | nil | false where(:name, :operation_name, :exception, :connection_id, :cached, :cached_response, :sql, :expected_sql, :expected_fingerprint, :tracing_sampled) do nil | "active_record:sqlquery" | nil | nil | nil | false | nil | nil | nil | true "" | "active_record:sqlquery" | nil | nil | nil | false | nil | nil | nil | true "User Load" | "active_record:User Load" | nil | nil | nil | false | nil | nil | nil | true "Repo Load" | "active_record:Repo Load" | StandardError.new | nil | nil | false | nil | nil | nil | true nil | "active_record:sqlquery" | nil | 123 | nil | false | nil | nil | nil | true nil | "active_record:sqlquery" | nil | nil | false | false | nil | nil | nil | true nil | "active_record:sqlquery" | nil | nil | true | true | nil | nil | nil | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT * FROM users" | "SELECT * FROM users" | "267bb22fb46c39bf" | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT 42" | "SELECT $1" | "50fde20626009aba" | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT 42" | nil | nil | false end with_them do Loading @@ -28,6 +30,7 @@ describe Labkit::Tracing::Rails::ActiveRecord::SqlInstrumenter do "db.connection_id" => connection_id, "db.cached" => cached_response, "db.statement" => expected_sql, "db.statement_fingerprint" => expected_fingerprint, } end Loading spec/logging/sanitizer_spec.rb +12 −0 Original line number Diff line number Diff line Loading @@ -90,4 +90,16 @@ describe Labkit::Logging::Sanitizer do it { expect(described_class.sanitize_sql(input)).to eq(output) } end end describe ".sql_fingerprint" do where(:input, :output) do "invalid sql" | "" "select 42" | "50fde20626009aba" %q[SELECT "routes".* FROM "routes" WHERE "routes"."source_type" = 'Namespace' AND "routes"."source_id" IN (1, 22, 23)] | "139b5a9eb28b075a" end with_them do it { expect(described_class.sql_fingerprint(input)).to eq(output) } end end end Loading
lib/labkit/logging/sanitizer.rb +6 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,12 @@ module Labkit "" end def self.sql_fingerprint(normalized_sql) PgQuery.parse(normalized_sql)&.fingerprint rescue PgQuery::ParseError "" end # Ensures that URLS are sanitized to hide credentials def self.mask_url(url) url = url.to_s.strip Loading
lib/labkit/tracing/rails/active_record/sql_instrumenter.rb +6 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,11 @@ module Labkit end def tags(payload) sql = Labkit::Logging::Sanitizer.sanitize_sql(payload[:sql]) if Labkit::Tracing.sampled? && payload[:sql] if Labkit::Tracing.sampled? && payload[:sql] sql = Labkit::Logging::Sanitizer.sanitize_sql(payload[:sql]) fingerprint = Labkit::Logging::Sanitizer.sql_fingerprint(sql) end { "component" => COMPONENT_TAG, "span.kind" => "client", Loading @@ -22,6 +26,7 @@ module Labkit "db.connection_id" => payload[:connection_id], "db.cached" => payload[:cached] || false, "db.statement" => sql, "db.statement_fingerprint" => fingerprint, } end end Loading
spec/labkit/tracing/rails/active_record/sql_instrumenter_spec.rb +14 −11 Original line number Diff line number Diff line require_relative "../../../../support/tracing/shared_examples" require "active_support" describe Labkit::Tracing::Rails::ActiveRecord::SqlInstrumenter do using RSpec::Parameterized::TableSyntax where(:name, :operation_name, :exception, :connection_id, :cached, :cached_response, :sql, :expected_sql, :tracing_sampled) do nil | "active_record:sqlquery" | nil | nil | nil | false | nil | nil | true "" | "active_record:sqlquery" | nil | nil | nil | false | nil | nil | true "User Load" | "active_record:User Load" | nil | nil | nil | false | nil | nil | true "Repo Load" | "active_record:Repo Load" | StandardError.new | nil | nil | false | nil | nil | true nil | "active_record:sqlquery" | nil | 123 | nil | false | nil | nil | true nil | "active_record:sqlquery" | nil | nil | false | false | nil | nil | true nil | "active_record:sqlquery" | nil | nil | true | true | nil | nil | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT * FROM users" | "SELECT * FROM users" | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT 42" | "SELECT $1" | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT 42" | nil | false where(:name, :operation_name, :exception, :connection_id, :cached, :cached_response, :sql, :expected_sql, :expected_fingerprint, :tracing_sampled) do nil | "active_record:sqlquery" | nil | nil | nil | false | nil | nil | nil | true "" | "active_record:sqlquery" | nil | nil | nil | false | nil | nil | nil | true "User Load" | "active_record:User Load" | nil | nil | nil | false | nil | nil | nil | true "Repo Load" | "active_record:Repo Load" | StandardError.new | nil | nil | false | nil | nil | nil | true nil | "active_record:sqlquery" | nil | 123 | nil | false | nil | nil | nil | true nil | "active_record:sqlquery" | nil | nil | false | false | nil | nil | nil | true nil | "active_record:sqlquery" | nil | nil | true | true | nil | nil | nil | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT * FROM users" | "SELECT * FROM users" | "267bb22fb46c39bf" | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT 42" | "SELECT $1" | "50fde20626009aba" | true nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT 42" | nil | nil | false end with_them do Loading @@ -28,6 +30,7 @@ describe Labkit::Tracing::Rails::ActiveRecord::SqlInstrumenter do "db.connection_id" => connection_id, "db.cached" => cached_response, "db.statement" => expected_sql, "db.statement_fingerprint" => expected_fingerprint, } end Loading
spec/logging/sanitizer_spec.rb +12 −0 Original line number Diff line number Diff line Loading @@ -90,4 +90,16 @@ describe Labkit::Logging::Sanitizer do it { expect(described_class.sanitize_sql(input)).to eq(output) } end end describe ".sql_fingerprint" do where(:input, :output) do "invalid sql" | "" "select 42" | "50fde20626009aba" %q[SELECT "routes".* FROM "routes" WHERE "routes"."source_type" = 'Namespace' AND "routes"."source_id" IN (1, 22, 23)] | "139b5a9eb28b075a" end with_them do it { expect(described_class.sql_fingerprint(input)).to eq(output) } end end end