Class: Necropsy::Analyzers::Dynamic::RedisTransport

Inherits:
Object
  • Object
show all
Includes:
RedisNonblockingIO
Defined in:
lib/necropsy/analyzers/dynamic/redis_transport.rb

Constant Summary collapse

CRLF =
"\r\n"

Instance Method Summary collapse

Constructor Details

#initialize(uri:, limits:, deadline:, redactor:) ⇒ RedisTransport

Returns a new instance of RedisTransport.



19
20
21
22
23
24
25
26
# File 'lib/necropsy/analyzers/dynamic/redis_transport.rb', line 19

def initialize(uri:, limits:, deadline:, redactor:)
  @uri = uri
  @limits = limits
  @deadline = deadline
  @redactor = redactor
  @response_bytes = 0
  @read_buffer = +''
end

Instance Method Details

#closeObject



41
42
43
44
45
46
47
48
49
# File 'lib/necropsy/analyzers/dynamic/redis_transport.rb', line 41

def close
  socket&.close
  tcp_socket&.close unless socket.equal?(tcp_socket)
rescue IOError, SystemCallError
  nil
ensure
  @socket = nil
  @tcp_socket = nil
end

#command(*parts) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/necropsy/analyzers/dynamic/redis_transport.rb', line 51

def command(*parts)
  deadline.check!
  write_all(redis_command(parts))
  response = read_response
  deadline.check!
  response
rescue RedisCommandError
  raise
rescue IOError, SystemCallError, OpenSSL::SSL::SSLError => e
  domain_error("Redis connection failed: #{e.message}")
end

#connectObject



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/necropsy/analyzers/dynamic/redis_transport.rb', line 28

def connect
  @tcp_socket = connect_tcp
  @socket = uri.scheme == 'rediss' ? connect_tls : tcp_socket
  deadline.check!
  self
rescue Error
  close
  raise
rescue SystemCallError, SocketError, IO::TimeoutError, OpenSSL::SSL::SSLError => e
  close
  domain_error("Could not connect securely to Redis at #{target}: #{e.message}")
end