bayserver-core 2.2.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.
Files changed (149) hide show
  1. checksums.yaml +7 -0
  2. data/lib/baykit/bayserver/agent/accept_handler.rb +97 -0
  3. data/lib/baykit/bayserver/agent/channel_listener.rb +35 -0
  4. data/lib/baykit/bayserver/agent/command_receiver.rb +75 -0
  5. data/lib/baykit/bayserver/agent/grand_agent.rb +319 -0
  6. data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +217 -0
  7. data/lib/baykit/bayserver/agent/next_socket_action.rb +14 -0
  8. data/lib/baykit/bayserver/agent/non_blocking_handler.rb +433 -0
  9. data/lib/baykit/bayserver/agent/package.rb +3 -0
  10. data/lib/baykit/bayserver/agent/signal/signal_agent.rb +165 -0
  11. data/lib/baykit/bayserver/agent/signal/signal_proxy.rb +18 -0
  12. data/lib/baykit/bayserver/agent/signal/signal_sender.rb +99 -0
  13. data/lib/baykit/bayserver/agent/spin_handler.rb +140 -0
  14. data/lib/baykit/bayserver/agent/transporter/data_listener.rb +38 -0
  15. data/lib/baykit/bayserver/agent/transporter/package.rb +3 -0
  16. data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +55 -0
  17. data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +81 -0
  18. data/lib/baykit/bayserver/agent/transporter/spin_read_transporter.rb +111 -0
  19. data/lib/baykit/bayserver/agent/transporter/spin_write_transporter.rb +125 -0
  20. data/lib/baykit/bayserver/agent/transporter/transporter.rb +466 -0
  21. data/lib/baykit/bayserver/agent/upgrade_exception.rb +11 -0
  22. data/lib/baykit/bayserver/bay_dockers.rb +60 -0
  23. data/lib/baykit/bayserver/bay_exception.rb +12 -0
  24. data/lib/baykit/bayserver/bay_log.rb +148 -0
  25. data/lib/baykit/bayserver/bay_message.rb +20 -0
  26. data/lib/baykit/bayserver/bayserver.rb +529 -0
  27. data/lib/baykit/bayserver/bcf/bcf_document.rb +44 -0
  28. data/lib/baykit/bayserver/bcf/bcf_element.rb +30 -0
  29. data/lib/baykit/bayserver/bcf/bcf_key_val.rb +19 -0
  30. data/lib/baykit/bayserver/bcf/bcf_object.rb +15 -0
  31. data/lib/baykit/bayserver/bcf/bcf_parser.rb +180 -0
  32. data/lib/baykit/bayserver/bcf/package.rb +6 -0
  33. data/lib/baykit/bayserver/bcf/parse_exception.rb +15 -0
  34. data/lib/baykit/bayserver/config_exception.rb +25 -0
  35. data/lib/baykit/bayserver/constants.rb +8 -0
  36. data/lib/baykit/bayserver/docker/base/club_base.rb +117 -0
  37. data/lib/baykit/bayserver/docker/base/docker_base.rb +66 -0
  38. data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +89 -0
  39. data/lib/baykit/bayserver/docker/base/inbound_handler.rb +42 -0
  40. data/lib/baykit/bayserver/docker/base/inbound_ship.rb +341 -0
  41. data/lib/baykit/bayserver/docker/base/inbound_ship_store.rb +65 -0
  42. data/lib/baykit/bayserver/docker/base/port_base.rb +228 -0
  43. data/lib/baykit/bayserver/docker/base/reroute_base.rb +28 -0
  44. data/lib/baykit/bayserver/docker/built_in/built_in_city_docker.rb +303 -0
  45. data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +226 -0
  46. data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +302 -0
  47. data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +242 -0
  48. data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +157 -0
  49. data/lib/baykit/bayserver/docker/built_in/built_in_town_docker.rb +117 -0
  50. data/lib/baykit/bayserver/docker/built_in/built_in_trouble_docker.rb +57 -0
  51. data/lib/baykit/bayserver/docker/built_in/log_boat.rb +71 -0
  52. data/lib/baykit/bayserver/docker/built_in/log_item.rb +18 -0
  53. data/lib/baykit/bayserver/docker/built_in/log_item_factory.rb +18 -0
  54. data/lib/baykit/bayserver/docker/built_in/log_items.rb +287 -0
  55. data/lib/baykit/bayserver/docker/built_in/write_file_taxi.rb +101 -0
  56. data/lib/baykit/bayserver/docker/city.rb +22 -0
  57. data/lib/baykit/bayserver/docker/club.rb +45 -0
  58. data/lib/baykit/bayserver/docker/docker.rb +8 -0
  59. data/lib/baykit/bayserver/docker/harbor.rb +34 -0
  60. data/lib/baykit/bayserver/docker/log.rb +17 -0
  61. data/lib/baykit/bayserver/docker/package.rb +12 -0
  62. data/lib/baykit/bayserver/docker/permission.rb +18 -0
  63. data/lib/baykit/bayserver/docker/port.rb +39 -0
  64. data/lib/baykit/bayserver/docker/reroute.rb +17 -0
  65. data/lib/baykit/bayserver/docker/secure.rb +22 -0
  66. data/lib/baykit/bayserver/docker/send_file/directory_train.rb +123 -0
  67. data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +43 -0
  68. data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +71 -0
  69. data/lib/baykit/bayserver/docker/town.rb +30 -0
  70. data/lib/baykit/bayserver/docker/trouble.rb +17 -0
  71. data/lib/baykit/bayserver/docker/warp/package.rb +4 -0
  72. data/lib/baykit/bayserver/docker/warp/warp_data.rb +84 -0
  73. data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +112 -0
  74. data/lib/baykit/bayserver/docker/warp/warp_docker.rb +273 -0
  75. data/lib/baykit/bayserver/docker/warp/warp_handler.rb +38 -0
  76. data/lib/baykit/bayserver/docker/warp/warp_ship.rb +166 -0
  77. data/lib/baykit/bayserver/docker/warp/warp_ship_store.rb +111 -0
  78. data/lib/baykit/bayserver/http_exception.rb +33 -0
  79. data/lib/baykit/bayserver/mem_usage.rb +104 -0
  80. data/lib/baykit/bayserver/protocol/command.rb +21 -0
  81. data/lib/baykit/bayserver/protocol/command_handler.rb +9 -0
  82. data/lib/baykit/bayserver/protocol/command_packer.rb +49 -0
  83. data/lib/baykit/bayserver/protocol/command_unpacker.rb +13 -0
  84. data/lib/baykit/bayserver/protocol/package.rb +15 -0
  85. data/lib/baykit/bayserver/protocol/packet.rb +63 -0
  86. data/lib/baykit/bayserver/protocol/packet_factory.rb +13 -0
  87. data/lib/baykit/bayserver/protocol/packet_packer.rb +30 -0
  88. data/lib/baykit/bayserver/protocol/packet_part_accessor.rb +122 -0
  89. data/lib/baykit/bayserver/protocol/packet_store.rb +139 -0
  90. data/lib/baykit/bayserver/protocol/packet_unpacker.rb +17 -0
  91. data/lib/baykit/bayserver/protocol/protocol_exception.rb +17 -0
  92. data/lib/baykit/bayserver/protocol/protocol_handler.rb +64 -0
  93. data/lib/baykit/bayserver/protocol/protocol_handler_factory.rb +14 -0
  94. data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +109 -0
  95. data/lib/baykit/bayserver/sink.rb +22 -0
  96. data/lib/baykit/bayserver/taxi/taxi.rb +38 -0
  97. data/lib/baykit/bayserver/taxi/taxi_runner.rb +31 -0
  98. data/lib/baykit/bayserver/tours/content_consume_listener.rb +20 -0
  99. data/lib/baykit/bayserver/tours/package.rb +4 -0
  100. data/lib/baykit/bayserver/tours/read_file_taxi.rb +102 -0
  101. data/lib/baykit/bayserver/tours/req_content_handler.rb +37 -0
  102. data/lib/baykit/bayserver/tours/send_file_train.rb +65 -0
  103. data/lib/baykit/bayserver/tours/send_file_yacht.rb +93 -0
  104. data/lib/baykit/bayserver/tours/tour.rb +195 -0
  105. data/lib/baykit/bayserver/tours/tour_req.rb +251 -0
  106. data/lib/baykit/bayserver/tours/tour_res.rb +400 -0
  107. data/lib/baykit/bayserver/tours/tour_store.rb +121 -0
  108. data/lib/baykit/bayserver/train/train.rb +54 -0
  109. data/lib/baykit/bayserver/train/train_runner.rb +32 -0
  110. data/lib/baykit/bayserver/util/byte_array.rb +54 -0
  111. data/lib/baykit/bayserver/util/byte_buffer.rb +13 -0
  112. data/lib/baykit/bayserver/util/cgi_util.rb +165 -0
  113. data/lib/baykit/bayserver/util/char_util.rb +22 -0
  114. data/lib/baykit/bayserver/util/cities.rb +45 -0
  115. data/lib/baykit/bayserver/util/class_util.rb +17 -0
  116. data/lib/baykit/bayserver/util/counter.rb +23 -0
  117. data/lib/baykit/bayserver/util/data_consume_listener.rb +13 -0
  118. data/lib/baykit/bayserver/util/executor_service.rb +81 -0
  119. data/lib/baykit/bayserver/util/groups.rb +110 -0
  120. data/lib/baykit/bayserver/util/gzip_compressor.rb +55 -0
  121. data/lib/baykit/bayserver/util/headers.rb +194 -0
  122. data/lib/baykit/bayserver/util/host_matcher.rb +48 -0
  123. data/lib/baykit/bayserver/util/http_status.rb +60 -0
  124. data/lib/baykit/bayserver/util/http_util.rb +157 -0
  125. data/lib/baykit/bayserver/util/io_util.rb +32 -0
  126. data/lib/baykit/bayserver/util/ip_matcher.rb +67 -0
  127. data/lib/baykit/bayserver/util/key_val.rb +15 -0
  128. data/lib/baykit/bayserver/util/key_val_list_parser.rb +53 -0
  129. data/lib/baykit/bayserver/util/locale.rb +30 -0
  130. data/lib/baykit/bayserver/util/md5_password.rb +24 -0
  131. data/lib/baykit/bayserver/util/message.rb +56 -0
  132. data/lib/baykit/bayserver/util/mimes.rb +27 -0
  133. data/lib/baykit/bayserver/util/object_factory.rb +13 -0
  134. data/lib/baykit/bayserver/util/object_store.rb +74 -0
  135. data/lib/baykit/bayserver/util/postman.rb +35 -0
  136. data/lib/baykit/bayserver/util/reusable.rb +13 -0
  137. data/lib/baykit/bayserver/util/selector.rb +141 -0
  138. data/lib/baykit/bayserver/util/simple_buffer.rb +53 -0
  139. data/lib/baykit/bayserver/util/simple_inspect.rb +12 -0
  140. data/lib/baykit/bayserver/util/string_util.rb +73 -0
  141. data/lib/baykit/bayserver/util/sys_util.rb +138 -0
  142. data/lib/baykit/bayserver/util/url_decoder.rb +42 -0
  143. data/lib/baykit/bayserver/util/url_encoder.rb +19 -0
  144. data/lib/baykit/bayserver/util/valve.rb +15 -0
  145. data/lib/baykit/bayserver/version.rb +7 -0
  146. data/lib/baykit/bayserver/watercraft/boat.rb +43 -0
  147. data/lib/baykit/bayserver/watercraft/ship.rb +104 -0
  148. data/lib/baykit/bayserver/watercraft/yacht.rb +42 -0
  149. metadata +189 -0
