diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-09 21:13:13 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-09 21:13:13 +0300 |
commit | efcaec8a140e2b93d1f43d5afd7a5c35cdd4dad7 (patch) | |
tree | f10a4a70e5c9213c4cdc7a55788e69f8850d899b /lib/gitlab/graphql | |
parent | e6a54b33a9712d7f1a995df47f678fbb78bcd6b7 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/graphql')
-rw-r--r-- | lib/gitlab/graphql/known_operations.rb | 5 | ||||
-rw-r--r-- | lib/gitlab/graphql/tracers/metrics_tracer.rb | 48 |
2 files changed, 53 insertions, 0 deletions
diff --git a/lib/gitlab/graphql/known_operations.rb b/lib/gitlab/graphql/known_operations.rb index 954efa5a933..ead52935945 100644 --- a/lib/gitlab/graphql/known_operations.rb +++ b/lib/gitlab/graphql/known_operations.rb @@ -7,6 +7,11 @@ module Gitlab def to_caller_id "graphql:#{name}" end + + def query_urgency + # We'll be able to actually correlate query_urgency with https://gitlab.com/gitlab-org/gitlab/-/issues/345141 + ::Gitlab::EndpointAttributes::DEFAULT_URGENCY + end end ANONYMOUS = Operation.new("anonymous").freeze diff --git a/lib/gitlab/graphql/tracers/metrics_tracer.rb b/lib/gitlab/graphql/tracers/metrics_tracer.rb new file mode 100644 index 00000000000..9fc001c0a6d --- /dev/null +++ b/lib/gitlab/graphql/tracers/metrics_tracer.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module Gitlab + module Graphql + module Tracers + class MetricsTracer + def self.use(schema) + schema.tracer(self.new) + end + + # See https://graphql-ruby.org/api-doc/1.12.16/GraphQL/Tracing for full list of events + def trace(key, data) + result = yield + + case key + when "execute_query" + increment_query_sli(data) + end + + result + end + + private + + def increment_query_sli(data) + duration_s = data.fetch(:duration_s, nil) + query = data.fetch(:query, nil) + + # We're just being defensive here... + # duration_s comes from TimerTracer and we should be pretty much guaranteed it exists + return unless duration_s && query + + operation = ::Gitlab::Graphql::KnownOperations.default.from_query(query) + query_urgency = operation.query_urgency + + Gitlab::Metrics::RailsSlis.graphql_query_apdex.increment( + labels: { + endpoint_id: ::Gitlab::ApplicationContext.current_context_attribute(:caller_id), + feature_category: ::Gitlab::ApplicationContext.current_context_attribute(:feature_category), + query_urgency: query_urgency.name + }, + success: duration_s <= query_urgency.duration + ) + end + end + end + end +end |