optics-agent 0.4.4 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +23 -5
- data/lib/lib.iml +14 -0
- data/lib/optics-agent/agent.rb +68 -16
- data/lib/optics-agent/instrumenters/field.rb +1 -13
- data/lib/optics-agent/instrumenters/patch-graphql-schema.rb +9 -5
- data/lib/optics-agent/instrumenters/query.rb +43 -0
- data/lib/optics-agent/query_context.rb +31 -0
- data/lib/optics-agent/rack-middleware.rb +6 -25
- data/lib/optics-agent/reporting/detect_server_side_error.rb +18 -0
- data/lib/optics-agent/reporting/report.rb +1 -1
- data/lib/optics-agent/reporting/report_job.rb +1 -2
- data/spec/spec.iml +11 -0
- metadata +16 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0a16e6bcb59a19202e8fd8d27ee54144553f047
|
4
|
+
data.tar.gz: 3afbe9155a7e006478d9f83d5e21878205f8deac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b329520e3efac3a5b884c5bba531cdf53fd246065092a7a2be252aef290d5fac15c8e6c10fc1d193237149d826ef8fb7d44d7966d518cfc552a6c56b9446d566
|
7
|
+
data.tar.gz: 34372adda6e7e5a346ebdd9b19e41fc068c9b26b5b93fe783f003b5effce7fdfd0891fbbd081b6ab996f7276844ab8e94e51f18d590d776b63eece8b379507b5
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# optics-agent-ruby
|
2
|
-
Optics
|
2
|
+
Apollo Optics agent for GraphQL Monitoring in Ruby.
|
3
3
|
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/optics-agent.svg)](https://badge.fury.io/rb/optics-agent) [![Build Status](https://travis-ci.org/apollostack/optics-agent-ruby.svg?branch=master)](https://travis-ci.org/apollostack/optics-agent-ruby)
|
5
5
|
|
@@ -30,7 +30,7 @@ end
|
|
30
30
|
Rails.application.config.middleware.use optics_agent.rack_middleware
|
31
31
|
```
|
32
32
|
|
33
|
-
Register Optics
|
33
|
+
Register Apollo Optics agent from your on the GraphQL context within your `graphql` action as below:
|
34
34
|
```ruby
|
35
35
|
def create
|
36
36
|
query_string = params[:query]
|
@@ -41,8 +41,8 @@ def create
|
|
41
41
|
variables: query_variables,
|
42
42
|
context: {
|
43
43
|
# This is the key line: we take the optics_agent passed in from the
|
44
|
-
# Rack environment
|
45
|
-
optics_agent: env[:optics_agent]
|
44
|
+
# Rack environment and pass it as context
|
45
|
+
optics_agent: env[:optics_agent]
|
46
46
|
}
|
47
47
|
)
|
48
48
|
|
@@ -61,6 +61,24 @@ You must:
|
|
61
61
|
3. Attach the `agent.rack_middleware` to your Rack router
|
62
62
|
4. Ensure you pass the `optics_agent` context from the rack environment to your schema execution.
|
63
63
|
|
64
|
+
### Non-HTTP queries
|
65
|
+
|
66
|
+
If you aren't actually servicing a HTTP/Rack request in executing the query, simply pass:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
context: { optics_agent: :no_rack }
|
70
|
+
```
|
71
|
+
|
72
|
+
This will mean the query is instrumented without HTTP timings or client versions.
|
73
|
+
|
74
|
+
### Skipping queries
|
75
|
+
|
76
|
+
If you want to skip a particular query, pass:
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
context: { optics_agent: :skip }
|
80
|
+
```
|
81
|
+
|
64
82
|
### Configuration
|
65
83
|
|
66
84
|
After creating an agent, you can configure it with (the values listed are the defaults):
|
@@ -104,7 +122,7 @@ end
|
|
104
122
|
|
105
123
|
## Troubleshooting
|
106
124
|
|
107
|
-
The Optics agent is designed to allow your application to continue working, even if the agent is not configured properly.
|
125
|
+
The Apollo Optics agent is designed to allow your application to continue working, even if the agent is not configured properly.
|
108
126
|
|
109
127
|
### No data in Optics
|
110
128
|
|
data/lib/lib.iml
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<module type="RUBY_MODULE" version="4">
|
3
|
+
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
4
|
+
<exclude-output />
|
5
|
+
<content url="file://$MODULE_DIR$" />
|
6
|
+
<orderEntry type="jdk" jdkName="rbenv: 2.3.3" jdkType="RUBY_SDK" />
|
7
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
8
|
+
<orderEntry type="library" scope="PROVIDED" name="faraday (v0.10.1, rbenv: 2.3.3) [gem]" level="application" />
|
9
|
+
<orderEntry type="library" scope="PROVIDED" name="google-protobuf (v3.1.0, rbenv: 2.3.3) [gem]" level="application" />
|
10
|
+
<orderEntry type="library" scope="PROVIDED" name="graphql (v1.4.0, rbenv: 2.3.3) [gem]" level="application" />
|
11
|
+
<orderEntry type="library" scope="PROVIDED" name="hitimes (v1.2.4, rbenv: 2.3.3) [gem]" level="application" />
|
12
|
+
<orderEntry type="library" scope="PROVIDED" name="io-console (v0.4.5, rbenv: 2.3.3) [gem]" level="application" />
|
13
|
+
</component>
|
14
|
+
</module>
|
data/lib/optics-agent/agent.rb
CHANGED
@@ -3,9 +3,11 @@ require 'optics-agent/instrumenters/field'
|
|
3
3
|
require 'optics-agent/reporting/report_job'
|
4
4
|
require 'optics-agent/reporting/schema_job'
|
5
5
|
require 'optics-agent/reporting/query-trace'
|
6
|
+
require 'optics-agent/reporting/detect_server_side_error'
|
6
7
|
require 'net/http'
|
7
8
|
require 'faraday'
|
8
9
|
require 'logger'
|
10
|
+
require 'time'
|
9
11
|
|
10
12
|
module OpticsAgent
|
11
13
|
class Agent
|
@@ -20,6 +22,7 @@ module OpticsAgent
|
|
20
22
|
attr_reader :schema, :report_traces
|
21
23
|
|
22
24
|
def initialize
|
25
|
+
@stats_reporting_thread = nil
|
23
26
|
@query_queue = []
|
24
27
|
@semaphone = Mutex.new
|
25
28
|
|
@@ -75,7 +78,7 @@ Perhaps you are calling both `agent.configure { schema YourSchema }` and
|
|
75
78
|
|
76
79
|
# We call this method on every request to ensure that the reporting thread
|
77
80
|
# is active in the correct process for pre-forking webservers like unicorn
|
78
|
-
def
|
81
|
+
def ensure_reporting_stats!
|
79
82
|
unless @schema
|
80
83
|
warn """No schema instrumented.
|
81
84
|
Use the `schema` configuration setting, or call `agent.instrument_schema`
|
@@ -83,30 +86,80 @@ Use the `schema` configuration setting, or call `agent.instrument_schema`
|
|
83
86
|
return
|
84
87
|
end
|
85
88
|
|
86
|
-
unless
|
89
|
+
unless reporting_stats? || disabled?
|
87
90
|
schedule_report
|
88
|
-
@reporting_thread_active = true
|
89
91
|
end
|
90
92
|
end
|
91
93
|
|
94
|
+
# @deprecated Use ensure_reporting_stats! instead
|
95
|
+
def ensure_reporting!
|
96
|
+
ensure_reporting_stats!
|
97
|
+
end
|
98
|
+
|
92
99
|
def reporting_connection
|
93
100
|
@reporting_connection ||=
|
94
|
-
Faraday.new(:url => @configuration.endpoint_url) do |
|
101
|
+
Faraday.new(:url => @configuration.endpoint_url) do |conn|
|
102
|
+
conn.request :retry,
|
103
|
+
:max => 5,
|
104
|
+
:interval => 0.1,
|
105
|
+
:max_interval => 10,
|
106
|
+
:backoff_factor => 2,
|
107
|
+
:exceptions => [Exception],
|
108
|
+
:retry_if => ->(env, exc) { true }
|
109
|
+
conn.use OpticsAgent::Reporting::DetectServerSideError
|
110
|
+
|
95
111
|
# XXX: allow setting adaptor in config
|
96
|
-
|
112
|
+
conn.adapter :net_http_persistent
|
97
113
|
end
|
98
114
|
end
|
99
115
|
|
116
|
+
def reporting_stats?
|
117
|
+
@stats_reporting_thread != nil && !!@stats_reporting_thread.status
|
118
|
+
end
|
119
|
+
|
100
120
|
def schedule_report
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
121
|
+
@semaphone.synchronize do
|
122
|
+
return if reporting_stats?
|
123
|
+
|
124
|
+
debug "spawning reporting thread"
|
125
|
+
|
126
|
+
thread = Thread.new do
|
127
|
+
begin
|
128
|
+
debug "reporting thread spawned"
|
129
|
+
|
130
|
+
report_interval = @configuration.report_interval_ms / 1000.0
|
131
|
+
last_started = Time.now
|
132
|
+
|
133
|
+
while true
|
134
|
+
next_send = last_started + report_interval
|
135
|
+
sleep_time = next_send - Time.now
|
136
|
+
|
137
|
+
if sleep_time < 0
|
138
|
+
warn 'Report took more than one interval! Some requests might appear at the wrong time.'
|
139
|
+
else
|
140
|
+
sleep sleep_time
|
141
|
+
end
|
142
|
+
|
143
|
+
debug "running reporting job"
|
144
|
+
last_started = Time.now
|
145
|
+
ReportJob.new.perform(self)
|
146
|
+
debug "finished running reporting job"
|
147
|
+
end
|
148
|
+
rescue Exception => e
|
149
|
+
warn "Stats report thread dying: #{e}"
|
150
|
+
end
|
109
151
|
end
|
152
|
+
|
153
|
+
at_exit do
|
154
|
+
if thread.status
|
155
|
+
debug 'sending last stats report before exiting'
|
156
|
+
thread.exit
|
157
|
+
ReportJob.new.perform(self)
|
158
|
+
debug 'last stats report sent'
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
@stats_reporting_thread = thread
|
110
163
|
end
|
111
164
|
end
|
112
165
|
|
@@ -142,16 +195,15 @@ Use the `schema` configuration setting, or call `agent.instrument_schema`
|
|
142
195
|
request.url path
|
143
196
|
request.headers['x-api-key'] = @configuration.api_key
|
144
197
|
request.headers['user-agent'] = "optics-agent-rb"
|
145
|
-
|
146
198
|
request.body = message.class.encode(message)
|
199
|
+
|
147
200
|
if @configuration.debug || @configuration.print_reports
|
148
201
|
log "sending message: #{message.class.encode_json(message)}"
|
149
202
|
end
|
150
203
|
end
|
151
204
|
|
152
205
|
if @configuration.debug || @configuration.print_reports
|
153
|
-
log "got response: #{response}"
|
154
|
-
log "response body: #{response.body}"
|
206
|
+
log "got response body: #{response.body}"
|
155
207
|
end
|
156
208
|
end
|
157
209
|
|
@@ -27,21 +27,9 @@ module OpticsAgent
|
|
27
27
|
def middleware(agent, parent_type, parent_object, field_definition, field_args, query_context, next_middleware)
|
28
28
|
agent_context = query_context[:optics_agent]
|
29
29
|
|
30
|
-
unless agent_context
|
31
|
-
agent.warn """No agent passed in graphql context.
|
32
|
-
Ensure you set `context: {optics_agent: env[:optics_agent].with_document(document) }``
|
33
|
-
when executing your graphql query.
|
34
|
-
If you don't want to instrument this query, pass `context: {optics_agent: :skip}`.
|
35
|
-
"""
|
36
|
-
# don't warn again for this query
|
37
|
-
agent_context = query_context[:optics_agent] = :skip
|
38
|
-
end
|
39
|
-
|
40
30
|
# This happens when an introspection query occurs (reporting schema)
|
41
31
|
# Also, people could potentially use it to skip reporting
|
42
|
-
if agent_context == :skip
|
43
|
-
return next_middleware.call
|
44
|
-
end
|
32
|
+
return next_middleware.call if agent_context == :skip
|
45
33
|
|
46
34
|
query = agent_context.query
|
47
35
|
|
@@ -4,22 +4,26 @@
|
|
4
4
|
|
5
5
|
require 'graphql'
|
6
6
|
require 'optics-agent/instrumenters/field'
|
7
|
+
require 'optics-agent/instrumenters/query'
|
7
8
|
|
8
9
|
module OpticsAgent::GraphQLSchemaExtensions
|
9
10
|
def define(**kwargs, &block)
|
10
|
-
@
|
11
|
+
@field_instrumenter = OpticsAgent::Instrumenters::Field.new
|
12
|
+
@query_instrumenter = OpticsAgent::Instrumenters::Query.new
|
11
13
|
|
12
14
|
class << self
|
13
15
|
def _attach_optics_agent(agent)
|
14
|
-
agent.debug "Attaching agent to
|
15
|
-
@
|
16
|
+
agent.debug "Attaching agent to instrumenters"
|
17
|
+
@field_instrumenter.agent = @query_instrumenter.agent = agent
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
19
|
-
|
21
|
+
field_instrumenter = @field_instrumenter
|
22
|
+
query_instrumenter = @query_instrumenter
|
20
23
|
super **kwargs do
|
21
24
|
instance_eval(&block) if block
|
22
|
-
instrument :field,
|
25
|
+
instrument :field, field_instrumenter
|
26
|
+
instrument :query, query_instrumenter
|
23
27
|
end
|
24
28
|
end
|
25
29
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'optics-agent/query_context'
|
2
|
+
|
3
|
+
module OpticsAgent
|
4
|
+
module Instrumenters
|
5
|
+
class Query
|
6
|
+
attr_accessor :agent
|
7
|
+
|
8
|
+
def before_query(query)
|
9
|
+
return unless @agent
|
10
|
+
query_context = query.context[:optics_agent]
|
11
|
+
return if query_context == :skip
|
12
|
+
|
13
|
+
@agent.ensure_reporting_stats!
|
14
|
+
|
15
|
+
# the rack request didn't add the agent, maybe there is none?
|
16
|
+
unless query_context
|
17
|
+
@agent.warn """No agent passed in graphql context.
|
18
|
+
Ensure you set `context: { optics_agent: env[:optics_agent] }` when executing your graphql query (where `env` is the rack environment).
|
19
|
+
If you aren't using the rack middleware, `context: {optics_agent: :no_rack}` to avoid this warning.
|
20
|
+
If you don't want to instrument this query, pass `context: {optics_agent: :skip}`.
|
21
|
+
"""
|
22
|
+
query_context = :no_rack
|
23
|
+
end
|
24
|
+
|
25
|
+
if query_context == :no_rack
|
26
|
+
query.context[:optics_agent] = QueryContext.new(agent)
|
27
|
+
query_context = query.context[:optics_agent]
|
28
|
+
end
|
29
|
+
|
30
|
+
query_context.with_document(query.query_string)
|
31
|
+
end
|
32
|
+
|
33
|
+
def after_query(query)
|
34
|
+
return unless @agent
|
35
|
+
query_context = query.context[:optics_agent]
|
36
|
+
return if query_context == :skip
|
37
|
+
|
38
|
+
agent.debug { "query_instrumenter: query completed" }
|
39
|
+
query_context.query_finished!
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'optics-agent/reporting/query'
|
2
|
+
|
3
|
+
class QueryContext
|
4
|
+
attr_reader :agent, :query, :no_rack
|
5
|
+
def initialize(agent, rack_env = false)
|
6
|
+
@agent = agent
|
7
|
+
@query = OpticsAgent::Reporting::Query.new
|
8
|
+
@rack_env = rack_env
|
9
|
+
end
|
10
|
+
|
11
|
+
def with_document(query_string)
|
12
|
+
@query.document = query_string
|
13
|
+
self
|
14
|
+
end
|
15
|
+
|
16
|
+
def query_finished!
|
17
|
+
finish! unless @rack_env
|
18
|
+
end
|
19
|
+
|
20
|
+
def request_finished!
|
21
|
+
finish!
|
22
|
+
end
|
23
|
+
|
24
|
+
private def finish!
|
25
|
+
if (@query.document)
|
26
|
+
@agent.debug { "query_context: Adding a query with #{@query.reports.length} field reports" }
|
27
|
+
@query.finish!
|
28
|
+
@agent.add_query(@query, @rack_env)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require 'optics-agent/
|
2
|
-
|
1
|
+
require 'optics-agent/query_context'
|
2
|
+
|
3
3
|
module OpticsAgent
|
4
4
|
class RackMiddleware
|
5
5
|
# Right now we assume there'll only be a single rack middleware in an
|
@@ -17,37 +17,18 @@ module OpticsAgent
|
|
17
17
|
|
18
18
|
def call(env)
|
19
19
|
agent = self.class.agent
|
20
|
-
agent.
|
20
|
+
agent.ensure_reporting_stats!
|
21
21
|
agent.debug { "rack-middleware: request started" }
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
# Attach so resolver middleware can access
|
26
|
-
env[:optics_agent] = RackAgent.new(agent, query)
|
23
|
+
# Attach so field instrumenters can access
|
24
|
+
env[:optics_agent] = QueryContext.new(agent, env)
|
27
25
|
|
28
26
|
result = @app.call(env)
|
29
27
|
|
30
28
|
agent.debug { "rack-middleware: request finished" }
|
31
|
-
|
32
|
-
agent.debug { "rack-middleware: Adding a query with #{query.reports.length} field reports" }
|
33
|
-
query.finish!
|
34
|
-
agent.add_query(query, env)
|
35
|
-
end
|
29
|
+
query = env[:optics_agent].request_finished!
|
36
30
|
|
37
31
|
result
|
38
32
|
end
|
39
33
|
end
|
40
|
-
|
41
|
-
class RackAgent
|
42
|
-
attr_reader :agent, :query
|
43
|
-
def initialize(agent, query)
|
44
|
-
@agent = agent
|
45
|
-
@query = query
|
46
|
-
end
|
47
|
-
|
48
|
-
def with_document(query_string)
|
49
|
-
@query.document = query_string
|
50
|
-
self
|
51
|
-
end
|
52
|
-
end
|
53
34
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module OpticsAgent
|
5
|
+
module Reporting
|
6
|
+
class DetectServerSideError < Faraday::Middleware
|
7
|
+
RETRY_ON = Set.new [500, 502, 503, 504]
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
@app.call(env).on_complete do |r|
|
11
|
+
if RETRY_ON.include? env[:status]
|
12
|
+
raise "#{r[:status]} status code"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -52,7 +52,7 @@ module OpticsAgent::Reporting
|
|
52
52
|
agent.send_message('/api/ss/stats', @report)
|
53
53
|
end
|
54
54
|
|
55
|
-
def add_query(query, rack_env)
|
55
|
+
def add_query(query, rack_env = nil)
|
56
56
|
@report.per_signature[query.signature] ||= StatsPerSignature.new
|
57
57
|
signature_stats = @report.per_signature[query.signature]
|
58
58
|
|
data/spec/spec.iml
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<module type="RUBY_MODULE" version="4">
|
3
|
+
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
4
|
+
<exclude-output />
|
5
|
+
<content url="file://$MODULE_DIR$" />
|
6
|
+
<orderEntry type="jdk" jdkName="rbenv: 2.3.3" jdkType="RUBY_SDK" />
|
7
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
8
|
+
<orderEntry type="library" scope="PROVIDED" name="graphql (v1.4.0, rbenv: 2.3.3) [gem]" level="application" />
|
9
|
+
<orderEntry type="library" scope="PROVIDED" name="io-console (v0.4.5, rbenv: 2.3.3) [gem]" level="application" />
|
10
|
+
</component>
|
11
|
+
</module>
|
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
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 'Tom Coleman '
|
@@ -30,34 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3.
|
33
|
+
version: '3.2'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '3.
|
40
|
+
version: '3.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: faraday
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0.
|
48
|
-
- - ">="
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: 0.9.2
|
47
|
+
version: '0.11'
|
51
48
|
type: :runtime
|
52
49
|
prerelease: false
|
53
50
|
version_requirements: !ruby/object:Gem::Requirement
|
54
51
|
requirements:
|
55
52
|
- - "~>"
|
56
53
|
- !ruby/object:Gem::Version
|
57
|
-
version: '0.
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 0.9.2
|
54
|
+
version: '0.11'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
name: net-http-persistent
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -65,9 +59,6 @@ dependencies:
|
|
65
59
|
- - "~>"
|
66
60
|
- !ruby/object:Gem::Version
|
67
61
|
version: '2.0'
|
68
|
-
- - ">="
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: 2.0.0
|
71
62
|
type: :runtime
|
72
63
|
prerelease: false
|
73
64
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -75,9 +66,6 @@ dependencies:
|
|
75
66
|
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '2.0'
|
78
|
-
- - ">="
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: 2.0.0
|
81
69
|
- !ruby/object:Gem::Dependency
|
82
70
|
name: hitimes
|
83
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -85,9 +73,6 @@ dependencies:
|
|
85
73
|
- - "~>"
|
86
74
|
- !ruby/object:Gem::Version
|
87
75
|
version: '1.2'
|
88
|
-
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: 1.2.4
|
91
76
|
type: :runtime
|
92
77
|
prerelease: false
|
93
78
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -95,37 +80,34 @@ dependencies:
|
|
95
80
|
- - "~>"
|
96
81
|
- !ruby/object:Gem::Version
|
97
82
|
version: '1.2'
|
98
|
-
- - ">="
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: 1.2.4
|
101
83
|
- !ruby/object:Gem::Dependency
|
102
84
|
name: rake
|
103
85
|
requirement: !ruby/object:Gem::Requirement
|
104
86
|
requirements:
|
105
87
|
- - "~>"
|
106
88
|
- !ruby/object:Gem::Version
|
107
|
-
version:
|
89
|
+
version: '12'
|
108
90
|
type: :development
|
109
91
|
prerelease: false
|
110
92
|
version_requirements: !ruby/object:Gem::Requirement
|
111
93
|
requirements:
|
112
94
|
- - "~>"
|
113
95
|
- !ruby/object:Gem::Version
|
114
|
-
version:
|
96
|
+
version: '12'
|
115
97
|
- !ruby/object:Gem::Dependency
|
116
98
|
name: rspec
|
117
99
|
requirement: !ruby/object:Gem::Requirement
|
118
100
|
requirements:
|
119
101
|
- - "~>"
|
120
102
|
- !ruby/object:Gem::Version
|
121
|
-
version: 3.5
|
103
|
+
version: '3.5'
|
122
104
|
type: :development
|
123
105
|
prerelease: false
|
124
106
|
version_requirements: !ruby/object:Gem::Requirement
|
125
107
|
requirements:
|
126
108
|
- - "~>"
|
127
109
|
- !ruby/object:Gem::Version
|
128
|
-
version: 3.5
|
110
|
+
version: '3.5'
|
129
111
|
description: An Agent for Apollo Optics, http://optics.apollodata.com
|
130
112
|
email: tom@meteor.com
|
131
113
|
executables: []
|
@@ -135,16 +117,20 @@ files:
|
|
135
117
|
- LICENSE
|
136
118
|
- README.md
|
137
119
|
- lib/apollo/optics/proto/reports_pb.rb
|
120
|
+
- lib/lib.iml
|
138
121
|
- lib/optics-agent.rb
|
139
122
|
- lib/optics-agent/agent.rb
|
140
123
|
- lib/optics-agent/instrumentation/introspection-query.graphql
|
141
124
|
- lib/optics-agent/instrumentation/query-schema.rb
|
142
125
|
- lib/optics-agent/instrumenters/field.rb
|
143
126
|
- lib/optics-agent/instrumenters/patch-graphql-schema.rb
|
127
|
+
- lib/optics-agent/instrumenters/query.rb
|
144
128
|
- lib/optics-agent/normalization/latency.rb
|
145
129
|
- lib/optics-agent/normalization/query.rb
|
130
|
+
- lib/optics-agent/query_context.rb
|
146
131
|
- lib/optics-agent/rack-middleware.rb
|
147
132
|
- lib/optics-agent/railtie.rb
|
133
|
+
- lib/optics-agent/reporting/detect_server_side_error.rb
|
148
134
|
- lib/optics-agent/reporting/helpers.rb
|
149
135
|
- lib/optics-agent/reporting/query-trace.rb
|
150
136
|
- lib/optics-agent/reporting/query.rb
|
@@ -161,6 +147,7 @@ files:
|
|
161
147
|
- spec/report_spec.rb
|
162
148
|
- spec/schema-introspection_spec.rb
|
163
149
|
- spec/schema_spec.rb
|
150
|
+
- spec/spec.iml
|
164
151
|
- spec/spec_helper.rb
|
165
152
|
- spec/support/create_starwars_schema.rb
|
166
153
|
homepage: http://rubygems.org/gems/optics-agent
|
@@ -183,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
170
|
version: '0'
|
184
171
|
requirements: []
|
185
172
|
rubyforge_project:
|
186
|
-
rubygems_version: 2.
|
173
|
+
rubygems_version: 2.6.8
|
187
174
|
signing_key:
|
188
175
|
specification_version: 4
|
189
176
|
summary: An Agent for Apollo Optics
|
@@ -197,5 +184,6 @@ test_files:
|
|
197
184
|
- spec/report_spec.rb
|
198
185
|
- spec/schema-introspection_spec.rb
|
199
186
|
- spec/schema_spec.rb
|
187
|
+
- spec/spec.iml
|
200
188
|
- spec/spec_helper.rb
|
201
189
|
- spec/support/create_starwars_schema.rb
|