Class: Tarantool::Rails::LogSubscriber

Inherits:
ActiveSupport::LogSubscriber
  • Object
show all
Defined in:
tarantool-rails/lib/tarantool/rails/log_subscriber.rb

Overview

ActiveRecord-style lines for the client's events, and the time spent in requests per thread so the controller log can show a Tarantool share next to Views.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.reset_runtime ⇒ Object



25
26
27
# File 'tarantool-rails/lib/tarantool/rails/log_subscriber.rb', line 25

def reset_runtime
  runtime.tap { self.runtime = 0.0 }
end

.runtime ⇒ Object



17
18
19
# File 'tarantool-rails/lib/tarantool/rails/log_subscriber.rb', line 17

def runtime
  ActiveSupport::IsolatedExecutionState[RUNTIME] ||= 0.0
end

.runtime=(value) ⇒ Object



21
22
23
# File 'tarantool-rails/lib/tarantool/rails/log_subscriber.rb', line 21

def runtime=(value)
  ActiveSupport::IsolatedExecutionState[RUNTIME] = value
end

Instance Method Details

#disconnect(event) ⇒ Object



40
41
42
# File 'tarantool-rails/lib/tarantool/rails/log_subscriber.rb', line 40

def disconnect(event)
  warn "Tarantool disconnected from #{event.payload[:address]}: #{event.payload[:reason]}"
end

#fork(event) ⇒ Object



52
53
54
# File 'tarantool-rails/lib/tarantool/rails/log_subscriber.rb', line 52

def fork(event)
  info "Tarantool reopened #{event.payload[:address]} after fork"
end

#reconnect(event) ⇒ Object



44
45
46
# File 'tarantool-rails/lib/tarantool/rails/log_subscriber.rb', line 44

def reconnect(event)
  info "Tarantool reconnected to #{event.payload[:address]} after #{attempts(event.payload[:attempts])}"
end

#reconnect_failed(event) ⇒ Object



48
49
50
# File 'tarantool-rails/lib/tarantool/rails/log_subscriber.rb', line 48

def reconnect_failed(event)
  error "Tarantool gave up reconnecting to #{event.payload[:address]}: #{event.payload[:exception].join(': ')}"
end

#request(event) ⇒ Object



30
31
32
33
34
35
36
37
38
# File 'tarantool-rails/lib/tarantool/rails/log_subscriber.rb', line 30

def request(event)
  self.class.runtime += event.duration
  return unless logger.debug?

  payload = event.payload
  name = color(request_name(payload), COLORS.fetch(payload[:request], WHITE), bold: true)

  debug [name, format('(%.2fms)', event.duration), *request_details(payload)].join(' ')
end

#role_change(event) ⇒ Object



56
57
58
# File 'tarantool-rails/lib/tarantool/rails/log_subscriber.rb', line 56

def role_change(event)
  info "Tarantool #{event.payload[:address]} is now #{event.payload[:read_only] ? 'read-only' : 'writable'}"
end

#shutdown(event) ⇒ Object



60
61
62
# File 'tarantool-rails/lib/tarantool/rails/log_subscriber.rb', line 60

def shutdown(event)
  info "Tarantool #{event.payload[:address]} is shutting down, #{event.payload[:pending]} requests in flight"
end