bayserver-core 2.3.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/baykit/bayserver/agent/accept_handler.rb +0 -26
- data/lib/baykit/bayserver/agent/channel_listener.rb +6 -6
- data/lib/baykit/bayserver/agent/command_receiver.rb +97 -38
- data/lib/baykit/bayserver/agent/grand_agent.rb +444 -134
- data/lib/baykit/bayserver/agent/letter.rb +30 -0
- data/lib/baykit/bayserver/agent/lifecycle_listener.rb +9 -7
- data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +298 -0
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +257 -0
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +52 -0
- data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +150 -0
- data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +129 -0
- data/lib/baykit/bayserver/agent/multiplexer/rudder_state.rb +81 -0
- data/lib/baykit/bayserver/agent/multiplexer/secure_transporter.rb +50 -0
- data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +561 -0
- data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +311 -0
- data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +194 -0
- data/lib/baykit/bayserver/agent/multiplexer/transporter.rb +61 -0
- data/lib/baykit/bayserver/agent/multiplexer/write_unit.rb +30 -0
- data/lib/baykit/bayserver/agent/non_blocking_handler.rb +0 -319
- data/lib/baykit/bayserver/agent/signal/signal_agent.rb +2 -1
- data/lib/baykit/bayserver/agent/timer_handler.rb +1 -1
- data/lib/baykit/bayserver/agent/transporter/data_listener.rb +7 -7
- data/lib/baykit/bayserver/agent/transporter/package.rb +0 -3
- data/lib/baykit/bayserver/agent/transporter/transporter.rb +5 -139
- data/lib/baykit/bayserver/bay_log.rb +1 -0
- data/lib/baykit/bayserver/bayserver.rb +32 -28
- data/lib/baykit/bayserver/{util → common}/groups.rb +1 -1
- data/lib/baykit/bayserver/common/inbound_handler.rb +12 -0
- data/lib/baykit/bayserver/{docker/base → common}/inbound_ship.rb +94 -19
- data/lib/baykit/bayserver/{docker/base → common}/inbound_ship_store.rb +7 -9
- data/lib/baykit/bayserver/common/multiplexer.rb +98 -0
- data/lib/baykit/bayserver/common/postpone.rb +15 -0
- data/lib/baykit/bayserver/common/read_only_ship.rb +42 -0
- data/lib/baykit/bayserver/common/recipient.rb +24 -0
- data/lib/baykit/bayserver/common/vehicle.rb +24 -0
- data/lib/baykit/bayserver/common/vehicle_runner.rb +127 -0
- data/lib/baykit/bayserver/{docker/warp → common}/warp_data.rb +18 -10
- data/lib/baykit/bayserver/common/warp_handler.rb +27 -0
- data/lib/baykit/bayserver/{docker/warp → common}/warp_ship.rb +107 -27
- data/lib/baykit/bayserver/{docker/warp → common}/warp_ship_store.rb +3 -8
- data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +2 -2
- data/lib/baykit/bayserver/docker/base/port_base.rb +59 -27
- data/lib/baykit/bayserver/docker/{warp/warp_docker.rb → base/warp_base.rb} +43 -50
- data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +118 -31
- data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +60 -63
- data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +11 -10
- data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +13 -4
- data/lib/baykit/bayserver/docker/city.rb +27 -13
- data/lib/baykit/bayserver/docker/club.rb +8 -8
- data/lib/baykit/bayserver/docker/docker.rb +9 -1
- data/lib/baykit/bayserver/docker/harbor.rb +184 -22
- data/lib/baykit/bayserver/docker/permission.rb +7 -6
- data/lib/baykit/bayserver/docker/port.rb +39 -11
- data/lib/baykit/bayserver/docker/secure.rb +11 -9
- data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +99 -4
- data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +6 -2
- data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +92 -0
- data/lib/baykit/bayserver/docker/town.rb +31 -15
- data/lib/baykit/bayserver/docker/trouble.rb +17 -5
- data/lib/baykit/bayserver/docker/warp.rb +34 -0
- data/lib/baykit/bayserver/mem_usage.rb +9 -9
- data/lib/baykit/bayserver/protocol/command_packer.rb +1 -8
- data/lib/baykit/bayserver/protocol/packet_packer.rb +7 -11
- data/lib/baykit/bayserver/protocol/packet_store.rb +4 -4
- data/lib/baykit/bayserver/protocol/protocol_handler.rb +26 -8
- data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +5 -5
- data/lib/baykit/bayserver/rudders/io_rudder.rb +62 -0
- data/lib/baykit/bayserver/rudders/rudder.rb +29 -0
- data/lib/baykit/bayserver/{watercraft → ships}/ship.rb +65 -41
- data/lib/baykit/bayserver/taxi/taxi.rb +15 -10
- data/lib/baykit/bayserver/taxi/taxi_runner.rb +9 -94
- data/lib/baykit/bayserver/tours/read_file_taxi.rb +2 -2
- data/lib/baykit/bayserver/tours/req_content_handler.rb +16 -13
- data/lib/baykit/bayserver/tours/tour.rb +2 -2
- data/lib/baykit/bayserver/tours/tour_handler.rb +36 -0
- data/lib/baykit/bayserver/tours/tour_req.rb +14 -24
- data/lib/baykit/bayserver/tours/tour_res.rb +5 -89
- data/lib/baykit/bayserver/tours/tour_store.rb +5 -5
- data/lib/baykit/bayserver/train/train_runner.rb +17 -13
- data/lib/baykit/bayserver/util/data_consume_listener.rb +1 -1
- data/lib/baykit/bayserver/util/executor_service.rb +11 -7
- data/lib/baykit/bayserver/util/ip_matcher.rb +9 -39
- data/lib/baykit/bayserver/util/locale.rb +1 -1
- data/lib/baykit/bayserver/util/selector.rb +24 -5
- data/lib/baykit/bayserver/util/sys_util.rb +6 -6
- data/lib/baykit/bayserver/version.rb +1 -1
- metadata +37 -18
- data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +0 -231
- data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +0 -55
- data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +0 -81
- data/lib/baykit/bayserver/docker/base/inbound_handler.rb +0 -42
- data/lib/baykit/bayserver/docker/warp/package.rb +0 -4
- data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +0 -112
- data/lib/baykit/bayserver/docker/warp/warp_handler.rb +0 -38
- /data/lib/baykit/bayserver/{util → common}/cities.rb +0 -0
|
@@ -2,25 +2,28 @@ require 'uri'
|
|
|
2
2
|
|
|
3
3
|
require 'baykit/bayserver/agent/grand_agent'
|
|
4
4
|
require 'baykit/bayserver/agent/lifecycle_listener'
|
|
5
|
+
require 'baykit/bayserver/agent/multiplexer/rudder_state'
|
|
6
|
+
require 'baykit/bayserver/docker/warp'
|
|
5
7
|
require 'baykit/bayserver/docker/base/club_base'
|
|
6
|
-
require 'baykit/bayserver/
|
|
7
|
-
require 'baykit/bayserver/
|
|
8
|
-
require 'baykit/bayserver/docker/warp/warp_ship_store'
|
|
8
|
+
require 'baykit/bayserver/common/warp_data'
|
|
9
|
+
require 'baykit/bayserver/common/warp_ship_store'
|
|
9
10
|
|
|
10
11
|
module Baykit
|
|
11
12
|
module BayServer
|
|
12
13
|
module Docker
|
|
13
|
-
module
|
|
14
|
-
class
|
|
14
|
+
module Base
|
|
15
|
+
class WarpBase < Baykit::BayServer::Docker::Base::ClubBase
|
|
16
|
+
include Baykit::BayServer::Docker::Warp # implements
|
|
15
17
|
|
|
16
18
|
include Baykit::BayServer::Agent
|
|
19
|
+
include Baykit::BayServer::Agent::Multiplexer
|
|
17
20
|
include Baykit::BayServer::Protocol
|
|
18
|
-
include Baykit::BayServer::Bcf
|
|
19
21
|
include Baykit::BayServer::Util
|
|
20
|
-
include Baykit::BayServer::
|
|
22
|
+
include Baykit::BayServer::Rudders
|
|
21
23
|
|
|
22
24
|
class AgentListener
|
|
23
|
-
include Baykit::BayServer::Agent::LifecycleListener
|
|
25
|
+
include Baykit::BayServer::Agent::LifecycleListener # implements
|
|
26
|
+
include Baykit::BayServer::Common
|
|
24
27
|
|
|
25
28
|
attr :warp_docker
|
|
26
29
|
|
|
@@ -28,25 +31,12 @@ module Baykit
|
|
|
28
31
|
@warp_docker = dkr
|
|
29
32
|
end
|
|
30
33
|
|
|
31
|
-
def add(
|
|
32
|
-
@warp_docker.stores[
|
|
34
|
+
def add(agt_id)
|
|
35
|
+
@warp_docker.stores[agt_id] = WarpShipStore.new(@warp_docker.max_ships);
|
|
33
36
|
end
|
|
34
37
|
|
|
35
|
-
def remove(
|
|
36
|
-
@warp_docker.stores.delete(
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
class WarpShipHolder
|
|
42
|
-
attr :owner_id
|
|
43
|
-
attr :ship_id
|
|
44
|
-
attr :ship
|
|
45
|
-
|
|
46
|
-
def initialize(owner_id, ship_id, ship)
|
|
47
|
-
@owner_id = owner_id
|
|
48
|
-
@ship_id = ship_id
|
|
49
|
-
@ship = ship
|
|
38
|
+
def remove(agt_id)
|
|
39
|
+
@warp_docker.stores.delete(agt_id);
|
|
50
40
|
end
|
|
51
41
|
end
|
|
52
42
|
|
|
@@ -55,7 +45,6 @@ module Baykit
|
|
|
55
45
|
attr :port
|
|
56
46
|
attr :warp_base
|
|
57
47
|
attr :max_ships
|
|
58
|
-
attr :cur_ships
|
|
59
48
|
attr :host_addr
|
|
60
49
|
attr :timeout_sec
|
|
61
50
|
attr :tour_list
|
|
@@ -67,13 +56,21 @@ module Baykit
|
|
|
67
56
|
######################################################
|
|
68
57
|
# Abstract methods
|
|
69
58
|
######################################################
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
59
|
+
def secure
|
|
60
|
+
raise NotImplementedError.new
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def protocol
|
|
64
|
+
raise NotImplementedError.new
|
|
65
|
+
end
|
|
76
66
|
|
|
67
|
+
def new_transporter(agent, rd, ship)
|
|
68
|
+
raise NotImplementedError.new
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
######################################################
|
|
72
|
+
# Initialize methods
|
|
73
|
+
######################################################
|
|
77
74
|
def initialize
|
|
78
75
|
super
|
|
79
76
|
@scheme = nil
|
|
@@ -81,7 +78,6 @@ module Baykit
|
|
|
81
78
|
@port = 0
|
|
82
79
|
@warp_base = nil
|
|
83
80
|
@max_ships = -1
|
|
84
|
-
@cur_ships = 0
|
|
85
81
|
@host_addr = nil
|
|
86
82
|
@tour_list = []
|
|
87
83
|
@timeout_sec = -1 # -1 means "Use harbor.socketTimeoutSec"
|
|
@@ -180,7 +176,7 @@ module Baykit
|
|
|
180
176
|
######################################################
|
|
181
177
|
|
|
182
178
|
def arrive(tur)
|
|
183
|
-
agt = tur.ship.
|
|
179
|
+
agt = GrandAgent.get(tur.ship.agent_id)
|
|
184
180
|
sto = get_ship_store(agt.agent_id)
|
|
185
181
|
|
|
186
182
|
wsip = sto.rent()
|
|
@@ -199,12 +195,12 @@ module Baykit
|
|
|
199
195
|
else
|
|
200
196
|
skt = Socket.new(@host_addr[1].ipv4? ? Socket::AF_INET : Socket::AF_INET6, Socket::SOCK_STREAM, 0)
|
|
201
197
|
end
|
|
202
|
-
|
|
198
|
+
rd = IORudder.new(skt)
|
|
203
199
|
|
|
204
|
-
tp = new_transporter(agt,
|
|
200
|
+
tp = new_transporter(agt, rd, wsip)
|
|
205
201
|
proto_hnd = ProtocolHandlerStore.get_store(protocol(), false, agt.agent_id).rent()
|
|
206
|
-
wsip.init_warp(
|
|
207
|
-
|
|
202
|
+
wsip.init_warp(rd, agt.agent_id, tp, self, proto_hnd)
|
|
203
|
+
|
|
208
204
|
BayLog.debug("%s init warp ship", wsip)
|
|
209
205
|
BayLog.debug("%s Connect to %s:%d skt=%s", wsip, @host, @port, skt)
|
|
210
206
|
|
|
@@ -218,8 +214,8 @@ module Baykit
|
|
|
218
214
|
wsip.start_warp_tour(tur)
|
|
219
215
|
|
|
220
216
|
if need_connect
|
|
221
|
-
agt.
|
|
222
|
-
agt.
|
|
217
|
+
agt.net_multiplexer.add_rudder_state(wsip.rudder, RudderState.new(wsip.rudder, tp))
|
|
218
|
+
agt.net_multiplexer.get_transporter(wsip.rudder).req_connect(wsip.rudder, @host_addr[1])
|
|
223
219
|
end
|
|
224
220
|
|
|
225
221
|
rescue SystemCallError => e
|
|
@@ -234,21 +230,18 @@ module Baykit
|
|
|
234
230
|
|
|
235
231
|
|
|
236
232
|
######################################################
|
|
237
|
-
# Implements
|
|
233
|
+
# Implements Warp
|
|
238
234
|
######################################################
|
|
239
|
-
def
|
|
235
|
+
def keep(wsip)
|
|
240
236
|
BayLog.debug("%s keepShip: %s", self, wsip)
|
|
241
|
-
get_ship_store(wsip.
|
|
237
|
+
get_ship_store(wsip.agent_id).keep(wsip)
|
|
242
238
|
end
|
|
243
239
|
|
|
244
|
-
def
|
|
240
|
+
def on_end_ship(wsip)
|
|
241
|
+
BayLog.debug("%s Return protocol handler: ", wsip)
|
|
242
|
+
get_protocol_handler_store(wsip.agent_id).Return(wsip.protocol_handler)
|
|
245
243
|
BayLog.debug("%s return ship: %s", self, wsip);
|
|
246
|
-
get_ship_store(wsip.
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
def return_protocol_handler(agt, phnd)
|
|
250
|
-
BayLog.debug("%s Return protocol handler: ", phnd)
|
|
251
|
-
get_protocol_handler_store(agt.agent_id).Return(phnd)
|
|
244
|
+
get_ship_store(wsip.agent_id).Return(wsip)
|
|
252
245
|
end
|
|
253
246
|
|
|
254
247
|
######################################################
|
|
@@ -4,7 +4,7 @@ require 'baykit/bayserver/docker/base/docker_base'
|
|
|
4
4
|
require 'baykit/bayserver/constants'
|
|
5
5
|
require 'baykit/bayserver/config_exception'
|
|
6
6
|
|
|
7
|
-
require 'baykit/bayserver/
|
|
7
|
+
require 'baykit/bayserver/common/groups'
|
|
8
8
|
require 'baykit/bayserver/util/sys_util'
|
|
9
9
|
|
|
10
10
|
|
|
@@ -19,6 +19,7 @@ module Baykit
|
|
|
19
19
|
include Baykit::BayServer
|
|
20
20
|
include Baykit::BayServer::Bcf
|
|
21
21
|
include Baykit::BayServer::Util
|
|
22
|
+
include Baykit::BayServer::Common
|
|
22
23
|
include Baykit::BayServer::Constants
|
|
23
24
|
|
|
24
25
|
DEFAULT_MAX_SHIPS = 256
|
|
@@ -33,7 +34,11 @@ module Baykit
|
|
|
33
34
|
DEFAULT_CONTROL_PORT = -1
|
|
34
35
|
DEFAULT_MULTI_CORE = true
|
|
35
36
|
DEFAULT_GZIP_COMP = false
|
|
36
|
-
|
|
37
|
+
DEFAULT_NET_MULTIPLEXER = MULTIPLEXER_TYPE_SPIDER
|
|
38
|
+
DEFAULT_FILE_MULTIPLEXER = MULTIPLEXER_TYPE_SPIDER
|
|
39
|
+
DEFAULT_LOG_MULTIPLEXER = MULTIPLEXER_TYPE_SPIDER
|
|
40
|
+
DEFAULT_CGI_MULTIPLEXER = MULTIPLEXER_TYPE_SPIDER
|
|
41
|
+
DEFAULT_RECIPIENT = RECIPIENT_TYPE_SPIDER
|
|
37
42
|
DEFAULT_PID_FILE = "bayserver.pid"
|
|
38
43
|
|
|
39
44
|
# Default charset
|
|
@@ -84,8 +89,20 @@ module Baykit
|
|
|
84
89
|
# Multi core flag
|
|
85
90
|
attr :multi_core
|
|
86
91
|
|
|
87
|
-
#
|
|
88
|
-
attr :
|
|
92
|
+
# Multiplexer type of network I/O
|
|
93
|
+
attr :net_multiplexer
|
|
94
|
+
|
|
95
|
+
# Multiplexer type of file read
|
|
96
|
+
attr :file_multiplexer
|
|
97
|
+
|
|
98
|
+
# Multiplexer type of log output
|
|
99
|
+
attr :log_multiplexer
|
|
100
|
+
|
|
101
|
+
# Multiplexer type of CGI input
|
|
102
|
+
attr :cgi_multiplexer
|
|
103
|
+
|
|
104
|
+
# Recipient type
|
|
105
|
+
attr :recipient
|
|
89
106
|
|
|
90
107
|
# PID file name
|
|
91
108
|
attr :pid_file
|
|
@@ -105,7 +122,11 @@ module Baykit
|
|
|
105
122
|
@control_port = DEFAULT_CONTROL_PORT
|
|
106
123
|
@multi_core = DEFAULT_MULTI_CORE
|
|
107
124
|
@gzip_comp = DEFAULT_GZIP_COMP
|
|
108
|
-
@
|
|
125
|
+
@net_multiplexer = DEFAULT_NET_MULTIPLEXER
|
|
126
|
+
@file_multiplexer = DEFAULT_FILE_MULTIPLEXER
|
|
127
|
+
@log_multiplexer = DEFAULT_LOG_MULTIPLEXER
|
|
128
|
+
@cgi_multiplexer = DEFAULT_CGI_MULTIPLEXER
|
|
129
|
+
@recipient = DEFAULT_RECIPIENT
|
|
109
130
|
@pid_file = DEFAULT_PID_FILE
|
|
110
131
|
end
|
|
111
132
|
|
|
@@ -128,22 +149,61 @@ module Baykit
|
|
|
128
149
|
BayLog.warn(BayMessage.get(:CFG_MAX_SHIPS_IS_TO_SMALL, @max_ships))
|
|
129
150
|
end
|
|
130
151
|
|
|
131
|
-
if @
|
|
132
|
-
|
|
133
|
-
|
|
152
|
+
if @net_multiplexer == MULTIPLEXER_TYPE_TAXI ||
|
|
153
|
+
@net_multiplexer == MULTIPLEXER_TYPE_TRAIN ||
|
|
154
|
+
@net_multiplexer == MULTIPLEXER_TYPE_SPIN
|
|
155
|
+
BayLog.warn(
|
|
156
|
+
BayMessage.get(
|
|
157
|
+
:CFG_NET_MULTIPLEXER_NOT_SUPPORTED,
|
|
158
|
+
Harbor::get_multiplexer_type_name(@net_multiplexer),
|
|
159
|
+
Harbor::get_multiplexer_type_name(DEFAULT_NET_MULTIPLEXER)))
|
|
160
|
+
@net_multiplexer = DEFAULT_NET_MULTIPLEXER
|
|
134
161
|
end
|
|
135
162
|
|
|
136
|
-
if @
|
|
137
|
-
|
|
138
|
-
|
|
163
|
+
if @file_multiplexer == MULTIPLEXER_TYPE_SPIDER and !SysUtil.support_select_file ||
|
|
164
|
+
@file_multiplexer == MULTIPLEXER_TYPE_SPIN and !SysUtil.support_nonblock_file_read ||
|
|
165
|
+
@file_multiplexer == MULTIPLEXER_TYPE_TRAIN
|
|
166
|
+
BayLog.warn(
|
|
167
|
+
BayMessage.get(
|
|
168
|
+
:CFG_FILE_MULTIPLEXER_NOT_SUPPORTED,
|
|
169
|
+
Harbor::get_multiplexer_type_name(@file_multiplexer),
|
|
170
|
+
Harbor::get_multiplexer_type_name(DEFAULT_FILE_MULTIPLEXER)))
|
|
171
|
+
@file_multiplexer = DEFAULT_FILE_MULTIPLEXER
|
|
139
172
|
end
|
|
140
173
|
|
|
174
|
+
if @log_multiplexer == MULTIPLEXER_TYPE_SPIDER and !SysUtil.support_select_file ||
|
|
175
|
+
@log_multiplexer == MULTIPLEXER_TYPE_SPIN and !SysUtil.support_nonblock_file_write ||
|
|
176
|
+
@log_multiplexer == MULTIPLEXER_TYPE_TRAIN
|
|
177
|
+
BayLog.warn(
|
|
178
|
+
BayMessage.get(
|
|
179
|
+
:CFG_LOG_MULTIPLEXER_NOT_SUPPORTED,
|
|
180
|
+
Harbor::get_multiplexer_type_name(@log_multiplexer),
|
|
181
|
+
Harbor::get_multiplexer_type_name(DEFAULT_LOG_MULTIPLEXER)))
|
|
182
|
+
@log_multiplexer = DEFAULT_LOG_MULTIPLEXER
|
|
183
|
+
end
|
|
141
184
|
|
|
142
|
-
|
|
185
|
+
if @log_multiplexer == MULTIPLEXER_TYPE_SPIN ||
|
|
186
|
+
@log_multiplexer == MULTIPLEXER_TYPE_PIGEON
|
|
187
|
+
BayLog.warn(
|
|
188
|
+
BayMessage.get(
|
|
189
|
+
:CFG_CGI_MULTIPLEXER_NOT_SUPPORTED,
|
|
190
|
+
Harbor::get_multiplexer_type_name(@cgi_multiplexer),
|
|
191
|
+
Harbor::get_multiplexer_type_name(DEFAULT_CGI_MULTIPLEXER)))
|
|
192
|
+
@cgi_multiplexer = DEFAULT_CGI_MULTIPLEXER
|
|
193
|
+
end
|
|
143
194
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
195
|
+
if @net_multiplexer == MULTIPLEXER_TYPE_SPIDER &&
|
|
196
|
+
@recipient != RECIPIENT_TYPE_SPIDER
|
|
197
|
+
BayLog.warn(
|
|
198
|
+
BayMessage.get(
|
|
199
|
+
:CFG_NET_MULTIPLEXER_DOES_NOT_SUPPORT_THIS_RECIPIENT,
|
|
200
|
+
Harbor::get_multiplexer_type_name(@net_multiplexer),
|
|
201
|
+
Harbor::get_recipient_type_name(@recipient),
|
|
202
|
+
Harbor::get_recipient_type_name(RECIPIENT_TYPE_SPIDER)))
|
|
203
|
+
@recipient = RECIPIENT_TYPE_SPIDER
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
end
|
|
147
207
|
|
|
148
208
|
def init_docker(dkr)
|
|
149
209
|
if dkr.instance_of?(Trouble)
|
|
@@ -193,17 +253,47 @@ module Baykit
|
|
|
193
253
|
@multi_core = StringUtil.parse_bool(kv.value)
|
|
194
254
|
when "gzipcomp"
|
|
195
255
|
@gzip_comp = StringUtil.parse_bool(kv.value)
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
@
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
@file_send_method = FILE_SEND_METHOD_TAXI
|
|
204
|
-
else
|
|
205
|
-
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage.get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
|
|
256
|
+
|
|
257
|
+
when "netmultiplexer"
|
|
258
|
+
begin
|
|
259
|
+
@net_multiplexer = Harbor::get_multiplexer_type(kv.value.downcase)
|
|
260
|
+
rescue => e
|
|
261
|
+
BayLog.error_e(e)
|
|
262
|
+
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage::get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
|
|
206
263
|
end
|
|
264
|
+
|
|
265
|
+
when "filemultiplexer"
|
|
266
|
+
begin
|
|
267
|
+
@file_multiplexer = Harbor::get_multiplexer_type(kv.value.downcase)
|
|
268
|
+
rescue => e
|
|
269
|
+
BayLog.error_e(e)
|
|
270
|
+
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage::get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
when "logmultiplexer"
|
|
274
|
+
begin
|
|
275
|
+
@log_multiplexer = Harbor.get_multiplexer_type(kv.value.downcase)
|
|
276
|
+
rescue => e
|
|
277
|
+
BayLog.error_e(e)
|
|
278
|
+
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage::get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
when "cgimultiplexer"
|
|
282
|
+
begin
|
|
283
|
+
@cgi_multiplexer = Harbor.get_multiplexer_type(kv.value.downcase)
|
|
284
|
+
rescue => e
|
|
285
|
+
BayLog.error_e(e)
|
|
286
|
+
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage::get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
when "recipient"
|
|
290
|
+
begin
|
|
291
|
+
@recipient = Harbor.get_recipient_type(kv.value.downcase)
|
|
292
|
+
rescue => e
|
|
293
|
+
BayLog.error_e(e)
|
|
294
|
+
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage::get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
|
|
295
|
+
end
|
|
296
|
+
|
|
207
297
|
when "pidfile"
|
|
208
298
|
@pid_file = kv.value
|
|
209
299
|
else
|
|
@@ -212,13 +302,10 @@ module Baykit
|
|
|
212
302
|
true
|
|
213
303
|
end
|
|
214
304
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
305
|
+
#######################
|
|
306
|
+
# Implements Harbor
|
|
307
|
+
#######################
|
|
218
308
|
|
|
219
|
-
def multi_core?
|
|
220
|
-
@multi_core
|
|
221
|
-
end
|
|
222
309
|
end
|
|
223
310
|
end
|
|
224
311
|
end
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
require 'baykit/bayserver/agent/grand_agent'
|
|
2
2
|
require 'baykit/bayserver/agent/lifecycle_listener'
|
|
3
|
-
require 'baykit/bayserver/agent/
|
|
4
|
-
require 'baykit/bayserver/agent/
|
|
3
|
+
require 'baykit/bayserver/agent/multiplexer/plain_transporter'
|
|
4
|
+
require 'baykit/bayserver/agent/multiplexer/rudder_state'
|
|
5
|
+
require 'baykit/bayserver/rudders/io_rudder'
|
|
5
6
|
require 'baykit/bayserver/docker/built_in/write_file_taxi'
|
|
6
7
|
require 'baykit/bayserver/docker/log'
|
|
7
8
|
require 'baykit/bayserver/docker/built_in/log_items'
|
|
@@ -14,15 +15,18 @@ module Baykit
|
|
|
14
15
|
module BuiltIn
|
|
15
16
|
class BuiltInLogDocker < Baykit::BayServer::Docker::Base::DockerBase
|
|
16
17
|
include Baykit::BayServer::Docker::Log # implements
|
|
17
|
-
include Baykit::BayServer::Agent::Transporter
|
|
18
|
-
include Baykit::BayServer::Agent
|
|
19
|
-
include Baykit::BayServer::Util
|
|
20
18
|
|
|
19
|
+
include Baykit::BayServer::Docker
|
|
20
|
+
include Baykit::BayServer::Util
|
|
21
21
|
include Baykit::BayServer::Bcf
|
|
22
|
+
include Baykit::BayServer::Agent
|
|
22
23
|
|
|
23
24
|
class AgentListener
|
|
25
|
+
include Baykit::BayServer::Agent::Multiplexer
|
|
24
26
|
include Baykit::BayServer::Agent::LifecycleListener # implements
|
|
25
27
|
include Baykit::BayServer::Agent::Transporter
|
|
28
|
+
include Baykit::BayServer::Agent
|
|
29
|
+
include Baykit::BayServer::Rudders
|
|
26
30
|
|
|
27
31
|
attr :log_docker
|
|
28
32
|
|
|
@@ -30,48 +34,58 @@ module Baykit
|
|
|
30
34
|
@log_docker = dkr
|
|
31
35
|
end
|
|
32
36
|
|
|
33
|
-
def add(
|
|
34
|
-
file_name = "#{@log_docker.file_prefix}_#{
|
|
37
|
+
def add(agt_id)
|
|
38
|
+
file_name = "#{@log_docker.file_prefix}_#{agt_id}.#{@log_docker.file_ext}"
|
|
39
|
+
size = 0
|
|
40
|
+
if ::File.exist?(file_name)
|
|
41
|
+
size = ::File.size(file_name)
|
|
42
|
+
end
|
|
43
|
+
agt = GrandAgent.get(agt_id)
|
|
35
44
|
|
|
36
|
-
|
|
45
|
+
begin
|
|
46
|
+
f = File.open(file_name, "a")
|
|
47
|
+
rescue => e
|
|
48
|
+
BayLog.fatal(BayMessage.get(:INT_CANNOT_OPEN_LOG_FILE, file_name))
|
|
49
|
+
BayLog.fatal_e(e);
|
|
50
|
+
end
|
|
37
51
|
|
|
38
|
-
|
|
39
|
-
when LOG_WRITE_METHOD_SELECT
|
|
40
|
-
tp = PlainTransporter.new(false, 0, true) # write only
|
|
41
|
-
tp.init(agt.non_blocking_handler, File.open(file_name, "a"), boat)
|
|
52
|
+
rd = IORudder.new(f)
|
|
42
53
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
54
|
+
case BayServer::harbor.log_multiplexer
|
|
55
|
+
when Harbor::MULTIPLEXER_TYPE_TAXI
|
|
56
|
+
mpx = agt.taxi_multiplexer
|
|
46
57
|
|
|
47
|
-
when
|
|
48
|
-
|
|
49
|
-
tp.init(agt.agent_id, File.open(file_name, "a"), boat)
|
|
58
|
+
when Harbor::MULTIPLEXER_TYPE_SPIN
|
|
59
|
+
mpx = agt.spin_multiplexer
|
|
50
60
|
|
|
51
|
-
|
|
61
|
+
when Harbor::MULTIPLEXER_TYPE_SPIDER
|
|
62
|
+
mpx = agt.spider_multiplexer
|
|
52
63
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
64
|
+
when Harbor::MULTIPLEXER_TYPE_JOB
|
|
65
|
+
mpx = agt.job_multiplexer
|
|
66
|
+
|
|
67
|
+
else
|
|
68
|
+
raise Sink.new
|
|
58
69
|
end
|
|
59
70
|
|
|
60
|
-
|
|
71
|
+
st = RudderState.new(rd)
|
|
72
|
+
st.bytes_wrote = size
|
|
73
|
+
mpx.add_rudder_state(rd, st)
|
|
74
|
+
|
|
75
|
+
@log_docker.multiplexers[agt_id] = mpx
|
|
76
|
+
@log_docker.rudders[agt_id] = rd
|
|
61
77
|
end
|
|
62
78
|
|
|
63
79
|
|
|
64
|
-
def remove(
|
|
65
|
-
@log_docker.
|
|
80
|
+
def remove(agt_id)
|
|
81
|
+
rd = @log_docker.rudders[agt_id]
|
|
82
|
+
@log_docker.multiplexers[agt_id].req_close(rd)
|
|
83
|
+
@log_docker.multiplexers[agt_id] = nil
|
|
84
|
+
@log_docker.rudders[agt_id] = nil
|
|
66
85
|
end
|
|
67
86
|
end
|
|
68
87
|
|
|
69
88
|
|
|
70
|
-
LOG_WRITE_METHOD_SELECT = 1
|
|
71
|
-
LOG_WRITE_METHOD_SPIN = 2
|
|
72
|
-
LOG_WRITE_METHOD_TAXI = 3
|
|
73
|
-
DEFAULT_LOG_WRITE_METHOD = LOG_WRITE_METHOD_TAXI
|
|
74
|
-
|
|
75
89
|
class << self
|
|
76
90
|
# Mapping table for format
|
|
77
91
|
attr :log_item_map
|
|
@@ -91,14 +105,17 @@ module Baykit
|
|
|
91
105
|
# Log items
|
|
92
106
|
attr :log_items
|
|
93
107
|
|
|
94
|
-
|
|
95
|
-
|
|
108
|
+
attr :rudders
|
|
109
|
+
|
|
110
|
+
# Multiplexer to write to file
|
|
111
|
+
attr :multiplexers
|
|
96
112
|
|
|
97
113
|
def initialize
|
|
98
114
|
@loggers = {}
|
|
99
115
|
@format = nil
|
|
100
116
|
@log_items = []
|
|
101
|
-
@
|
|
117
|
+
@rudders = {}
|
|
118
|
+
@multiplexers = {}
|
|
102
119
|
end
|
|
103
120
|
|
|
104
121
|
def init(elm, parent)
|
|
@@ -130,17 +147,6 @@ module Baykit
|
|
|
130
147
|
# Parse format
|
|
131
148
|
compile(@format, @log_items, elm.file_name, elm.line_no)
|
|
132
149
|
|
|
133
|
-
# Check log write method
|
|
134
|
-
if @log_write_method == LOG_WRITE_METHOD_SELECT and !SysUtil.support_select_file()
|
|
135
|
-
BayLog.warn(BayMessage.get(:CFG_LOG_WRITE_METHOD_SELECT_NOT_SUPPORTED))
|
|
136
|
-
@log_write_method = LOG_WRITE_METHOD_TAXI
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
if @log_write_method == LOG_WRITE_METHOD_SPIN and !SysUtil.support_nonblock_file_write()
|
|
140
|
-
BayLog.warn(BayMessage.get(:CFG_LOG_WRITE_METHOD_SPIN_NOT_SUPPORTED))
|
|
141
|
-
@log_write_method = LOG_WRITE_METHOD_TAXI
|
|
142
|
-
end
|
|
143
|
-
|
|
144
150
|
GrandAgent.add_lifecycle_listener(AgentListener.new(self));
|
|
145
151
|
end
|
|
146
152
|
|
|
@@ -148,17 +154,7 @@ module Baykit
|
|
|
148
154
|
case kv.key.downcase
|
|
149
155
|
when "format"
|
|
150
156
|
@format = kv.value
|
|
151
|
-
|
|
152
|
-
case kv.value.downcase()
|
|
153
|
-
when "select"
|
|
154
|
-
@log_write_method = LOG_WRITE_METHOD_SELECT
|
|
155
|
-
when "spin"
|
|
156
|
-
@log_write_method = LOG_WRITE_METHOD_SPIN
|
|
157
|
-
when "taxi"
|
|
158
|
-
@log_write_method = LOG_WRITE_METHOD_TAXI
|
|
159
|
-
else
|
|
160
|
-
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage.get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
|
|
161
|
-
end
|
|
157
|
+
|
|
162
158
|
else
|
|
163
159
|
return false
|
|
164
160
|
end
|
|
@@ -178,17 +174,18 @@ module Baykit
|
|
|
178
174
|
|
|
179
175
|
# If threre are message to write, write it
|
|
180
176
|
if sb.length > 0
|
|
181
|
-
|
|
177
|
+
@multiplexers[tour.ship.agent_id].req_write(
|
|
178
|
+
@rudders[tour.ship.agent_id],
|
|
179
|
+
sb,
|
|
180
|
+
nil,
|
|
181
|
+
"log",
|
|
182
|
+
nil
|
|
183
|
+
)
|
|
182
184
|
end
|
|
183
185
|
end
|
|
184
186
|
|
|
185
187
|
private
|
|
186
188
|
|
|
187
|
-
def get_logger(agt)
|
|
188
|
-
return @loggers[agt.agent_id]
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
|
|
192
189
|
|
|
193
190
|
#
|
|
194
191
|
# Compile format pattern
|
|
@@ -3,7 +3,7 @@ require 'ipaddr'
|
|
|
3
3
|
require 'baykit/bayserver/http_exception'
|
|
4
4
|
require 'baykit/bayserver/bcf/package'
|
|
5
5
|
require 'baykit/bayserver/docker/permission'
|
|
6
|
-
require 'baykit/bayserver/
|
|
6
|
+
require 'baykit/bayserver/common/groups'
|
|
7
7
|
require 'baykit/bayserver/util/headers'
|
|
8
8
|
require 'baykit/bayserver/util/http_status'
|
|
9
9
|
require 'baykit/bayserver/util/host_matcher'
|
|
@@ -20,6 +20,7 @@ module Baykit
|
|
|
20
20
|
include Baykit::BayServer
|
|
21
21
|
include Baykit::BayServer::Bcf
|
|
22
22
|
include Baykit::BayServer::Util
|
|
23
|
+
include Baykit::BayServer::Common
|
|
23
24
|
|
|
24
25
|
class CheckItem
|
|
25
26
|
attr :matcher
|
|
@@ -30,8 +31,8 @@ module Baykit
|
|
|
30
31
|
@admit = admit
|
|
31
32
|
end
|
|
32
33
|
|
|
33
|
-
def socket_admitted(
|
|
34
|
-
matcher.match_socket(
|
|
34
|
+
def socket_admitted(rd)
|
|
35
|
+
matcher.match_socket(rd) == @admit
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
def tour_admitted(tur)
|
|
@@ -41,12 +42,12 @@ module Baykit
|
|
|
41
42
|
|
|
42
43
|
module PermissionMatcher # interface
|
|
43
44
|
|
|
44
|
-
def match_socket(
|
|
45
|
-
raise NotImplementedError
|
|
45
|
+
def match_socket(rd)
|
|
46
|
+
raise NotImplementedError.new
|
|
46
47
|
end
|
|
47
48
|
|
|
48
49
|
def match_tour(tur)
|
|
49
|
-
raise NotImplementedError
|
|
50
|
+
raise NotImplementedError.new
|
|
50
51
|
end
|
|
51
52
|
end
|
|
52
53
|
|
|
@@ -61,8 +62,8 @@ module Baykit
|
|
|
61
62
|
@mch = HostMatcher.new(hostPtn)
|
|
62
63
|
end
|
|
63
64
|
|
|
64
|
-
def match_socket(
|
|
65
|
-
return @mch.match(
|
|
65
|
+
def match_socket(rd)
|
|
66
|
+
return @mch.match(rd.io.remote_address.getnameinfo[0])
|
|
66
67
|
end
|
|
67
68
|
|
|
68
69
|
def match_tour(tur)
|
|
@@ -80,8 +81,8 @@ module Baykit
|
|
|
80
81
|
@mch = IpMatcher.new(ip_desc)
|
|
81
82
|
end
|
|
82
83
|
|
|
83
|
-
def match_socket(
|
|
84
|
-
return @mch.match(
|
|
84
|
+
def match_socket(rd)
|
|
85
|
+
return @mch.match(rd.io.remote_address.ip_address)
|
|
85
86
|
end
|
|
86
87
|
|
|
87
88
|
def match_tour(tur)
|