yabeda-graphql 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e6f15447f058d31396f82fafe18a97fa19a24fcf0f1d672d9ae06155f49e2e1
4
- data.tar.gz: 3770f253aa4a2fe2bf44abfdc43f87a77d051389e7116b20ffff0c8301556b46
3
+ metadata.gz: a08157e5e641a56c7ca1a966c76c2e468571871a38bc3662fc4be6fa9f1301f2
4
+ data.tar.gz: 463081c19996433cea8a02d8226b1375bafc2cbc5ef2738c5dafce873553362f
5
5
  SHA512:
6
- metadata.gz: bb025e9085107b5c675d644fdc26aa05775cd4c6ca9b6a73f192d4f385c5564644107d6cd731489f25f7b33bad451241b123f1abd4d0aff9429dbc3b3e2cbfb3
7
- data.tar.gz: 84554428c3bbf59ba2d56a467628c50c43d838f7774d84f601d9e3a8d5e2c92a987ed7852dc28b34e5bc806206334279d3846a1996180b181fc57ce58dd5e61f
6
+ metadata.gz: bfb1be162dd40907f2ad7229602e8a844f8fb5edb578e2d93fef93411c4a20d33a631c4560e071b5c025a5bd019ea62b0488b7dcc4bc86a76e46e17873ac5e37
7
+ data.tar.gz: 2aab2eb5e7e9ed55cc16611ec372107c4d3316deb7eb630ddf1422106a8574f4737b0a7a3aafdfad11074aff68a34f0eaedb4bd19ec3880ae2b955171869037a
@@ -0,0 +1,19 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
+ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
+
8
+ ## 0.2.0 - 2020-03-21
9
+
10
+ ### Changed
11
+
12
+ - Method of hooking gem into schema. BREAKING CHANGE! [@Envek]
13
+ - Sum durations of lazy and non-lazy resolvings for every field. [@Envek]
14
+
15
+ ## 0.1.0 - 2020-03-17
16
+
17
+ - Initial release of yabeda-graphql gem. [@Envek]
18
+
19
+ [@Envek]: https://github.com/Envek "Andrey Novikov"
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yabeda-graphql (0.1.0)
4
+ yabeda-graphql (0.2.0)
5
5
  graphql (~> 1.9)
6
6
  yabeda (~> 0.2)
7
7
 
data/README.md CHANGED
@@ -29,7 +29,7 @@ Built-in metrics for [GraphQL-Ruby] monitoring out of the box! Part of the [yabe
29
29
 
30
30
  ```ruby
31
31
  class YourAppSchema < GraphQL::Schema
32
- use Yabeda::GraphQL::Tracing, trace_scalars: true
32
+ use Yabeda::GraphQL
33
33
  end
34
34
  ```
35
35
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- yabeda-graphql (0.1.0)
4
+ yabeda-graphql (0.2.0)
5
5
  graphql (~> 1.9)
6
6
  yabeda (~> 0.2)
7
7
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- yabeda-graphql (0.1.0)
4
+ yabeda-graphql (0.2.0)
5
5
  graphql (~> 1.9)
6
6
  yabeda (~> 0.2)
7
7
 
@@ -1,13 +1,14 @@
1
1
  require "yabeda"
2
2
  require "yabeda/graphql/version"
3
3
  require "yabeda/graphql/tracing"
4
+ require "yabeda/graphql/instrumentation"
4
5
 
5
6
  module Yabeda
6
7
  module GraphQL
7
8
  class Error < StandardError; end
8
9
 
9
10
  REQUEST_BUCKETS = [
10
- 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10,
11
+ 0.001, 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10,
11
12
  ].freeze
12
13
 
13
14
  Yabeda.configure do
@@ -27,5 +28,10 @@ module Yabeda
27
28
  counter :mutation_fields_count, comment: "A counter for mutation root fields",
28
29
  tags: %i[name deprecated]
29
30
  end
31
+
32
+ def self.use(schema)
33
+ schema.instrument(:query, Instrumentation.new)
34
+ schema.use Tracing, trace_scalars: true
35
+ end
30
36
  end
31
37
  end
@@ -0,0 +1,27 @@
1
+ module Yabeda
2
+ module GraphQL
3
+ class Instrumentation
4
+ def before_query(query)
5
+ reset_cache!(query)
6
+ end
7
+
8
+ def after_query(query)
9
+ cache(query).each do |_path, tags:, duration:|
10
+ Yabeda.graphql.field_resolve_runtime.measure(tags, duration)
11
+ Yabeda.graphql.fields_request_count.increment(tags)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def cache(query)
18
+ query.context.namespace(Yabeda::GraphQL)[:field_call_cache]
19
+ end
20
+
21
+ def reset_cache!(query)
22
+ query.context.namespace(Yabeda::GraphQL)[:field_call_cache] =
23
+ Hash.new { |h,k| h[k] = { tags: {}, duration: 0.0 } }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -26,10 +26,10 @@ module Yabeda
26
26
  when "execute_field", "execute_field_lazy"
27
27
  field, path, query = extract_field_trace_data(data)
28
28
 
29
- return result if key == "execute_field" && query.schema.lazy?(result)
30
-
31
29
  tags = extract_field_tags(field)
32
30
  if path.length == 1
31
+ return result if key == "execute_field" && query.schema.lazy?(result)
32
+
33
33
  if query.query?
34
34
  instrument_query_execution(tags)
35
35
  elsif query.mutation?
@@ -38,7 +38,7 @@ module Yabeda
38
38
  # Not implemented yet
39
39
  end
40
40
  else
41
- instrument_field_execution(tags, duration)
41
+ instrument_field_execution(query, path, tags, duration)
42
42
  end
43
43
  end
44
44
 
@@ -63,9 +63,9 @@ module Yabeda
63
63
  }
64
64
  end
65
65
 
66
- def instrument_field_execution(tags, duration)
67
- Yabeda.graphql.field_resolve_runtime.measure(tags, duration)
68
- Yabeda.graphql.fields_request_count.increment(tags)
66
+ def instrument_field_execution(query, path, tags, duration)
67
+ cache(query)[path][:tags] = tags
68
+ cache(query)[path][:duration] += duration
69
69
  end
70
70
 
71
71
  def instrument_mutation_execution(tags)
@@ -78,6 +78,10 @@ module Yabeda
78
78
  Yabeda.graphql.query_fields_count.increment(tags)
79
79
  end
80
80
 
81
+ def cache(query)
82
+ query.context.namespace(Yabeda::GraphQL)[:field_call_cache]
83
+ end
84
+
81
85
  def platform_field_key(type, field)
82
86
  "#{type.graphql_name}.#{field.graphql_name}"
83
87
  end
@@ -1,5 +1,5 @@
1
1
  module Yabeda
2
2
  module GraphQL
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yabeda-graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Novikov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-17 00:00:00.000000000 Z
11
+ date: 2020-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yabeda
@@ -106,6 +106,7 @@ files:
106
106
  - ".rspec"
107
107
  - ".travis.yml"
108
108
  - Appraisals
109
+ - CHANGELOG.md
109
110
  - Gemfile
110
111
  - Gemfile.lock
111
112
  - LICENSE.txt
@@ -119,6 +120,7 @@ files:
119
120
  - gemfiles/graphql_1.9.gemfile
120
121
  - gemfiles/graphql_1.9.gemfile.lock
121
122
  - lib/yabeda/graphql.rb
123
+ - lib/yabeda/graphql/instrumentation.rb
122
124
  - lib/yabeda/graphql/tracing.rb
123
125
  - lib/yabeda/graphql/version.rb
124
126
  - yabeda-graphql.gemspec