optics-agent 0.4.2 → 0.4.3

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
  SHA1:
3
- metadata.gz: b416f4296566bd8ee9c925ebf368420da59875f9
4
- data.tar.gz: 8a7915bbf4b4aeea8020e6d2e7e848696f567bcd
3
+ metadata.gz: e66f0b58d77d29c4999ab86a26b9881eec66b75d
4
+ data.tar.gz: 2cbac6e78c27f4636cc40c94e8cf613e764946a7
5
5
  SHA512:
6
- metadata.gz: 4a74329dd8338234ab390071767c7212c5a6d7fcab76d137be9d579c1a2e53a6a171af28f663e99bdd133e1e6f3c7a88c73479558a150635b5ac1b2335b21869
7
- data.tar.gz: d634b06b48fc8e2439997eec02313f45b4fa61cc6087932048c02653b2ca9da9c4ae5b46420a890c81acdd94091a73ea670dbbff07db1da68fe7def4a8198f9c
6
+ metadata.gz: 1eec3c92af1dfad4da0a0c22bba4eb0d458100e4947a3c4392867884e1f1caff11550d973aca07c4147becd0eef51bb712e5e72ab4955c03a53c3b9f011509b9
7
+ data.tar.gz: 56466763944928e04c81a8467a774fd978064ce8d144be2445058add1179af57fb0bc523125c91e56be948f6566474124044d27943fbc5e39a4c928e7cd12974
data/README.md CHANGED
@@ -63,7 +63,7 @@ You must:
63
63
 
64
64
  ### Configuration
65
65
 
66
- After creating an agent, you can configure it with:
66
+ After creating an agent, you can configure it with (the values listed are the defaults):
67
67
 
68
68
  ```rb
69
69
  # defaults are show below
@@ -102,6 +102,30 @@ agent.configure do
102
102
  end
103
103
  ```
104
104
 
105
+ ## Troubleshooting
106
+
107
+ The Optics agent is designed to allow your application to continue working, even if the agent is not configured properly.
108
+
109
+ ### No data in Optics
110
+
111
+ If there is no data being sent to Optics, ensure you've followed the steps above, then check your application logs to look for the following messages:
112
+
113
+ ### Message: No api_key set.
114
+
115
+ Solution: Get a valid API key from Optics and use the `OPTICS_API_KEY` environment variable, or [configuration](#configuration) to pass it to the agent.
116
+
117
+ ### Message: No schema instrumented
118
+
119
+ Solution: Ensure you are passing your schema to the agent [configuration](#configuration).
120
+
121
+ ### Message: No agent passed in graphql context
122
+
123
+ Solution: Ensure you are passing `context: { optics_agent: env[:optics_agent].with_document(query_string) }` where `env` is the Rack request environment, and `query_string` is the string representing your query. See the [setup instructions](#rails-setup) for more details.
124
+
125
+ ### Debugging
126
+
127
+ You can also use the `debug` [configuration](#configuration) setting to get more detailed debugging information, which may give hints as to what the issue is.
128
+
105
129
  ## Development
106
130
 
107
131
  ### Running tests
@@ -5,6 +5,7 @@ require 'optics-agent/reporting/schema_job'
5
5
  require 'optics-agent/reporting/query-trace'
6
6
  require 'net/http'
7
7
  require 'faraday'
8
+ require 'logger'
8
9
 
9
10
  module OpticsAgent
10
11
  class Agent
@@ -13,9 +13,15 @@ module OpticsAgent
13
13
  end
14
14
  }
15
15
 
16
- field.redefine do
16
+ new_field = field.redefine do
17
17
  resolve(new_resolve_proc)
18
18
  end
19
+
20
+ if old_resolve_proc.instance_of? GraphQL::Relay::ConnectionResolve
21
+ new_field.arguments = field.arguments
22
+ end
23
+
24
+ new_field
19
25
  end
20
26
 
21
27
  def middleware(agent, parent_type, parent_object, field_definition, field_args, query_context, next_middleware)
@@ -0,0 +1,59 @@
1
+ require 'ostruct'
2
+ require 'optics-agent/instrumenters/field'
3
+ require 'graphql'
4
+
5
+ include OpticsAgent
6
+
7
+ describe "connection" do
8
+ it 'collects the correct query stats' do
9
+ person_type = GraphQL::ObjectType.define do
10
+ name "Person"
11
+ field :firstName do
12
+ type types.String
13
+ resolve -> (obj, args, ctx) { sleep(0.100); return 'Tom' }
14
+ end
15
+ field :lastName do
16
+ type types.String
17
+ resolve -> (obj, args, ctx) { sleep(0.100); return 'Coleman' }
18
+ end
19
+ end
20
+ query_type = GraphQL::ObjectType.define do
21
+ name 'Query'
22
+ field :person do
23
+ type person_type
24
+ resolve -> (obj, args, ctx) { sleep(0.050); return {} }
25
+ end
26
+ connection :people do
27
+ type person_type.connection_type
28
+ resolve -> (obj, args, ctx) { ["a", "b", "c"] }
29
+ end
30
+ end
31
+
32
+ instrumenter = Instrumenters::Field.new
33
+ instrumenter.agent = true
34
+ schema = GraphQL::Schema.define do
35
+ query query_type
36
+ instrument :field, instrumenter
37
+ end
38
+
39
+ query = spy("query")
40
+ allow(query).to receive(:duration_so_far).and_return(1.0)
41
+
42
+ result = schema.execute('{ people(first: 2) { edges { node { firstName lastName } } } }', {
43
+ context: { optics_agent: OpenStruct.new(query: query) }
44
+ })
45
+
46
+ expect(result).not_to have_key("errors")
47
+ expect(result).to have_key("data")
48
+
49
+ expect(query).to have_received(:report_field).exactly(1 + 1 + 2 * 1 + 2 * 2).times
50
+ expect(query).to have_received(:report_field)
51
+ .with('Query', 'people', be_instance_of(Float), be_instance_of(Float))
52
+ expect(query).to have_received(:report_field)
53
+ .exactly(2).times
54
+ .with('Person', 'firstName', be_instance_of(Float), be_instance_of(Float))
55
+ expect(query).to have_received(:report_field)
56
+ .exactly(2).times
57
+ .with('Person', 'lastName', be_instance_of(Float), be_instance_of(Float))
58
+ end
59
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optics-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - 'Tom Coleman '
@@ -153,6 +153,7 @@ files:
153
153
  - lib/optics-agent/reporting/schema.rb
154
154
  - lib/optics-agent/reporting/schema_job.rb
155
155
  - spec/benchmark/benchmark.rb
156
+ - spec/field_connection_instrumenter_spec.rb
156
157
  - spec/field_instrumenter_spec.rb
157
158
  - spec/latency_spec.rb
158
159
  - spec/query-normalization_spec.rb
@@ -188,6 +189,7 @@ specification_version: 4
188
189
  summary: An Agent for Apollo Optics
189
190
  test_files:
190
191
  - spec/benchmark/benchmark.rb
192
+ - spec/field_connection_instrumenter_spec.rb
191
193
  - spec/field_instrumenter_spec.rb
192
194
  - spec/latency_spec.rb
193
195
  - spec/query-normalization_spec.rb