Class: Async::Container::Notify::Pipe
- Inherits:
-
Client
- Object
- Client
- Async::Container::Notify::Pipe
show all
- Defined in:
- lib/async/container/notify/pipe.rb
Constant Summary
collapse
- NOTIFY_PIPE =
'NOTIFY_PIPE'
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Client
#error!, #restarting!, #status!, #stopping!
Constructor Details
#initialize(io) ⇒ Pipe
Returns a new instance of Pipe.
43
44
45
|
# File 'lib/async/container/notify/pipe.rb', line 43
def initialize(io)
@io = io
end
|
Class Method Details
.open!(environment = ENV) ⇒ Object
33
34
35
36
37
38
39
40
41
|
# File 'lib/async/container/notify/pipe.rb', line 33
def self.open!(environment = ENV)
if descriptor = environment.delete(NOTIFY_PIPE)
self.new(::IO.for_fd(descriptor.to_i))
end
rescue Errno::EBADF => error
Async.logger.error(self) {error}
return nil
end
|
Instance Method Details
#before_spawn(arguments, options) ⇒ Object
Inserts or duplicates the environment given an argument array.
Sets or clears it in a way that is suitable for Process.spawn.
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/async/container/notify/pipe.rb', line 49
def before_spawn(arguments, options)
environment = environment_for(arguments)
if notify_pipe = options.delete(:notify_pipe)
options[notify_pipe] = @io
environment[NOTIFY_PIPE] = notify_pipe.to_s
elsif !options.key?(:out)
options[:out] = @io
environment[NOTIFY_PIPE] = "1"
elsif !options.key?(3)
options[3] = @io
environment[NOTIFY_PIPE] = "3"
else
raise ArgumentError, "Please specify valid file descriptor for notify_pipe!"
end
end
|
#ready!(**message) ⇒ Object
80
81
82
|
# File 'lib/async/container/notify/pipe.rb', line 80
def ready!(**message)
send(ready: true, **message)
end
|
#reloading!(**message) ⇒ Object
84
85
86
87
88
89
90
|
# File 'lib/async/container/notify/pipe.rb', line 84
def reloading!(**message)
message[:ready] = false
message[:reloading] = true
message[:status] ||= "Reloading..."
send(**message)
end
|
#send(**message) ⇒ Object
73
74
75
76
77
78
|
# File 'lib/async/container/notify/pipe.rb', line 73
def send(**message)
data = ::JSON.dump(message)
@io.puts(data)
@io.flush
end
|