google-cloud-debugger 0.24.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +8 -0
  3. data/LICENSE +201 -0
  4. data/README.md +56 -0
  5. data/ext/google/cloud/debugger/debugger_c/debugger.c +31 -0
  6. data/ext/google/cloud/debugger/debugger_c/debugger.h +26 -0
  7. data/ext/google/cloud/debugger/debugger_c/evaluator.c +78 -0
  8. data/ext/google/cloud/debugger/debugger_c/evaluator.h +25 -0
  9. data/ext/google/cloud/debugger/debugger_c/extconf.rb +22 -0
  10. data/ext/google/cloud/debugger/debugger_c/tracer.c +478 -0
  11. data/ext/google/cloud/debugger/debugger_c/tracer.h +31 -0
  12. data/lib/google-cloud-debugger.rb +121 -0
  13. data/lib/google/cloud/debugger.rb +379 -0
  14. data/lib/google/cloud/debugger/agent.rb +204 -0
  15. data/lib/google/cloud/debugger/async_actor.rb +290 -0
  16. data/lib/google/cloud/debugger/breakpoint.rb +382 -0
  17. data/lib/google/cloud/debugger/breakpoint/evaluator.rb +1113 -0
  18. data/lib/google/cloud/debugger/breakpoint/source_location.rb +75 -0
  19. data/lib/google/cloud/debugger/breakpoint/stack_frame.rb +109 -0
  20. data/lib/google/cloud/debugger/breakpoint/variable.rb +304 -0
  21. data/lib/google/cloud/debugger/breakpoint_manager.rb +217 -0
  22. data/lib/google/cloud/debugger/credentials.rb +41 -0
  23. data/lib/google/cloud/debugger/debuggee.rb +204 -0
  24. data/lib/google/cloud/debugger/debuggee/app_uniquifier_generator.rb +78 -0
  25. data/lib/google/cloud/debugger/middleware.rb +77 -0
  26. data/lib/google/cloud/debugger/project.rb +135 -0
  27. data/lib/google/cloud/debugger/rails.rb +141 -0
  28. data/lib/google/cloud/debugger/service.rb +130 -0
  29. data/lib/google/cloud/debugger/tracer.rb +165 -0
  30. data/lib/google/cloud/debugger/transmitter.rb +129 -0
  31. data/lib/google/cloud/debugger/v2.rb +15 -0
  32. data/lib/google/cloud/debugger/v2/controller2_client.rb +299 -0
  33. data/lib/google/cloud/debugger/v2/controller2_client_config.json +43 -0
  34. data/lib/google/cloud/debugger/v2/debugger2_client.rb +378 -0
  35. data/lib/google/cloud/debugger/v2/debugger2_client_config.json +53 -0
  36. data/lib/google/cloud/debugger/v2/doc/google/devtools/clouddebugger/v2/data.rb +441 -0
  37. data/lib/google/cloud/debugger/v2/doc/google/devtools/clouddebugger/v2/debugger.rb +151 -0
  38. data/lib/google/cloud/debugger/v2/doc/google/devtools/source/v1/source_context.rb +161 -0
  39. data/lib/google/cloud/debugger/v2/doc/google/protobuf/timestamp.rb +81 -0
  40. data/lib/google/cloud/debugger/version.rb +22 -0
  41. data/lib/google/devtools/clouddebugger/v2/controller_pb.rb +47 -0
  42. data/lib/google/devtools/clouddebugger/v2/controller_services_pb.rb +97 -0
  43. data/lib/google/devtools/clouddebugger/v2/data_pb.rb +105 -0
  44. data/lib/google/devtools/clouddebugger/v2/debugger_pb.rb +74 -0
  45. data/lib/google/devtools/clouddebugger/v2/debugger_services_pb.rb +64 -0
  46. data/lib/google/devtools/source/v1/source_context_pb.rb +89 -0
  47. metadata +300 -0
