Class: Google::Cloud::Debugger::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/google/cloud/debugger/middleware.rb

Overview

Rack Middleware implementation that supports Stackdriver Debugger Agent in Rack-based Ruby frameworks. It instantiates a new debugger agent if one isn't given already. It helps optimize Debugger Agent Tracer performance by suspend and resume tracer between each request.

Instance Method Summary collapse

Constructor Details

#initialize(app, debugger: nil, **kwargs) ⇒ Google::Cloud::Debugger::Middleware

Create a new Debugger Middleware.

Parameters:

  • app (Rack Application)

    Rack application

  • debugger (Google::Cloud::Debugger::Project)

    A debugger to be used by this middleware. If not given, will construct a new one using the other parameters.

  • *kwargs (Hash)

    Hash of configuration settings. Used for backward API compatibility. See the Configuration Guide for the prefered way to set configuration parameters.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/google/cloud/debugger/middleware.rb', line 43

def initialize app, debugger: nil, **kwargs
  @app = app

  load_config kwargs

  if debugger
    @debugger = debugger
  else
    @debugger =
      Debugger.new(project: configuration.project_id,
                   keyfile: configuration.keyfile,
                   module_name: configuration.module_name,
                   module_version: configuration.module_version)

    @debugger.agent.quota_manager =
      Google::Cloud::Debugger::RequestQuotaManager.new
  end

  # Immediately start the debugger agent
  @debugger.start
end

Instance Method Details

#call(env) ⇒ Rack::Response

Rack middleware entry point. In most Rack based frameworks, a request is served by one thread. It enables/resume the debugger breakpoints tracing and stops/pauses the tracing afterwards to help improve debugger performance.

Parameters:

  • env (Hash)

    Rack environment hash

Returns:

  • (Rack::Response)

    The response from downstream Rack app



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/google/cloud/debugger/middleware.rb', line 75

def call env
  # Enable/resume breakpoints tracing
  @debugger.agent.tracer.start

  # Use Stackdriver Logger for debugger if available
  if env["rack.logger"].is_a? Google::Cloud::Logging::Logger
    @debugger.agent.logger = env["rack.logger"]
  end

  @app.call env
ensure
  # Stop breakpoints tracing beyond this point
  @debugger.agent.tracer.disable_traces_for_thread

  # Reset quotas after each request finishes.
  @debugger.agent.quota_manager.reset if @debugger.agent.quota_manager
end