Class: Gitlab::Graphql::QueryAnalyzers::AST::LoggerAnalyzer
- Inherits:
-
GraphQL::Analysis::AST::Analyzer
- Object
- GraphQL::Analysis::AST::Analyzer
- Gitlab::Graphql::QueryAnalyzers::AST::LoggerAnalyzer
- Defined in:
- lib/gitlab/graphql/query_analyzers/ast/logger_analyzer.rb
Constant Summary collapse
- COMPLEXITY_ANALYZER =
GraphQL::Analysis::AST::QueryComplexity
- DEPTH_ANALYZER =
GraphQL::Analysis::AST::QueryDepth
- FIELD_USAGE_ANALYZER =
GraphQL::Analysis::AST::FieldUsage
- ALL_ANALYZERS =
[COMPLEXITY_ANALYZER, DEPTH_ANALYZER, FIELD_USAGE_ANALYZER].freeze
- FILTER_PARAMETERS =
(::Rails.application.config.filter_parameters + [/password/i]).freeze
Instance Method Summary collapse
-
#initialize(query) ⇒ LoggerAnalyzer
constructor
A new instance of LoggerAnalyzer.
- #result ⇒ Object
Constructor Details
#initialize(query) ⇒ LoggerAnalyzer
Returns a new instance of LoggerAnalyzer.
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/gitlab/graphql/query_analyzers/ast/logger_analyzer.rb', line 14 def initialize(query) super @results = default_initial_values(query).merge({ time_started: Gitlab::Metrics::System.monotonic_time }) rescue StandardError => e Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e) @results = default_initial_values(query_or_multiplex) end |
Instance Method Details
#result ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/gitlab/graphql/query_analyzers/ast/logger_analyzer.rb', line 25 def result # In its most general form, .analyze_query returns one of the # following: # # - An array with one result per analyzer, in the order they were # provided, but only the ones where #analyze? returned true prior # to analysis. # # - [GraphQL::AnalysisError] if the analysis times out # # - [] if an authorization error is raised # # For our analyzers, #analyze? is always true, so we can assume that # there are always three valid results, one error, no results at all # (we probably always have results, but we might as well be robust # to that case). complexity_or_error, depth, field_usages = GraphQL::Analysis::AST.analyze_query(@subject, ALL_ANALYZERS, multiplex_analyzers: []) case complexity_or_error when Integer results[:complexity] = complexity_or_error when GraphQL::AnalysisError results[:analysis_error] = complexity_or_error. end field_usages ||= {} # in the zero or one result case, field_usages needs a sensible default results[:depth] = depth # This duration is not the execution time of the # query but the execution time of the analyzer. results[:duration_s] = duration(results[:time_started]) results[:used_fields] = field_usages[:used_fields] results[:used_deprecated_fields] = field_usages[:used_deprecated_fields] results[:used_deprecated_arguments] = field_usages[:used_deprecated_arguments] push_to_request_store(results) # This gl_analysis is included in the tracer log query.context[:gl_analysis] = results.except!(:time_started, :query) rescue StandardError => e Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e) end |