Class: LogBrew::Sidekiq::Instrumentation

Inherits:
Object
  • Object
show all
Defined in:
lib/logbrew/sidekiq.rb

Overview

App-owned Sidekiq registration and lifecycle state.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client:, transport:, max_retries:, on_capture_error:) ⇒ Instrumentation

Returns a new instance of Instrumentation.



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/logbrew/sidekiq.rb', line 141

def initialize(client:, transport:, max_retries:, on_capture_error:)
  @client = client
  @transport = transport
  @max_retries = max_retries
  @on_capture_error = on_capture_error
  @owner_process_id = Process.pid
  @state_mutex = Mutex.new
  @state = :enabled
  @shutdown_mutex = Mutex.new
  @shutdown_response = nil
  @failure_mutex = Mutex.new
  @reported_failures = {}
  @registration_mutex = Mutex.new
  @registrations = {}
end

Class Method Details

.create(client:, transport: nil, max_retries: 25, on_capture_error: nil) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/logbrew/sidekiq.rb', line 117

def self.create(client:, transport: nil, max_retries: 25, on_capture_error: nil)
  unless client.is_a?(Client)
    raise SdkError.new("validation_error", "client must be a LogBrew::Client")
  end
  unless transport.nil? || transport.respond_to?(:send)
    raise SdkError.new("validation_error", "transport must respond to send")
  end
  unless max_retries.is_a?(Integer) && max_retries.between?(0, MAX_RETRY_COUNT)
    raise SdkError.new("validation_error", "max_retries must be a bounded non-negative integer")
  end
  unless on_capture_error.nil? || on_capture_error.respond_to?(:call)
    raise SdkError.new("validation_error", "on_capture_error must be callable")
  end

  new(
    client: client,
    transport: transport,
    max_retries: max_retries,
    on_capture_error: on_capture_error
  )
end

Instance Method Details

#disableObject



177
178
179
# File 'lib/logbrew/sidekiq.rb', line 177

def disable
  update_state(:disabled)
end

#enableObject



173
174
175
# File 'lib/logbrew/sidekiq.rb', line 173

def enable
  update_state(:enabled)
end

#quietObject



181
182
183
# File 'lib/logbrew/sidekiq.rb', line 181

def quiet
  update_state(:quiet)
end

#register_client(config) ⇒ Object



157
158
159
# File 'lib/logbrew/sidekiq.rb', line 157

def register_client(config)
  register(config, :client_middleware, ClientMiddleware)
end

#register_server(config) ⇒ Object



165
166
167
# File 'lib/logbrew/sidekiq.rb', line 165

def register_server(config)
  register(config, :server_middleware, ServerMiddleware)
end

#shutdownObject



185
186
187
188
189
190
191
192
193
194
195
# File 'lib/logbrew/sidekiq.rb', line 185

def shutdown
  assert_process_ownership!
  @shutdown_mutex.synchronize do
    return @shutdown_response unless @shutdown_response.nil?

    quiet
    response = @transport.nil? ? @client.shutdown : @client.shutdown(@transport)
    @state_mutex.synchronize { @state = :closed }
    @shutdown_response = response
  end
end

#unregister_client(config) ⇒ Object



161
162
163
# File 'lib/logbrew/sidekiq.rb', line 161

def unregister_client(config)
  unregister(config, :client_middleware, ClientMiddleware)
end

#unregister_server(config) ⇒ Object



169
170
171
# File 'lib/logbrew/sidekiq.rb', line 169

def unregister_server(config)
  unregister(config, :server_middleware, ServerMiddleware)
end