Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/graphql/query_analyzers/logger_analyzer.rb')
-rw-r--r--lib/gitlab/graphql/query_analyzers/logger_analyzer.rb50
1 files changed, 26 insertions, 24 deletions
diff --git a/lib/gitlab/graphql/query_analyzers/logger_analyzer.rb b/lib/gitlab/graphql/query_analyzers/logger_analyzer.rb
index b8d2f5b0f29..207324e73bd 100644
--- a/lib/gitlab/graphql/query_analyzers/logger_analyzer.rb
+++ b/lib/gitlab/graphql/query_analyzers/logger_analyzer.rb
@@ -10,15 +10,10 @@ module Gitlab
ALL_ANALYZERS = [COMPLEXITY_ANALYZER, DEPTH_ANALYZER, FIELD_USAGE_ANALYZER].freeze
def initial_value(query)
- variables = process_variables(query.provided_variables)
- default_initial_values(query).merge({
- operation_name: query.operation_name,
- query_string: query.query_string,
- variables: variables
- })
- rescue StandardError => e
- Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e)
- default_initial_values(query)
+ {
+ time_started: Gitlab::Metrics::System.monotonic_time,
+ query: query
+ }
end
def call(memo, *)
@@ -28,25 +23,42 @@ module Gitlab
def final_value(memo)
return if memo.nil?
- complexity, depth, field_usages = GraphQL::Analysis.analyze_query(memo[:query], ALL_ANALYZERS)
+ query = memo[:query]
+ complexity, depth, field_usages = GraphQL::Analysis.analyze_query(query, ALL_ANALYZERS)
memo[:depth] = depth
memo[:complexity] = complexity
# This duration is not the execution time of the
# query but the execution time of the analyzer.
- memo[:duration_s] = duration(memo[:time_started]).round(1)
+ memo[:duration_s] = duration(memo[:time_started])
memo[:used_fields] = field_usages.first
memo[:used_deprecated_fields] = field_usages.second
- RequestStore.store[:graphql_logs] ||= []
- RequestStore.store[:graphql_logs] << memo
- GraphqlLogger.info(memo.except!(:time_started, :query))
+ push_to_request_store(memo)
+
+ # This gl_analysis is included in the tracer log
+ query.context[:gl_analysis] = memo.except!(:time_started, :query)
rescue StandardError => e
Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e)
end
private
+ def push_to_request_store(memo)
+ query = memo[:query]
+
+ # TODO: This RequestStore management is used to handle setting request wide metadata
+ # to improve preexisting logging. We should handle this either with ApplicationContext
+ # or in a separate tracer.
+ # https://gitlab.com/gitlab-org/gitlab/-/issues/343802
+
+ RequestStore.store[:graphql_logs] ||= []
+ RequestStore.store[:graphql_logs] << memo.except(:time_started, :duration_s, :query).merge({
+ variables: process_variables(query.provided_variables),
+ operation_name: query.operation_name
+ })
+ end
+
def process_variables(variables)
filtered_variables = filter_sensitive_variables(variables)
@@ -66,16 +78,6 @@ module Gitlab
def duration(time_started)
Gitlab::Metrics::System.monotonic_time - time_started
end
-
- def default_initial_values(query)
- {
- time_started: Gitlab::Metrics::System.monotonic_time,
- query_string: nil,
- query: query,
- variables: nil,
- duration_s: nil
- }
- end
end
end
end