Class: Appsignal::Pipe

Inherits:
Object
  • Object
show all
Defined in:
lib/appsignal/pipe.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePipe

Returns a new instance of Pipe.



5
6
7
8
9
10
11
12
13
14
# File 'lib/appsignal/pipe.rb', line 5

def initialize
  Appsignal.logger.debug "Initializing pipe in #{$$}"
  @reader, @writer = IO.pipe
  @listener = Thread.new do
    loop do
      Appsignal.agent.enqueue(Marshal::load(@reader))
    end
  end
  @listening = true
end

Instance Attribute Details

#listenerObject (readonly)

Returns the value of attribute listener.



3
4
5
# File 'lib/appsignal/pipe.rb', line 3

def listener
  @listener
end

#readerObject (readonly)

Returns the value of attribute reader.



3
4
5
# File 'lib/appsignal/pipe.rb', line 3

def reader
  @reader
end

#writerObject (readonly)

Returns the value of attribute writer.



3
4
5
# File 'lib/appsignal/pipe.rb', line 3

def writer
  @writer
end

Class Method Details

.currentObject



38
39
40
# File 'lib/appsignal/pipe.rb', line 38

def current
  Thread.current[:appsignal_pipe]
end

.initObject



34
35
36
# File 'lib/appsignal/pipe.rb', line 34

def init
  Thread.current[:appsignal_pipe] = Appsignal::Pipe.new
end

Instance Method Details

#listening?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/appsignal/pipe.rb', line 29

def listening?
  !! @listening
end

#stop_listening!Object



23
24
25
26
27
# File 'lib/appsignal/pipe.rb', line 23

def stop_listening!
  Thread.kill(@listener)
  @reader.close unless @reader.closed?
  @listening = false
end

#write(transaction) ⇒ Object



16
17
18
19
20
21
# File 'lib/appsignal/pipe.rb', line 16

def write(transaction)
  Marshal::dump(transaction, @writer)
rescue IOError
  Appsignal.logger.debug "Broken pipe in #{$$}"
  Appsignal.agent.shutdown
end