@@ -0,0 +1,31 @@
1
+ /*
2
+ Copyright 2017 Google Inc. All rights reserved.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ #ifndef GOOGLE_CLOUD_RUBY_DEBUGGER_TRACER_H_
18
+ #define GOOGLE_CLOUD_RUBY_DEBUGGER_TRACER_H_
19
+
20
+ #include "ruby/debug.h"
21
+
22
+ #define FILE_TRACEPOINT_EVENT (RUBY_EVENT_CLASS | RUBY_EVENT_CALL | RUBY_EVENT_C_CALL | RUBY_EVENT_B_CALL)
23
+ #define FIBER_TRACEPOINT_EVENT RUBY_EVENT_FIBER_SWITCH
24
+
25
+ /* To prevent unused parameter warnings */
26
+ #define UNUSED(x) (void)(x)
27
+
28
+ void
29
+ Init_tracer(VALUE mDebugger);
30
+
31
+ #endif // GOOGLE_CLOUD_RUBY_DEBUGGER_TRACER_H_
@@ -0,0 +1,121 @@
1
+ # Copyright 2017 Google Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ ##
16
+ # This file is here to be autorequired by bundler, so that the .debugger and
17
+ # #debugger methods can be available, but the library and all dependencies won't
18
+ # be loaded until required and used.
19
+
20
+
21
+ gem "google-cloud-core"
22
+ require "google/cloud"
23
+
24
+ module Google
25
+ module Cloud
26
+ ##
27
+ # Creates a new debugger object for instrumenting Stackdriver Debugger for
28
+ # an application. Each call creates a new debugger agent with independent
29
+ # connection service.
30
+ #
31
+ # For more information on connecting to Google Cloud see the [Authentication
32
+ # Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/guides/authentication).
33
+ #
34
+ # @param [String] module_name Name for the debuggee application. Optional.
35
+ # @param [String] module_version Version identifier for the debuggee
36
+ # application. Optional.
37
+ # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling the
38
+ # set of resources and operations that the connection can access. See
39
+ # [Using OAuth 2.0 to Access Google
40
+ # APIs](https://developers.google.com/identity/protocols/OAuth2).
41
+ #
42
+ # The default scope is:
43
+ #
44
+ # * `https://www.googleapis.com/auth/cloud_debugger`
45
+ # @param [Integer] timeout Default timeout to use in requests. Optional.
46
+ # @param [Hash] client_config A hash of values to override the default
47
+ # behavior of the API client. Optional.
48
+ #
49
+ # @return [Google::Cloud::Debugger::Project]
50
+ #
51
+ # @example
52
+ # require "google/cloud"
53
+ #
54
+ # gcloud = Google::Cloud.new
55
+ # debugger = gcloud.debugger
56
+ #
57
+ # debugger.start
58
+ #
59
+ # @example The default scope can be overridden with the `scope` option:
60
+ # require "google/cloud"
61
+ #
62
+ # gcloud = Google::Cloud.new
63
+ # platform_scope = "https://www.googleapis.com/auth/cloud-platform"
64
+ # debugger = gcloud.debugger scope: platform_scope
65
+ #
66
+ def debugger module_name: nil, module_version: nil, scope: nil,
67
+ timeout: nil, client_config: nil
68
+ Google::Cloud.debugger @project, @keyfile, module_name: module_name,
69
+ module_version: module_version,
70
+ scope: scope,
71
+ timeout: (timeout || @timeout),
72
+ client_config: client_config
73
+ end
74
+
75
+ ##
76
+ # Creates a new debugger object for instrumenting Stackdriver Debugger for
77
+ # an application. Each call creates a new debugger agent with independent
78
+ # connection service.
79
+ #
80
+ # For more information on connecting to Google Cloud see the [Authentication
81
+ # Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/guides/authentication).
82
+ #
83
+ # @param [String] project Project identifier for the Stackdriver Debugger
84
+ # service you are connecting to.
85
+ # @param [String, Hash] keyfile Keyfile downloaded from Google Cloud. If
86
+ # file path the file must be readable.
87
+ # @param [String] module_name Name for the debuggee application. Optional.
88
+ # @param [String] module_version Version identifier for the debuggee
89
+ # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling the
90
+ # set of resources and operations that the connection can access. See
91
+ # [Using OAuth 2.0 to Access Google
92
+ # APIs](https://developers.google.com/identity/protocols/OAuth2).
93
+ #
94
+ # The default scope is:
95
+ #
96
+ # * `https://www.googleapis.com/auth/cloud_debugger`
97
+ # @param [Integer] timeout Default timeout to use in requests. Optional.
98
+ # @param [Hash] client_config A hash of values to override the default
99
+ # behavior of the API client. Optional.
100
+ #
101
+ # @return [Google::Cloud::Debugger::Project]
102
+ #
103
+ # @example
104
+ # require "google/cloud"
105
+ #
106
+ # debugger = Google::Cloud.debugger
107
+ #
108
+ # debugger.start
109
+ #
110
+ def self.debugger project = nil, keyfile = nil, module_name: nil,
111
+ module_version: nil, scope: nil, timeout: nil,
112
+ client_config: nil
113
+ require "google/cloud/debugger"
114
+ Google::Cloud::Debugger.new project: project, keyfile: keyfile,
115
+ module_name: module_name,
116
+ module_version: module_version,
117
+ scope: scope, timeout: timeout,
118
+ client_config: client_config
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,379 @@
1
+ # Copyright 2017 Google Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+
16
+ require "google-cloud-debugger"
17
+ require "google/cloud/debugger/project"
18
+
19
+ module Google
20
+ module Cloud
21
+ ##
22
+ # # Stackdriver Debugger
23
+ #
24
+ # Stackdriver Debugger is a feature of the Google Cloud Platform that lets
25
+ # you inspect the state of an application at any code location without using
26
+ # logging statements and without stopping or slowing down your applications.
27
+ # Your users are not impacted during debugging. Using the production
28
+ # debugger you can capture the local variables and call stack and link it
29
+ # back to a specific line location in your source code. You can use this to
30
+ # analyze the production state of your application and understand the
31
+ # behavior of your code in production.
32
+ #
33
+ # For general information about Stackdriver Debugger, read [Stackdriver
34
+ # Debugger Documentation](https://cloud.google.com/debugger/docs/).
35
+ #
36
+ # The Stackdriver Debugger Ruby library, `google-cloud-debugger`, provides:
37
+ #
38
+ # * Easy-to-use debugger instrumentation that reports state data, such as
39
+ # value of program variables and the call stack, to Stackdriver Debugger
40
+ # when the code at a breakpoint location is executed in your Ruby
41
+ # application. See the [instrumenting your app](#instrumenting-your-app)
42
+ # section for how to debug your application, in both development and
43
+ # production.
44
+ # * An idiomatic Ruby API for registerying debuggee application, and
45
+ # querying or manipulating breakpoints in registered Ruby debuggee
46
+ # application. See [Debugger API](#stackdriver-debugger-api) section for
47
+ # an introduction to Stackdriver Debugger API.
48
+ #
49
+ # ## Instrumenting Your App
50
+ #
51
+ # This instrumentation library provides the following features to help you
52
+ # debug your applications in production:
53
+ #
54
+ # * Automatic application registration. It facilitates multiple running
55
+ # instances of same version of application when hosted in production.
56
+ # * A background debugger agent that runs side-by-side with your
57
+ # application that automatically collects state data when code is
58
+ # executed at breakpoint locations.
59
+ # * A Rack middleware and Railtie that automatically manages the debugger
60
+ # agent for Ruby on Rails and other Rack-based Ruby applications.
61
+ #
62
+ # When this library is configured in your running application, and the
63
+ # source code and breakpoints are setup through the Google Cloud Console,
64
+ # You'll be able to
65
+ # [interact](https://cloud.google.com/debugger/docs/debugging) with your
66
+ # application in real time through the [Stackdriver Debugger
67
+ # UI](https://console.cloud.google.com/debug?_ga=1.84295834.280814654.1476313407).
68
+ # This library also integrates with Google App Engine Flexible to make
69
+ # debuggee application configuration more seemless.
70
+ #
71
+ # Note that when no breakpoints are created, the debugger agent consumes
72
+ # very little resource and has no interference with the running application.
73
+ # Once breakpoints are created and depends on where the breakpoints are
74
+ # located, the debugger agent may add a little latency onto each request.
75
+ # The application performance will be back to normal after all breakpoints
76
+ # are finished being evaluated. Be aware the more breakpoints are created,
77
+ # or the harder to reach the breakpoints, the more resource the debugger
78
+ # agent would need to consume.
79
+ #
80
+ # ### Using instrumentation with Ruby on Rails
81
+ #
82
+ # To install application instrumentation in your Ruby on Rails app, add this
83
+ # gem, `google-cloud-debugger`, to your Gemfile and update your bundle. Then
84
+ # add the following line to your `config/application.rb` file:
85
+ #
86
+ # ```ruby
87
+ # require "google/cloud/debugger/rails"
88
+ # ```
89
+ #
90
+ # This will load a Railtie that automatically integrates with the Rails
91
+ # framework by injecting a Rack middleware. The Railtie also takes in the
92
+ # following Rails configuration as parameter of the debugger agent
93
+ # initialization:
94
+ #
95
+ # ```ruby
96
+ # # Explicitly enable or disable Stackdriver Debugger Agent
97
+ # config.google_cloud.use_debugger = true
98
+ # # Shared Google Cloud Platform project identifier
99
+ # config.google_cloud.project_id = "gcloud-project"
100
+ # # Google Cloud Platform project identifier for Stackdriver Debugger only
101
+ # config.google_cloud.debugger.project_id = "debugger-project"
102
+ # # Shared Google Cloud authentication json file
103
+ # config.google_cloud.keyfile = "/path/to/keyfile.json"
104
+ # # Google Cloud authentication json file for Stackdriver Debugger only
105
+ # config.google_cloud.debugger.keyfile = "/path/to/debugger/keyfile.json"
106
+ # # Stackdriver Debugger Agent module name identifier
107
+ # config.google_cloud.debugger.module_name = "my-ruby-app"
108
+ # # Stackdriver Debugger Agent module version identifier
109
+ # config.google_cloud.debugger.module_version = "v1"
110
+ # ```
111
+ #
112
+ # See the {Google::Cloud::Debugger::Railtie} class for more information.
113
+ #
114
+ # ### Using instrumentation with Sinatra
115
+ #
116
+ # To install application instrumentation in your Sinatra app, add this gem,
117
+ # `google-cloud-debugger`, to your Gemfile and update your bundle. Then add
118
+ # the following lines to your main application Ruby file:
119
+ #
120
+ # ```ruby
121
+ # require "google/cloud/debugger"
122
+ # use Google::Cloud::Debugger::Middleware
123
+ # ```
124
+ #
125
+ # This will install the debugger middleware in your application.
126
+ #
127
+ # Configuration parameters may also be passed in as arguments to Middleware.
128
+ # ```ruby
129
+ # require "google/cloud/debugger"
130
+ # use Google::Cloud::Debugger::Middleware project: "debugger-project-id",
131
+ # keyfile: "/path/to/keyfile.json",
132
+ # module_name: "my-ruby-app",
133
+ # module_version: "v1"
134
+ # ```
135
+ #
136
+ # ### Using instrumentation with other Rack-based frameworks
137
+ #
138
+ # To install application instrumentation in an app using another Rack-based
139
+ # web framework, add this gem, `google-cloud-debugger`, to your Gemfile and
140
+ # update your bundle. Then add install the debugger middleware in your
141
+ # middleware stack. In most cases, this means adding these lines to your
142
+ # `config.ru` Rack configuration file:
143
+ #
144
+ # ```ruby
145
+ # require "google/cloud/debugger"
146
+ # use Google::Cloud::Debugger::Middleware
147
+ # ```
148
+ #
149
+ # Some web frameworks have an alternate mechanism for modifying the
150
+ # middleware stack. Consult your web framework's documentation for more
151
+ # information.
152
+ #
153
+ # ### The Stackdriver diagnostics suite
154
+ #
155
+ # The debugger library is part of the Stackdriver diagnostics suite, which
156
+ # also includes error reporting, log analysis, and tracing analysis. If you
157
+ # include the `stackdriver` gem in your Gemfile, this debugger library will
158
+ # be included automatically. In addition, if you include the `stackdriver`
159
+ # gem in an application using Ruby On Rails, the Railties will be installed
160
+ # automatically. See the documentation for the "stackdriver" gem
161
+ # for more details.
162
+ #
163
+ # ## Stackdriver Debugger API
164
+ #
165
+ # This library also includes an easy to use Ruby client for the
166
+ # Stackdriver Debugger API. This API provides calls to register debuggee
167
+ # application, as well as creating or modifying breakpoints.
168
+ #
169
+ # For further information on the Debugger API, see
170
+ # {Google::Cloud::Debugger::Project}
171
+ #
172
+ # ### Registering debuggee application
173
+ #
174
+ # ```ruby
175
+ # require "google/cloud/debugger/v2"
176
+ #
177
+ # Controller2Client = Google::Cloud::Debugger::V2::Controller2Client
178
+ # Debuggee = Google::Devtools::Clouddebugger::V2::Debuggee
179
+ #
180
+ # controller2_client = Controller2Client.new
181
+ # debuggee = Debuggee.new
182
+ # response = controller2_client.register_debuggee(debuggee)
183
+ # debuggee_id = response.debuggee.id
184
+ # ```
185
+ # See [Stackdriver Debugger Debuggee
186
+ # doc](https://cloud.google.com/debugger/api/reference/rpc/google.devtools.clouddebugger.v2#google.devtools.clouddebugger.v2.Debuggee)
187
+ # on fields necessary for registerying a debuggee.
188
+ #
189
+ # Upon successful registration, the response debuggee object will contain
190
+ # a debuggee_id that's later needed to interact with the other Stackdriver
191
+ # Debugger API.
192
+ #
193
+ # See {Google::Cloud::Debugger::V2::Controller2Client} for details.
194
+ #
195
+ # ### List Active Breakpoints
196
+ #
197
+ # ```ruby
198
+ # require "google/cloud/debugger/v2"
199
+ #
200
+ # Controller2Client = Google::Cloud::Debugger::V2::Controller2Client
201
+ # controller2_client = Controller2Client.new
202
+ #
203
+ # debuggee_id = ''
204
+ # response = controller2_client.list_active_breakpoints(debuggee_id)
205
+ # breakpoints = response.breakpoints
206
+ # ```
207
+ #
208
+ # See {Google::Cloud::Debugger::V2::Controller2Client} for details.
209
+ #
210
+ # ### Update Active Breakpoint
211
+ #
212
+ # Users can send custom snapshots for active breakpoints using this API.
213
+ #
214
+ # ```ruby
215
+ # require "google/cloud/debugger/v2"
216
+ #
217
+ # Breakpoint = Google::Devtools::Clouddebugger::V2::Breakpoint
218
+ # Controller2Client = Google::Cloud::Debugger::V2::Controller2Client
219
+ #
220
+ # controller2_client = Controller2Client.new
221
+ # debuggee_id = ''
222
+ # breakpoint = Breakpoint.new
223
+ # response =
224
+ # controller2_client.update_active_breakpoint(debuggee_id, breakpoint)
225
+ # ```
226
+ #
227
+ # See [Stackdriver Debugger Breakpoint
228
+ # doc](https://cloud.google.com/debugger/api/reference/rpc/google.devtools.clouddebugger.v2#google.devtools.clouddebugger.v2.Breakpoint)
229
+ # for all available fields for breakpoint.
230
+ #
231
+ # See {Google::Cloud::Debugger::V2::Controller2Client} for details.
232
+ #
233
+ # ### Set Breakpoint
234
+ #
235
+ # ```ruby
236
+ # require "google/cloud/debugger/v2"
237
+ #
238
+ # Breakpoint = Google::Devtools::Clouddebugger::V2::Breakpoint
239
+ # Debugger2Client = Google::Cloud::Debugger::V2::Debugger2Client
240
+ #
241
+ # debugger2_client = Debugger2Client.new
242
+ # debuggee_id = ''
243
+ # breakpoint = Breakpoint.new
244
+ # client_version = ''
245
+ # response = debugger2_client.set_breakpoint(
246
+ # debuggee_id, breakpoint, client_version)
247
+ # ```
248
+ #
249
+ # See [Stackdriver Debugger Breakpoint
250
+ # doc](https://cloud.google.com/debugger/api/reference/rpc/google.devtools.clouddebugger.v2#google.devtools.clouddebugger.v2.Breakpoint)
251
+ # for fields needed to specify breakpoint location.
252
+ #
253
+ # See {Google::Cloud::Debugger::V2::Debugger2Client} for details.
254
+ #
255
+ # ### Get Breakpoint
256
+ #
257
+ # ```ruby
258
+ # require "google/cloud/debugger/v2"
259
+ #
260
+ # Debugger2Client = Google::Cloud::Debugger::V2::Debugger2Client
261
+ #
262
+ # debugger2_client = Debugger2Client.new
263
+ # debuggee_id = ''
264
+ # breakpoint_id = ''
265
+ # client_version = ''
266
+ # response = debugger2_client.get_breakpoint(
267
+ # debuggee_id, breakpoint_id, client_version)
268
+ # ```
269
+ #
270
+ # See {Google::Cloud::Debugger::V2::Debugger2Client} for details.
271
+ #
272
+ # ### Delete Breakpoint
273
+ #
274
+ # ```ruby
275
+ # require "google/cloud/debugger/v2"
276
+ #
277
+ # Debugger2Client = Google::Cloud::Debugger::V2::Debugger2Client
278
+ #
279
+ # debugger2_client = Debugger2Client.new
280
+ # debuggee_id = ''
281
+ # breakpoint_id = ''
282
+ # client_version = ''
283
+ # debugger2_client.delete_breakpoint(
284
+ # debuggee_id, breakpoint_id, client_version)
285
+ # ```
286
+ #
287
+ # See {Google::Cloud::Debugger::V2::Debugger2Client} for details.
288
+ #
289
+ # ### List Breakpoints
290
+ #
291
+ # ```ruby
292
+ # require "google/cloud/debugger/v2"
293
+ #
294
+ # Debugger2Client = Google::Cloud::Debugger::V2::Debugger2Client
295
+ #
296
+ # Debugger2Client = Google::Cloud::Debugger::V2::Debugger2Client
297
+ #
298
+ # debugger2_client = Debugger2Client.new
299
+ # debuggee_id = ''
300
+ # client_version = ''
301
+ # response = debugger2_client.list_breakpoints(debuggee_id, client_version)
302
+ # ```
303
+ #
304
+ # See {Google::Cloud::Debugger::V2::Debugger2Client} for details.
305
+ #
306
+ # ### List Debuggees
307
+ #
308
+ # ```ruby
309
+ # require "google/cloud/debugger/v2"
310
+ #
311
+ # Debugger2Client = Google::Cloud::Debugger::V2::Debugger2Client
312
+ #
313
+ # debugger2_client = Debugger2Client.new
314
+ # project = ''
315
+ # client_version = ''
316
+ # response = debugger2_client.list_debuggees(project, client_version)
317
+ # ```
318
+ #
319
+ # See {Google::Cloud::Debugger::V2::Debugger2Client} for details.
320
+ #
321
+ module Debugger
322
+ ##
323
+ # Creates a new debugger object for instrumenting Stackdriver Debugger for
324
+ # an application. Each call creates a new debugger agent with independent
325
+ # connection service.
326
+ #
327
+ # For more information on connecting to Google Cloud see the
328
+ # [Authentication
329
+ # Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/guides/authentication).
330
+ #
331
+ # @param [String] project Project identifier for the Stackdriver Debugger
332
+ # service.
333
+ # @param [String, Hash] keyfile Keyfile downloaded from Google Cloud:
334
+ # either the JSON data or the path to a readable file.
335
+ # @param [String] module_name Name for the debuggee application. Optional.
336
+ # @param [String] module_version Version identifier for the debuggee
337
+ # application. Optional.
338
+ # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling
339
+ # the set of resources and operations that the connection can access.
340
+ # See [Using OAuth 2.0 to Access Google
341
+ # APIs](https://developers.google.com/identity/protocols/OAuth2).
342
+ # The default scope is `https://www.googleapis.com/auth/cloud-platform`
343
+ # @param [Integer] timeout Default timeout to use in requests. Optional.
344
+ #
345
+ # @return [Google::Cloud::Debugger::Project]
346
+ #
347
+ # @example
348
+ # require "google/cloud/debugger"
349
+ #
350
+ # debugger = Google::Cloud::Debugger.new
351
+ # debugger.start
352
+ #
353
+ def self.new project: nil, keyfile: nil, module_name: nil,
354
+ module_version: nil, scope: nil, timeout: nil,
355
+ client_config: nil
356
+ project ||= Debugger::Project.default_project
357
+ project = project.to_s # Always cast to a string
358
+ module_name ||= Debugger::Project.default_module_name
359
+ module_name = module_name.to_s
360
+ module_version ||= Debugger::Project.default_module_version
361
+ module_version = module_version.to_s
362
+
363
+ fail ArgumentError, "project is missing" if project.empty?
364
+ fail ArgumentError, "module_name is missing" if module_name.empty?
365
+ fail ArgumentError, "module_version is missing" if module_version.nil?
366
+
367
+ credentials = Credentials.credentials_with_scope keyfile, scope
368
+
369
+ Google::Cloud::Debugger::Project.new(
370
+ Google::Cloud::Debugger::Service.new(
371
+ project, credentials, timeout: timeout,
372
+ client_config: client_config),
373
+ module_name: module_name,
374
+ module_version: module_version
375
+ )
376
+ end
377
+ end
378
+ end
379
+ end