@@ -0,0 +1,303 @@
1
+ require 'cgi'
2
+ require 'baykit/bayserver/config_exception'
3
+ require 'baykit/bayserver/bcf/package'
4
+ require 'baykit/bayserver/docker/package'
5
+ require 'baykit/bayserver/docker/send_file/send_file_docker'
6
+ require 'baykit/bayserver/docker/built_in/built_in_town_docker'
7
+ require 'baykit/bayserver/util/string_util'
8
+ require 'baykit/bayserver/util/url_decoder'
9
+ require 'baykit/bayserver/tours/tour'
10
+
11
+ module Baykit
12
+ module BayServer
13
+ module Docker
14
+ module BuiltIn
15
+ class BuiltInCityDocker < Baykit::BayServer::Docker::Base::DockerBase
16
+ include Baykit::BayServer::Docker::City # implements
17
+
18
+ include Baykit::BayServer::Util
19
+ include Baykit::BayServer::Bcf
20
+ include Baykit::BayServer::Docker
21
+ include Baykit::BayServer::Docker::SendFile
22
+ include Baykit::BayServer::Docker::BuiltIn
23
+ include Baykit::BayServer::Agent
24
+
25
+ class ClubMatchInfo
26
+ attr_accessor :club
27
+ attr_accessor :script_name
28
+ attr_accessor :path_info
29
+
30
+ def initialize
31
+ @club = nil
32
+ @script_name = nil
33
+ @path_info = nil
34
+ end
35
+ end
36
+
37
+ class MatchInfo
38
+ attr_accessor :town
39
+ attr_accessor :club_match
40
+ attr_accessor :query_string
41
+ attr_accessor :redirect_uri
42
+ attr_accessor :rewritten_uri
43
+ end
44
+
45
+ attr :towns
46
+ attr :default_town
47
+
48
+ attr :clubs
49
+ attr :default_club
50
+
51
+ attr :log_list
52
+ attr :permission_list
53
+
54
+ attr :trouble
55
+ attr :name
56
+
57
+ def initialize()
58
+ @towns = []
59
+ @clubs = []
60
+ @log_list = []
61
+ @permission_list = []
62
+ end
63
+
64
+ def to_s
65
+ "City[#{@name}]"
66
+ end
67
+
68
+ ######################################################
69
+ # Implements Docker
70
+ ######################################################
71
+
72
+ def init(elm, parent)
73
+ super
74
+
75
+ @name = elm.arg
76
+ @towns.sort! { |dkr1, dkr2| dkr2.name.length <=> dkr1.name.length }
77
+
78
+ @towns.each do |t|
79
+ BayLog.debug(BayMessage.get(:MSG_SETTING_UP_TOWN, t.name, t.location))
80
+ end
81
+
82
+ @default_town = BuiltInTownDocker.new
83
+ @default_club = SendFileDocker.new
84
+ end
85
+
86
+ ######################################################
87
+ # Implements DockerBase
88
+ ######################################################
89
+
90
+ def init_docker(dkr)
91
+ if dkr.kind_of?(Baykit::BayServer::Docker::Town)
92
+ @towns << dkr
93
+ elsif dkr.kind_of?(Baykit::BayServer::Docker::Club)
94
+ @clubs << dkr
95
+ elsif dkr.kind_of?(Baykit::BayServer::Docker::Log)
96
+ @log_list << dkr
97
+ elsif dkr.kind_of?(Baykit::BayServer::Docker::Permission)
98
+ @permission_list << dkr
99
+ elsif dkr.kind_of?(Baykit::BayServer::Docker::Trouble)
100
+ @trouble = dkr
101
+ else
102
+ return false
103
+ end
104
+ return true
105
+ end
106
+
107
+ def enter(tur)
108
+ BayLog.debug("%s City[%s] Request URI: %s", tur, @name, tur.req.uri)
109
+
110
+ tur.city = self
111
+ @permission_list.each do |p|
112
+ p.tour_admitted(tur)
113
+ end
114
+
115
+ match_info = get_town_and_club(tur.req.uri)
116
+ if match_info == nil
117
+ raise HttpException.new(HttpStatus::NOT_FOUND, tur.req.uri)
118
+ end
119
+
120
+ match_info.town.tour_admitted(tur)
121
+
122
+ if match_info.redirect_uri != nil
123
+ raise HttpException.moved_temp(match_info.redirect_uri)
124
+ else
125
+ BayLog.debug("%s Town[%s] Club[%s]", tur, match_info.town.name(), match_info.club_match.club)
126
+
127
+ tur.req.query_string = match_info.query_string
128
+ tur.req.script_name = match_info.club_match.script_name
129
+
130
+ if StringUtil.set?(match_info.club_match.club.charset)
131
+ tur.req.charset = match_info.club_match.club.charset
132
+ tur.res.charset = match_info.club_match.club.charset
133
+ else
134
+ tur.req.charset = BayServer.harbor.charset
135
+ tur.res.charset = BayServer.harbor.charset
136
+ end
137
+
138
+ tur.req.path_info = match_info.club_match.path_info
139
+ if StringUtil.set?(tur.req.path_info) && match_info.club_match.club.decode_path_info
140
+ tur.req.path_info = CGI.unescape(tur.req.path_info, Encoding::ASCII_8BIT)
141
+ end
142
+
143
+ if match_info.rewritten_uri
144
+ tur.req.rewritten_uri = match_info.rewritten_uri # URI is rewritten
145
+ end
146
+
147
+ clb = match_info.club_match.club
148
+ tur.town = match_info.town
149
+ tur.club = clb
150
+ clb.arrive(tur)
151
+ end
152
+ end
153
+
154
+ def log(tur)
155
+ @log_list.each do |dkr|
156
+ begin
157
+ dkr.log(tur)
158
+ rescue => e
159
+ BayLog.error_e(e)
160
+ end
161
+ end
162
+ end
163
+
164
+ private
165
+ def club_maches(club_list, rel_uri, town_name)
166
+
167
+ cmi = ClubMatchInfo.new()
168
+ any_club = nil
169
+
170
+ club_list.each do |clb|
171
+ if clb.file_name == "*" && clb.extension == nil
172
+ # Ignore any match club
173
+ any_club = clb
174
+ break
175
+ end
176
+ end
177
+
178
+ # search for club
179
+ rel_script_name = ""
180
+ catch(:loop) do
181
+ rel_uri.split("/").each do |fname|
182
+ if rel_script_name != ""
183
+ rel_script_name += "/";
184
+ end
185
+ rel_script_name += fname
186
+
187
+ club_list.each do |clb|
188
+ if clb == any_club
189
+ # Ignore any match club
190
+ next
191
+ end
192
+
193
+ if clb.matches(fname)
194
+ cmi.club = clb;
195
+ throw :loop
196
+ end
197
+ end
198
+ end
199
+ end
200
+
201
+ if cmi.club == nil && any_club != nil
202
+ cmi.club = any_club
203
+ end
204
+
205
+ if cmi.club == nil
206
+ return nil
207
+ end
208
+
209
+ if town_name == "/" && rel_script_name == ""
210
+ cmi.script_name = "/"
211
+ cmi.path_info = nil
212
+ else
213
+ cmi.script_name = town_name + rel_script_name
214
+ if rel_script_name.length == rel_uri.length
215
+ cmi.path_info = nil
216
+ else
217
+ cmi.path_info = rel_uri[rel_script_name.length .. -1]
218
+ end
219
+ end
220
+
221
+ return cmi
222
+ end
223
+
224
+ def get_town_and_club(req_uri)
225
+ if req_uri == nil
226
+ raise RuntimeError.new("Req uri is nil")
227
+ end
228
+ mi = MatchInfo.new()
229
+
230
+ uri = req_uri
231
+ pos = uri.index('?')
232
+ if pos != nil
233
+ mi.query_string = uri[pos + 1 .. -1]
234
+ uri = uri[0, pos]
235
+ end
236
+
237
+ @towns.each do |t|
238
+ mtype = t.matches(uri)
239
+ if mtype == Baykit::BayServer::Docker::Town::MATCH_TYPE_NOT_MATCHED
240
+ next
241
+ end
242
+
243
+ # town matched
244
+ mi.town = t
245
+ if mtype == Baykit::BayServer::Docker::Town::MATCH_TYPE_CLOSE
246
+ mi.redirect_uri = uri + "/"
247
+ if mi.query_string != nil
248
+ mi.redirect_uri += mi.query_string
249
+ end
250
+ return mi
251
+ end
252
+
253
+ org_uri = uri
254
+ uri = t.reroute(uri)
255
+ if uri != org_uri
256
+ mi.rewritten_uri = uri
257
+ end
258
+
259
+ rel = uri[t.name.length .. -1]
260
+
261
+ mi.club_match = club_maches(t.clubs, rel, t.name)
262
+ if mi.club_match == nil
263
+ mi.club_match = club_maches(@clubs, rel, t.name)
264
+ end
265
+
266
+ if mi.club_match == nil
267
+ # check index file
268
+ if uri.end_with?("/") && !StringUtil.empty?(t.welcome)
269
+
270
+ index_uri = uri + t.welcome
271
+ rel_uri = rel + t.welcome
272
+ index_location = File.join(t.location, rel_uri)
273
+ if File.file?(index_location)
274
+ if mi.query_string != nil
275
+ index_uri += "?" + mi.query_string
276
+ end
277
+
278
+ m2 = get_town_and_club(index_uri)
279
+ if m2 != nil
280
+ # matched
281
+ m2.rewritten_uri = index_uri
282
+ return m2
283
+ end
284
+ end
285
+ end
286
+
287
+ # default club matches
288
+ mi.club_match = ClubMatchInfo.new()
289
+ mi.club_match.club = @default_club
290
+ mi.club_match.script_name = nil
291
+ mi.club_match.path_info = nil
292
+ end
293
+ return mi
294
+ end
295
+
296
+ return nil
297
+ end
298
+
299
+ end
300
+ end
301
+ end
302
+ end
303
+ end
@@ -0,0 +1,226 @@
1
+ require 'baykit/bayserver/bcf/package'
2
+ require 'baykit/bayserver/docker/harbor'
3
+ require 'baykit/bayserver/docker/base/docker_base'
4
+ require 'baykit/bayserver/constants'
5
+ require 'baykit/bayserver/config_exception'
6
+
7
+ require 'baykit/bayserver/util/groups'
8
+ require 'baykit/bayserver/util/sys_util'
9
+
10
+
11
+ module Baykit
12
+ module BayServer
13
+ module Docker
14
+ module BuiltIn
15
+
16
+ class BuiltInHarborDocker < Baykit::BayServer::Docker::Base::DockerBase
17
+ include Baykit::BayServer::Docker::Harbor # implements
18
+
19
+ include Baykit::BayServer
20
+ include Baykit::BayServer::Bcf
21
+ include Baykit::BayServer::Util
22
+ include Baykit::BayServer::Constants
23
+
24
+ DEFAULT_MAX_SHIPS = 256
25
+ DEFAULT_SHIP_AGENTS = 0
26
+ DEFAULT_TRAIN_RUNNERS = 8
27
+ DEFAULT_TAXI_RUNNERS = 8
28
+ DEFAULT_WAIT_TIMEOUT_SEC = 120
29
+ DEFAULT_KEEP_TIMEOUT_SEC = 20
30
+ DEFAULT_TOUR_BUFFER_SIZE = 1024 * 1024; # 1M
31
+ DEFAULT_TRACE_HEADER = false
32
+ DEFAULT_CHARSET = "UTF-8"
33
+ DEFAULT_CONTROL_PORT = -1
34
+ DEFAULT_MULTI_CORE = true
35
+ DEFAULT_GZIP_COMP = false
36
+ DEFAULT_FILE_SEND_METHOD = FILE_SEND_METHOD_TAXI
37
+ DEFAULT_PID_FILE = "bayserver.pid"
38
+
39
+ # Default charset
40
+ attr :charset
41
+
42
+ # Default locale
43
+ attr :locale
44
+
45
+ # Number of grand agents
46
+ attr :grand_agents
47
+
48
+ # Number of train runners
49
+ attr :train_runners
50
+
51
+ # Number of taxi runners
52
+ attr :taxi_runners
53
+
54
+ # Max count of watercraft
55
+ attr :max_ships
56
+
57
+ # Socket timeout in seconds
58
+ attr :socket_timeout_sec
59
+
60
+ # Keep-Alive timeout in seconds
61
+ attr :keep_timeout_sec
62
+
63
+ # Internal buffer size of Tour
64
+ attr :tour_buffer_size
65
+
66
+ # Trace req/res header flag
67
+ attr :trace_header
68
+
69
+ # Trouble docker
70
+ attr :trouble
71
+
72
+ # Auth groups
73
+ attr :groups
74
+
75
+ # File name to redirect stdout/stderr
76
+ attr :redirect_file
77
+
78
+ # Gzip compression flag
79
+ attr :gzip_comp
80
+
81
+ # Port number of signal agent
82
+ attr :control_port
83
+
84
+ # Multi core flag
85
+ attr :multi_core
86
+
87
+ # Method to send file
88
+ attr :file_send_method
89
+
90
+ # PID file name
91
+ attr :pid_file
92
+
93
+
94
+ def initialize
95
+ @grand_agents = DEFAULT_SHIP_AGENTS
96
+ @train_runners = DEFAULT_TRAIN_RUNNERS
97
+ @taxi_runners = DEFAULT_TAXI_RUNNERS
98
+ @max_ships = DEFAULT_MAX_SHIPS
99
+ @groups = Groups.new
100
+ @socket_timeout_sec = DEFAULT_WAIT_TIMEOUT_SEC
101
+ @keep_timeout_sec = DEFAULT_KEEP_TIMEOUT_SEC
102
+ @tour_buffer_size = DEFAULT_TOUR_BUFFER_SIZE
103
+ @trace_header = DEFAULT_TRACE_HEADER
104
+ @charset = DEFAULT_CHARSET
105
+ @control_port = DEFAULT_CONTROL_PORT
106
+ @multi_core = DEFAULT_MULTI_CORE
107
+ @gzip_comp = DEFAULT_GZIP_COMP
108
+ @file_send_method = DEFAULT_FILE_SEND_METHOD
109
+ @pid_file = DEFAULT_PID_FILE
110
+ end
111
+
112
+ ######################
113
+ # Implements Docker
114
+ ######################
115
+ def init(bcf, parent)
116
+ super
117
+
118
+ if @grand_agents <= 0
119
+ @grand_agents = SysUtil.processor_count()
120
+ end
121
+
122
+ if @train_runners <= 0
123
+ @train_runners = 1
124
+ end
125
+
126
+ if @max_ships < DEFAULT_MAX_SHIPS
127
+ @max_ships = DEFAULT_MAX_SHIPS
128
+ BayLog.warn(BayMessage.get(:CFG_MAX_SHIPS_IS_TO_SMALL, @max_ships))
129
+ end
130
+
131
+ if @file_send_method == FILE_SEND_METHOD_SELECT and !SysUtil.support_select_file()
132
+ BayLog.warn(BayMessage.get(:CFG_FILE_SEND_METHOD_SELECT_NOT_SUPPORTED))
133
+ @file_send_method = FILE_SEND_METHOD_TAXI
134
+ end
135
+
136
+ if @file_send_method == FILE_SEND_METHOD_SPIN and !SysUtil.support_nonblock_file_read()
137
+ BayLog.warn(BayMessage.get(:CFG_FILE_SEND_METHOD_SPIN_NOT_SUPPORTED))
138
+ @file_send_method = FILE_SEND_METHOD_TAXI
139
+ end
140
+
141
+
142
+ end
143
+
144
+ #######################
145
+ # Implements DockerBase
146
+ #######################
147
+
148
+ def init_docker(dkr)
149
+ if dkr.instance_of?(Trouble)
150
+ @trouble = dkr
151
+ else
152
+ return super
153
+ end
154
+ return true
155
+ end
156
+
157
+ def init_key_val(kv)
158
+ case kv.key.downcase
159
+ when "loglevel"
160
+ BayLog.set_log_level(kv.value)
161
+ when "charset"
162
+ @charset = kv.value
163
+ when "locale"
164
+ @locale = kv.value
165
+ when "groups"
166
+ begin
167
+ fname = BayServer.parse_path(kv.value)
168
+ @groups.init(fname)
169
+ rescue IOError => e
170
+ raise ConfigException.new(kv.file_name, kv.line_no, BayMessage.get(:CFG_FILE_NOT_FOUND, kv.value));
171
+ end
172
+ when "trains"
173
+ @train_runners = Integer(kv.value)
174
+ when "taxis", "taxies"
175
+ @taxi_runners = Integer(kv.value)
176
+ when "grandagents"
177
+ @grand_agents = Integer(kv.value)
178
+ when "maxships"
179
+ @max_ships = Integer(kv.value)
180
+ when "timeout"
181
+ @socket_timeout_sec = Integer(kv.value)
182
+ when "keeptimeout"
183
+ @keep_timeout_sec = Integer(kv.value)
184
+ when "tourbuffersize"
185
+ @tour_buffer_size = StringUtil.parse_size(kv.value)
186
+ when "traceheader"
187
+ @trace_header = StringUtil.parse_bool(kv.value)
188
+ when "redirectfile"
189
+ @redirect_file = kv.value
190
+ when "controlport"
191
+ @control_port = kv.value.to_i
192
+ when "multicore"
193
+ @multi_core = StringUtil.parse_bool(kv.value)
194
+ when "gzipcomp"
195
+ @gzip_comp = StringUtil.parse_bool(kv.value)
196
+ when "sendfilemethod"
197
+ case kv.value.downcase()
198
+ when "select"
199
+ @file_send_method = FILE_SEND_METHOD_SELECT
200
+ when "spin"
201
+ @file_send_method = FILE_SEND_METHOD_SPIN
202
+ when "taxi"
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))
206
+ end
207
+ when "pidfile"
208
+ @pid_file = kv.value
209
+ else
210
+ return false
211
+ end
212
+ true
213
+ end
214
+
215
+ def trace_header?
216
+ @trace_header
217
+ end
218
+
219
+ def multi_core?
220
+ @multi_core
221
+ end
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end