Class: Baykit::BayServer::Agent::Signal::SignalAgent
- Inherits:
-
Object
- Object
- Baykit::BayServer::Agent::Signal::SignalAgent
- Defined in:
- lib/baykit/bayserver/agent/signal/signal_agent.rb
Constant Summary collapse
- COMMAND_RELOAD_CERT =
"reloadcert"- COMMAND_MEM_USAGE =
"memusage"- COMMAND_RESTART_AGENTS =
"restartagents"- COMMAND_SHUTDOWN =
"shutdown"- COMMAND_ABORT =
"abort"
Class Attribute Summary collapse
-
.commands ⇒ Object
readonly
Returns the value of attribute commands.
-
.signal_agent ⇒ Object
readonly
Returns the value of attribute signal_agent.
-
.signal_map ⇒ Object
readonly
Returns the value of attribute signal_map.
Instance Attribute Summary collapse
-
#port ⇒ Object
readonly
Returns the value of attribute port.
-
#server_skt ⇒ Object
readonly
Returns the value of attribute server_skt.
Class Method Summary collapse
- .get_signal_from_command(command) ⇒ Object
- .handle_command(cmd) ⇒ Object
-
.init(bay_port) ⇒ Object
class methods.
- .init_signal_map ⇒ Object
- .term ⇒ Object
Instance Method Summary collapse
- #close ⇒ Object
-
#initialize(port) ⇒ SignalAgent
constructor
A new instance of SignalAgent.
- #on_socket_readable ⇒ Object
Constructor Details
#initialize(port) ⇒ SignalAgent
Returns a new instance of SignalAgent.
44 45 46 47 48 49 50 51 52 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 44 def initialize(port) @port = port @server_skt = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0) @server_skt.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true) adr = Socket.sockaddr_in(@port, "127.0.0.1") @server_skt.bind(adr) @server_skt.listen(0) BayLog.info( BayMessage.get(:MSG_OPEN_CTL_PORT, @port)) end |
Class Attribute Details
.commands ⇒ Object (readonly)
Returns the value of attribute commands.
26 27 28 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 26 def commands @commands end |
.signal_agent ⇒ Object (readonly)
Returns the value of attribute signal_agent.
28 29 30 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 28 def signal_agent @signal_agent end |
.signal_map ⇒ Object (readonly)
Returns the value of attribute signal_map.
27 28 29 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 27 def signal_map @signal_map end |
Instance Attribute Details
#port ⇒ Object (readonly)
Returns the value of attribute port.
41 42 43 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 41 def port @port end |
#server_skt ⇒ Object (readonly)
Returns the value of attribute server_skt.
42 43 44 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 42 def server_skt @server_skt end |
Class Method Details
.get_signal_from_command(command) ⇒ Object
117 118 119 120 121 122 123 124 125 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 117 def SignalAgent.get_signal_from_command(command) init_signal_map() @signal_map.keys().each do |sig| if(@signal_map[sig].casecmp?(command)) return sig; end end return nil end |
.handle_command(cmd) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 98 def SignalAgent.handle_command(cmd) BayLog.debug("handle command: %s", cmd) case (cmd.downcase) when COMMAND_RELOAD_CERT GrandAgentMonitor::reload_cert_all() when COMMAND_MEM_USAGE GrandAgentMonitor::print_usage_all() when COMMAND_RESTART_AGENTS GrandAgentMonitor::restart_all() when COMMAND_SHUTDOWN GrandAgentMonitor::shutdown_all() when COMMAND_ABORT GrandAgentMonitor::abort_all() else BayLog.error("Unknown command: %s", cmd) end end |
.init(bay_port) ⇒ Object
class methods
86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 86 def SignalAgent.init(bay_port) @commands.each do |cmd| SignalProxy.register(get_signal_from_command(cmd)) do handle_command(cmd) end end if bay_port > 0 @signal_agent = SignalAgent.new(bay_port) end end |
.init_signal_map ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 127 def SignalAgent.init_signal_map() if !@signal_map.empty? return; end if SysUtil.run_on_windows() # Available signals on Windows # SIGABRT # SIGFPE # SIGILL # SIGINT # SIGSEGV # SIGTERM @signal_map["SEGV"] = COMMAND_RELOAD_CERT @signal_map["ILL"] = COMMAND_MEM_USAGE @signal_map["INT"] = COMMAND_SHUTDOWN @signal_map["TERM"] = COMMAND_RESTART_AGENTS @signal_map["ABRT"] = COMMAND_ABORT else @signal_map["ALRM"] = COMMAND_RELOAD_CERT @signal_map["TRAP"] = COMMAND_MEM_USAGE @signal_map["HUP"] = COMMAND_RESTART_AGENTS @signal_map["TERM"] = COMMAND_SHUTDOWN @signal_map["ABRT"] = COMMAND_ABORT end end |
.term ⇒ Object
155 156 157 158 159 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 155 def SignalAgent.term() if @signal_agent @signal_agent.close() end end |
Instance Method Details
#close ⇒ Object
77 78 79 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 77 def close @server_skt.close end |
#on_socket_readable ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/baykit/bayserver/agent/signal/signal_agent.rb', line 54 def on_socket_readable() begin skt, = @server_skt.accept skt.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, [5, 0].pack("l_2")) line = skt.readline.strip() BayLog.info(BayMessage.get(:MSG_COMMAND_RECEIVED, line)) SignalAgent.handle_command(line) skt.write("OK\n") skt.flush rescue => e BayLog.error_e(e) ensure if skt skt.close() end end end |