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:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-11-09 21:13:13 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-11-09 21:13:13 +0300
commitefcaec8a140e2b93d1f43d5afd7a5c35cdd4dad7 (patch)
treef10a4a70e5c9213c4cdc7a55788e69f8850d899b /lib/gitlab/graphql
parente6a54b33a9712d7f1a995df47f678fbb78bcd6b7 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/graphql')
-rw-r--r--lib/gitlab/graphql/known_operations.rb5
-rw-r--r--lib/gitlab/graphql/tracers/metrics_tracer.rb48
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