[GraphQL] use Execution::Interpreter (+ update Skylight) (#4626)

GraphQL : mise à jour de l'analyse des performances
This commit is contained in:
Pierre de La Morinerie 2020-01-28 15:47:34 +01:00 committed by GitHub
commit 897cdf6632
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 38 additions and 16 deletions

View file

@ -242,7 +242,7 @@ GEM
graphiql-rails (1.7.0)
railties
sprockets-rails
graphql (1.9.15)
graphql (1.9.16)
graphql-batch (0.4.1)
graphql (>= 1.3, < 2)
promise.rb (~> 0.7.2)
@ -614,9 +614,9 @@ GEM
rack (~> 2.0)
rack-protection (= 2.0.5)
tilt (~> 2.0)
skylight (3.1.2)
skylight-core (= 3.1.2)
skylight-core (3.1.2)
skylight (4.2.1)
skylight-core (= 4.2.1)
skylight-core (4.2.1)
activesupport (>= 4.2.0)
smart_listing (1.2.2)
coffee-rails

View file

@ -59,19 +59,29 @@ class Api::V2::Schema < GraphQL::Schema
raise GraphQL::ExecutionError.new("An object of type #{error.type.graphql_name} was hidden due to permissions", extensions: { code: :unauthorized })
end
middleware(GraphQL::Schema::TimeoutMiddleware.new(max_seconds: 5) do |_, query|
Rails.logger.info("GraphQL Timeout: #{query.query_string}")
end)
use GraphQL::Execution::Interpreter
use GraphQL::Analysis::AST
use GraphQL::Schema::Timeout, max_seconds: 5
use GraphQL::Batch
use GraphQL::Backtrace
if Rails.env.development?
query_analyzer(GraphQL::Analysis::QueryComplexity.new do |_, complexity|
Rails.logger.info("[GraphQL Query Complexity] #{complexity}")
end)
query_analyzer(GraphQL::Analysis::QueryDepth.new do |_, depth|
Rails.logger.info("[GraphQL Query Depth] #{depth}")
end)
end
class LogQueryDepth < GraphQL::Analysis::AST::QueryDepth
def result
Rails.logger.info("[GraphQL Query Depth] #{super}")
end
end
use GraphQL::Batch
use GraphQL::Tracing::SkylightTracing
class LogQueryComplexity < GraphQL::Analysis::AST::QueryComplexity
def result
Rails.logger.info("[GraphQL Query Complexity] #{super}")
end
end
query_analyzer(LogQueryComplexity)
query_analyzer(LogQueryDepth)
else
query_analyzer(GraphQL::Analysis::AST::MaxQueryComplexity)
query_analyzer(GraphQL::Analysis::AST::MaxQueryDepth)
end
end

View file

@ -49,5 +49,7 @@ module TPS
debounce_delay: 3000,
status_visible_duration: 6000
}
config.skylight.probes += [:graphql]
end
end

View file

@ -21,6 +21,7 @@ describe ApplicationController, type: :controller do
let(:payload) { {} }
before do
allow(@controller).to receive(:content_type).and_return('')
allow(@controller).to receive(:current_user).and_return(current_user)
expect(@controller).to receive(:current_instructeur).and_return(current_instructeur)
expect(@controller).to receive(:current_administrateur).and_return(current_administrateur)
@ -42,6 +43,8 @@ describe ApplicationController, type: :controller do
payload.delete(key)
end
expect(payload).to eq({
sk_rendered_format: nil,
sk_variant: [],
user_agent: 'Rails Testing',
user_roles: 'Guest'
})
@ -61,6 +64,8 @@ describe ApplicationController, type: :controller do
payload.delete(key)
end
expect(payload).to eq({
sk_rendered_format: nil,
sk_variant: [],
user_agent: 'Rails Testing',
user_id: current_user.id,
user_email: current_user.email,
@ -85,6 +90,8 @@ describe ApplicationController, type: :controller do
payload.delete(key)
end
expect(payload).to eq({
sk_rendered_format: nil,
sk_variant: [],
user_agent: 'Rails Testing',
user_id: current_user.id,
user_email: current_user.email,

View file

@ -4,6 +4,7 @@ describe Manager::ApplicationController, type: :controller do
let(:payload) { {} }
before do
allow(@controller).to receive(:content_type).and_return('')
allow(@controller).to receive(:current_user).and_return(current_user)
@controller.send(:append_info_to_payload, payload)
end
@ -13,6 +14,8 @@ describe Manager::ApplicationController, type: :controller do
payload.delete(key)
end
expect(payload).to eq({
sk_rendered_format: nil,
sk_variant: [],
user_agent: 'Rails Testing',
user_id: current_user.id,
user_email: current_user.email