Add instrumentation to the search services (#30350)

main-rebase-security-fix
Renaud Chaput 2024-05-24 15:13:23 +02:00 committed by GitHub
parent 8394a150d7
commit acc77c3836
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 55 additions and 20 deletions

View File

@ -103,6 +103,8 @@ gem 'rdf-normalize', '~> 0.5'
gem 'private_address_check', '~> 0.5' gem 'private_address_check', '~> 0.5'
gem 'opentelemetry-api', '~> 1.2.5'
group :opentelemetry do group :opentelemetry do
gem 'opentelemetry-exporter-otlp', '~> 0.26.3', require: false gem 'opentelemetry-exporter-otlp', '~> 0.26.3', require: false
gem 'opentelemetry-instrumentation-active_job', '~> 0.7.1', require: false gem 'opentelemetry-instrumentation-active_job', '~> 0.7.1', require: false

View File

@ -975,6 +975,7 @@ DEPENDENCIES
omniauth-rails_csrf_protection (~> 1.0) omniauth-rails_csrf_protection (~> 1.0)
omniauth-saml (~> 2.0) omniauth-saml (~> 2.0)
omniauth_openid_connect (~> 0.6.1) omniauth_openid_connect (~> 0.6.1)
opentelemetry-api (~> 1.2.5)
opentelemetry-exporter-otlp (~> 0.26.3) opentelemetry-exporter-otlp (~> 0.26.3)
opentelemetry-instrumentation-active_job (~> 0.7.1) opentelemetry-instrumentation-active_job (~> 0.7.1)
opentelemetry-instrumentation-active_model_serializers (~> 0.20.1) opentelemetry-instrumentation-active_model_serializers (~> 0.20.1)

View File

@ -151,13 +151,23 @@ class AccountSearchService < BaseService
end end
def call(query, account = nil, options = {}) def call(query, account = nil, options = {})
MastodonOTELTracer.in_span('AccountSearchService#call') do |span|
@query = query&.strip&.gsub(/\A@/, '') @query = query&.strip&.gsub(/\A@/, '')
@limit = options[:limit].to_i @limit = options[:limit].to_i
@offset = options[:offset].to_i @offset = options[:offset].to_i
@options = options @options = options
@account = account @account = account
search_service_results.compact.uniq span.add_attributes(
'search.offset' => @offset,
'search.limit' => @limit,
'search.backend' => Chewy.enabled? ? 'elasticsearch' : 'database'
)
search_service_results.compact.uniq.tap do |results|
span.set_attribute('search.results.count', results.size)
end
end
end end
private private

View File

@ -2,14 +2,24 @@
class StatusesSearchService < BaseService class StatusesSearchService < BaseService
def call(query, account = nil, options = {}) def call(query, account = nil, options = {})
MastodonOTELTracer.in_span('StatusesSearchService#call') do |span|
@query = query&.strip @query = query&.strip
@account = account @account = account
@options = options @options = options
@limit = options[:limit].to_i @limit = options[:limit].to_i
@offset = options[:offset].to_i @offset = options[:offset].to_i
convert_deprecated_options! convert_deprecated_options!
status_search_results
span.add_attributes(
'search.offset' => @offset,
'search.limit' => @limit,
'search.backend' => Chewy.enabled? ? 'elasticsearch' : 'database'
)
status_search_results.tap do |results|
span.set_attribute('search.results.count', results.size)
end
end
end end
private private

View File

@ -2,16 +2,26 @@
class TagSearchService < BaseService class TagSearchService < BaseService
def call(query, options = {}) def call(query, options = {})
MastodonOTELTracer.in_span('TagSearchService#call') do |span|
@query = query.strip.delete_prefix('#') @query = query.strip.delete_prefix('#')
@offset = options.delete(:offset).to_i @offset = options.delete(:offset).to_i
@limit = options.delete(:limit).to_i @limit = options.delete(:limit).to_i
@options = options @options = options
span.add_attributes(
'search.offset' => @offset,
'search.limit' => @limit,
'search.backend' => Chewy.enabled? ? 'elasticsearch' : 'database'
)
results = from_elasticsearch if Chewy.enabled? results = from_elasticsearch if Chewy.enabled?
results ||= from_database results ||= from_database
span.set_attribute('search.results.count', results.size)
results results
end end
end
private private

View File

@ -66,3 +66,5 @@ if ENV.keys.any? { |name| name.match?(/OTEL_.*_ENDPOINT/) }
c.service_version = Mastodon::Version.to_s c.service_version = Mastodon::Version.to_s
end end
end end
MastodonOTELTracer = OpenTelemetry.tracer_provider.tracer('mastodon')