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.



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

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



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

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



175
176
177
# File 'lib/logbrew/sidekiq.rb', line 175

def disable
  update_state(:disabled)
end

#enableObject



171
172
173
# File 'lib/logbrew/sidekiq.rb', line 171

def enable
  update_state(:enabled)
end

#quietObject



179
180
181
# File 'lib/logbrew/sidekiq.rb', line 179

def quiet
  update_state(:quiet)
end

#register_client(config) ⇒ Object



155
156
157
# File 'lib/logbrew/sidekiq.rb', line 155

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

#register_server(config) ⇒ Object



163
164
165
# File 'lib/logbrew/sidekiq.rb', line 163

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

#shutdownObject



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

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



159
160
161
# File 'lib/logbrew/sidekiq.rb', line 159

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

#unregister_server(config) ⇒ Object



167
168
169
# File 'lib/logbrew/sidekiq.rb', line 167

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