summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab
diff options
context:
space:
mode:
authorJan Provaznik <jprovaznik@gitlab.com>2019-04-02 10:26:53 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2019-04-02 10:26:53 +0000
commit0e66357a3e411b44647cc4d4ca10c2a19b9a3b55 (patch)
treed927ac52e9afd011fefbbe0f81f891dbaf8efb3f /spec/lib/gitlab
parentb7b6f8483d4ce9725779527213a7c94dbb59a757 (diff)
downloadgitlab-ce-0e66357a3e411b44647cc4d4ca10c2a19b9a3b55.tar.gz
Monitor GraphQL with Prometheus
Extends graphql's platform tracing class to observe duration of graphql methods. In graphql 1.8.11 is added prometheus class but it's not very useful for us because it uses prometheus_exporter to export results.
Diffstat (limited to 'spec/lib/gitlab')
-rw-r--r--spec/lib/gitlab/graphql/tracing_spec.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/spec/lib/gitlab/graphql/tracing_spec.rb b/spec/lib/gitlab/graphql/tracing_spec.rb
new file mode 100644
index 00000000000..6bae737d0f6
--- /dev/null
+++ b/spec/lib/gitlab/graphql/tracing_spec.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Graphql::Tracing do
+ let!(:graphql_duration_seconds) { double('Gitlab::Metrics::NullMetric') }
+
+ before do
+ allow(Gitlab::Metrics)
+ .to receive(:histogram)
+ .with(:graphql_duration_seconds, 'GraphQL execution time')
+ .and_return(graphql_duration_seconds)
+ end
+
+ it 'updates graphql histogram with expected labels' do
+ query = 'query { users { id } }'
+
+ expect_metric('graphql.lex', 'lex')
+ expect_metric('graphql.parse', 'parse')
+ expect_metric('graphql.validate', 'validate')
+ expect_metric('graphql.analyze', 'analyze_multiplex')
+ expect_metric('graphql.execute', 'execute_query_lazy')
+ expect_metric('graphql.execute', 'execute_multiplex')
+
+ GitlabSchema.execute(query)
+ end
+
+ private
+
+ def expect_metric(platform_key, key)
+ expect(graphql_duration_seconds)
+ .to receive(:observe)
+ .with({ platform_key: platform_key, key: key }, be > 0.0)
+ end
+end