bayserver-core 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/baykit/bayserver/agent/accept_handler.rb +97 -0
- data/lib/baykit/bayserver/agent/channel_listener.rb +35 -0
- data/lib/baykit/bayserver/agent/command_receiver.rb +75 -0
- data/lib/baykit/bayserver/agent/grand_agent.rb +319 -0
- data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +217 -0
- data/lib/baykit/bayserver/agent/next_socket_action.rb +14 -0
- data/lib/baykit/bayserver/agent/non_blocking_handler.rb +433 -0
- data/lib/baykit/bayserver/agent/package.rb +3 -0
- data/lib/baykit/bayserver/agent/signal/signal_agent.rb +165 -0
- data/lib/baykit/bayserver/agent/signal/signal_proxy.rb +18 -0
- data/lib/baykit/bayserver/agent/signal/signal_sender.rb +99 -0
- data/lib/baykit/bayserver/agent/spin_handler.rb +140 -0
- data/lib/baykit/bayserver/agent/transporter/data_listener.rb +38 -0
- data/lib/baykit/bayserver/agent/transporter/package.rb +3 -0
- data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +55 -0
- data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +81 -0
- data/lib/baykit/bayserver/agent/transporter/spin_read_transporter.rb +111 -0
- data/lib/baykit/bayserver/agent/transporter/spin_write_transporter.rb +125 -0
- data/lib/baykit/bayserver/agent/transporter/transporter.rb +466 -0
- data/lib/baykit/bayserver/agent/upgrade_exception.rb +11 -0
- data/lib/baykit/bayserver/bay_dockers.rb +60 -0
- data/lib/baykit/bayserver/bay_exception.rb +12 -0
- data/lib/baykit/bayserver/bay_log.rb +148 -0
- data/lib/baykit/bayserver/bay_message.rb +20 -0
- data/lib/baykit/bayserver/bayserver.rb +529 -0
- data/lib/baykit/bayserver/bcf/bcf_document.rb +44 -0
- data/lib/baykit/bayserver/bcf/bcf_element.rb +30 -0
- data/lib/baykit/bayserver/bcf/bcf_key_val.rb +19 -0
- data/lib/baykit/bayserver/bcf/bcf_object.rb +15 -0
- data/lib/baykit/bayserver/bcf/bcf_parser.rb +180 -0
- data/lib/baykit/bayserver/bcf/package.rb +6 -0
- data/lib/baykit/bayserver/bcf/parse_exception.rb +15 -0
- data/lib/baykit/bayserver/config_exception.rb +25 -0
- data/lib/baykit/bayserver/constants.rb +8 -0
- data/lib/baykit/bayserver/docker/base/club_base.rb +117 -0
- data/lib/baykit/bayserver/docker/base/docker_base.rb +66 -0
- data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +89 -0
- data/lib/baykit/bayserver/docker/base/inbound_handler.rb +42 -0
- data/lib/baykit/bayserver/docker/base/inbound_ship.rb +341 -0
- data/lib/baykit/bayserver/docker/base/inbound_ship_store.rb +65 -0
- data/lib/baykit/bayserver/docker/base/port_base.rb +228 -0
- data/lib/baykit/bayserver/docker/base/reroute_base.rb +28 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_city_docker.rb +303 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +226 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +302 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +242 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +157 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_town_docker.rb +117 -0
- data/lib/baykit/bayserver/docker/built_in/built_in_trouble_docker.rb +57 -0
- data/lib/baykit/bayserver/docker/built_in/log_boat.rb +71 -0
- data/lib/baykit/bayserver/docker/built_in/log_item.rb +18 -0
- data/lib/baykit/bayserver/docker/built_in/log_item_factory.rb +18 -0
- data/lib/baykit/bayserver/docker/built_in/log_items.rb +287 -0
- data/lib/baykit/bayserver/docker/built_in/write_file_taxi.rb +101 -0
- data/lib/baykit/bayserver/docker/city.rb +22 -0
- data/lib/baykit/bayserver/docker/club.rb +45 -0
- data/lib/baykit/bayserver/docker/docker.rb +8 -0
- data/lib/baykit/bayserver/docker/harbor.rb +34 -0
- data/lib/baykit/bayserver/docker/log.rb +17 -0
- data/lib/baykit/bayserver/docker/package.rb +12 -0
- data/lib/baykit/bayserver/docker/permission.rb +18 -0
- data/lib/baykit/bayserver/docker/port.rb +39 -0
- data/lib/baykit/bayserver/docker/reroute.rb +17 -0
- data/lib/baykit/bayserver/docker/secure.rb +22 -0
- data/lib/baykit/bayserver/docker/send_file/directory_train.rb +123 -0
- data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +43 -0
- data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +71 -0
- data/lib/baykit/bayserver/docker/town.rb +30 -0
- data/lib/baykit/bayserver/docker/trouble.rb +17 -0
- data/lib/baykit/bayserver/docker/warp/package.rb +4 -0
- data/lib/baykit/bayserver/docker/warp/warp_data.rb +84 -0
- data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +112 -0
- data/lib/baykit/bayserver/docker/warp/warp_docker.rb +273 -0
- data/lib/baykit/bayserver/docker/warp/warp_handler.rb +38 -0
- data/lib/baykit/bayserver/docker/warp/warp_ship.rb +166 -0
- data/lib/baykit/bayserver/docker/warp/warp_ship_store.rb +111 -0
- data/lib/baykit/bayserver/http_exception.rb +33 -0
- data/lib/baykit/bayserver/mem_usage.rb +104 -0
- data/lib/baykit/bayserver/protocol/command.rb +21 -0
- data/lib/baykit/bayserver/protocol/command_handler.rb +9 -0
- data/lib/baykit/bayserver/protocol/command_packer.rb +49 -0
- data/lib/baykit/bayserver/protocol/command_unpacker.rb +13 -0
- data/lib/baykit/bayserver/protocol/package.rb +15 -0
- data/lib/baykit/bayserver/protocol/packet.rb +63 -0
- data/lib/baykit/bayserver/protocol/packet_factory.rb +13 -0
- data/lib/baykit/bayserver/protocol/packet_packer.rb +30 -0
- data/lib/baykit/bayserver/protocol/packet_part_accessor.rb +122 -0
- data/lib/baykit/bayserver/protocol/packet_store.rb +139 -0
- data/lib/baykit/bayserver/protocol/packet_unpacker.rb +17 -0
- data/lib/baykit/bayserver/protocol/protocol_exception.rb +17 -0
- data/lib/baykit/bayserver/protocol/protocol_handler.rb +64 -0
- data/lib/baykit/bayserver/protocol/protocol_handler_factory.rb +14 -0
- data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +109 -0
- data/lib/baykit/bayserver/sink.rb +22 -0
- data/lib/baykit/bayserver/taxi/taxi.rb +38 -0
- data/lib/baykit/bayserver/taxi/taxi_runner.rb +31 -0
- data/lib/baykit/bayserver/tours/content_consume_listener.rb +20 -0
- data/lib/baykit/bayserver/tours/package.rb +4 -0
- data/lib/baykit/bayserver/tours/read_file_taxi.rb +102 -0
- data/lib/baykit/bayserver/tours/req_content_handler.rb +37 -0
- data/lib/baykit/bayserver/tours/send_file_train.rb +65 -0
- data/lib/baykit/bayserver/tours/send_file_yacht.rb +93 -0
- data/lib/baykit/bayserver/tours/tour.rb +195 -0
- data/lib/baykit/bayserver/tours/tour_req.rb +251 -0
- data/lib/baykit/bayserver/tours/tour_res.rb +400 -0
- data/lib/baykit/bayserver/tours/tour_store.rb +121 -0
- data/lib/baykit/bayserver/train/train.rb +54 -0
- data/lib/baykit/bayserver/train/train_runner.rb +32 -0
- data/lib/baykit/bayserver/util/byte_array.rb +54 -0
- data/lib/baykit/bayserver/util/byte_buffer.rb +13 -0
- data/lib/baykit/bayserver/util/cgi_util.rb +165 -0
- data/lib/baykit/bayserver/util/char_util.rb +22 -0
- data/lib/baykit/bayserver/util/cities.rb +45 -0
- data/lib/baykit/bayserver/util/class_util.rb +17 -0
- data/lib/baykit/bayserver/util/counter.rb +23 -0
- data/lib/baykit/bayserver/util/data_consume_listener.rb +13 -0
- data/lib/baykit/bayserver/util/executor_service.rb +81 -0
- data/lib/baykit/bayserver/util/groups.rb +110 -0
- data/lib/baykit/bayserver/util/gzip_compressor.rb +55 -0
- data/lib/baykit/bayserver/util/headers.rb +194 -0
- data/lib/baykit/bayserver/util/host_matcher.rb +48 -0
- data/lib/baykit/bayserver/util/http_status.rb +60 -0
- data/lib/baykit/bayserver/util/http_util.rb +157 -0
- data/lib/baykit/bayserver/util/io_util.rb +32 -0
- data/lib/baykit/bayserver/util/ip_matcher.rb +67 -0
- data/lib/baykit/bayserver/util/key_val.rb +15 -0
- data/lib/baykit/bayserver/util/key_val_list_parser.rb +53 -0
- data/lib/baykit/bayserver/util/locale.rb +30 -0
- data/lib/baykit/bayserver/util/md5_password.rb +24 -0
- data/lib/baykit/bayserver/util/message.rb +56 -0
- data/lib/baykit/bayserver/util/mimes.rb +27 -0
- data/lib/baykit/bayserver/util/object_factory.rb +13 -0
- data/lib/baykit/bayserver/util/object_store.rb +74 -0
- data/lib/baykit/bayserver/util/postman.rb +35 -0
- data/lib/baykit/bayserver/util/reusable.rb +13 -0
- data/lib/baykit/bayserver/util/selector.rb +141 -0
- data/lib/baykit/bayserver/util/simple_buffer.rb +53 -0
- data/lib/baykit/bayserver/util/simple_inspect.rb +12 -0
- data/lib/baykit/bayserver/util/string_util.rb +73 -0
- data/lib/baykit/bayserver/util/sys_util.rb +138 -0
- data/lib/baykit/bayserver/util/url_decoder.rb +42 -0
- data/lib/baykit/bayserver/util/url_encoder.rb +19 -0
- data/lib/baykit/bayserver/util/valve.rb +15 -0
- data/lib/baykit/bayserver/version.rb +7 -0
- data/lib/baykit/bayserver/watercraft/boat.rb +43 -0
- data/lib/baykit/bayserver/watercraft/ship.rb +104 -0
- data/lib/baykit/bayserver/watercraft/yacht.rb +42 -0
- metadata +189 -0
@@ -0,0 +1,165 @@
|
|
1
|
+
require 'baykit/bayserver/util/string_util'
|
2
|
+
|
3
|
+
module Baykit
|
4
|
+
module BayServer
|
5
|
+
module Util
|
6
|
+
class CgiUtil
|
7
|
+
|
8
|
+
REQUEST_METHOD = "REQUEST_METHOD"
|
9
|
+
REQUEST_URI = "REQUEST_URI"
|
10
|
+
SERVER_PROTOCOL = "SERVER_PROTOCOL"
|
11
|
+
GATEWAY_INTERFACE = "GATEWAY_INTERFACE"
|
12
|
+
SERVER_NAME = "SERVER_NAME"
|
13
|
+
SERVER_PORT = "SERVER_PORT"
|
14
|
+
QUERY_STRING = "QUERY_STRING"
|
15
|
+
SCRIPT_NAME = "SCRIPT_NAME"
|
16
|
+
SCRIPT_FILENAME = "SCRIPT_FILENAME"
|
17
|
+
PATH_TRANSLATED = "PATH_TRANSLATED"
|
18
|
+
PATH_INFO = "PATH_INFO"
|
19
|
+
CONTENT_TYPE = "CONTENT_TYPE"
|
20
|
+
CONTENT_LENGTH = "CONTENT_LENGTH"
|
21
|
+
REMOTE_ADDR = "REMOTE_ADDR"
|
22
|
+
REMOTE_PORT = "REMOTE_PORT"
|
23
|
+
REMOTE_USER = "REMOTE_USER"
|
24
|
+
HTTP_ACCEPT = "HTTP_ACCEPT"
|
25
|
+
HTTP_COOKIE = "HTTP_COOKIE"
|
26
|
+
HTTP_HOST = "HTTP_HOST"
|
27
|
+
HTTP_USER_AGENT = "HTTP_USER_AGENT"
|
28
|
+
HTTP_ACCEPT_ENCODING = "HTTP_ACCEPT_ENCODING"
|
29
|
+
HTTP_ACCEPT_LANGUAGE = "HTTP_ACCEPT_LANGUAGE"
|
30
|
+
HTTP_CONNECTION = "HTTP_CONNECTION"
|
31
|
+
HTTP_UPGRADE_INSECURE_REQUESTS = "HTTP_UPGRADE_INSECURE_REQUESTS"
|
32
|
+
HTTPS = "HTTPS"
|
33
|
+
PATH = "PATH"
|
34
|
+
SERVER_SIGNATURE = "SERVER_SIGNATURE"
|
35
|
+
SERVER_SOFTWARE = "SERVER_SOFTWARE"
|
36
|
+
SERVER_ADDR = "SERVER_ADDR"
|
37
|
+
DOCUMENT_ROOT = "DOCUMENT_ROOT"
|
38
|
+
REQUEST_SCHEME = "REQUEST_SCHEME"
|
39
|
+
CONTEXT_PREFIX = "CONTEXT_PREFIX"
|
40
|
+
CONTEXT_DOCUMENT_ROOT = "CONTEXT_DOCUMENT_ROOT"
|
41
|
+
SERVER_ADMIN = "SERVER_ADMIN"
|
42
|
+
REQUEST_TIME_FLOAT = "REQUEST_TIME_FLOAT"
|
43
|
+
REQUEST_TIME = "REQUEST_TIME"
|
44
|
+
UNIQUE_ID = "UNIQUE_ID"
|
45
|
+
X_FORWARDED_HOST = "X_FORWARDED_HOST"
|
46
|
+
X_FORWARDED_FOR = "X_FORWARDED_FOR"
|
47
|
+
X_FORWARDED_PROTO = "X_FORWARDED_PROTO"
|
48
|
+
X_FORWARDED_PORT = "X_FORWARDED_PORT"
|
49
|
+
|
50
|
+
def self.get_env_hash(path, doc_root, script_base, tur)
|
51
|
+
map = {}
|
52
|
+
get_env(path, doc_root, script_base, tur) do |name, value|
|
53
|
+
map[name] = value
|
54
|
+
end
|
55
|
+
map
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
def self.get_env(path, doc_root, script_base, tur, &block)
|
60
|
+
|
61
|
+
req_headers = tur.req.headers
|
62
|
+
|
63
|
+
ctype = req_headers.content_type
|
64
|
+
if StringUtil.set? ctype
|
65
|
+
pos = ctype.index("charset=")
|
66
|
+
if pos != nil && pos >= 0
|
67
|
+
tur.req.charset = ctype[pos+8 .. -1].strip
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
add_env(REQUEST_METHOD, tur.req.method, &block)
|
72
|
+
add_env(REQUEST_URI, tur.req.uri, &block)
|
73
|
+
add_env(SERVER_PROTOCOL, tur.req.protocol, &block)
|
74
|
+
add_env(GATEWAY_INTERFACE, "CGI/1.1", &block)
|
75
|
+
|
76
|
+
add_env(SERVER_NAME, tur.req.req_host, &block)
|
77
|
+
add_env(SERVER_ADDR, tur.req.server_address, &block)
|
78
|
+
if tur.req.req_port >= 0
|
79
|
+
add_env(SERVER_PORT, tur.req.req_port, &block)
|
80
|
+
end
|
81
|
+
|
82
|
+
add_env(SERVER_SOFTWARE, BayServer.get_software_name, &block)
|
83
|
+
add_env(CONTEXT_DOCUMENT_ROOT, doc_root, &block)
|
84
|
+
|
85
|
+
tur.req.headers.names.each do |name|
|
86
|
+
newval = nil
|
87
|
+
tur.req.headers.values(name).each do |value|
|
88
|
+
if newval == nil
|
89
|
+
newval = value
|
90
|
+
else
|
91
|
+
newval = newval + "; " + value
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
name = name.upcase.tr('-', '_')
|
96
|
+
if name.start_with?("X_FORWARDED_")
|
97
|
+
add_env(name, newval, &block)
|
98
|
+
else
|
99
|
+
case name
|
100
|
+
when CONTENT_TYPE, CONTENT_LENGTH
|
101
|
+
add_env(name, newval, &block)
|
102
|
+
else
|
103
|
+
add_env("HTTP_" + name, newval, &block)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
add_env(REMOTE_ADDR, tur.req.remote_address, &block)
|
109
|
+
add_env(REMOTE_PORT, tur.req.remote_port, &block)
|
110
|
+
#add_env(REMOTE_USER, "unknown")
|
111
|
+
|
112
|
+
add_env(REQUEST_SCHEME, tur.is_secure ? "https": "http", &block)
|
113
|
+
tmp_secure = tur.is_secure
|
114
|
+
fproto = tur.req.headers.get(Headers::X_FORWARDED_PROTO)
|
115
|
+
if fproto != nil
|
116
|
+
tmp_secure = fproto.casecmp?("https")
|
117
|
+
end
|
118
|
+
if tmp_secure
|
119
|
+
add_env(HTTPS, "on", &block)
|
120
|
+
end
|
121
|
+
|
122
|
+
add_env(QUERY_STRING, tur.req.query_string, &block)
|
123
|
+
add_env(SCRIPT_NAME, tur.req.script_name, &block)
|
124
|
+
add_env(UNIQUE_ID, DateTime.now.to_s, &block)
|
125
|
+
|
126
|
+
if tur.req.path_info == nil
|
127
|
+
add_env(PATH_INFO, "", &block)
|
128
|
+
else
|
129
|
+
add_env(PATH_INFO, tur.req.path_info, &block)
|
130
|
+
|
131
|
+
locpath = doc_root
|
132
|
+
if locpath.end_with? "/"
|
133
|
+
locpath = locpath[0 .. -2]
|
134
|
+
end
|
135
|
+
|
136
|
+
path_translated = locpath + tur.req.path_info
|
137
|
+
add_env(PATH_TRANSLATED, path_translated, &block)
|
138
|
+
end
|
139
|
+
|
140
|
+
if !script_base.end_with?("/")
|
141
|
+
script_base = script_base + "/"
|
142
|
+
end
|
143
|
+
|
144
|
+
add_env(SCRIPT_FILENAME, "#{script_base}#{tur.req.script_name[path.length .. -1]}", &block)
|
145
|
+
add_env(PATH, ENV["PATH"], &block)
|
146
|
+
end
|
147
|
+
|
148
|
+
private
|
149
|
+
def self.add_env(key, value)
|
150
|
+
if value == nil
|
151
|
+
value = ""
|
152
|
+
end
|
153
|
+
|
154
|
+
# Handles null terminated string
|
155
|
+
value = value.to_s.split("\0")[0]
|
156
|
+
if value == nil
|
157
|
+
value = ""
|
158
|
+
end
|
159
|
+
|
160
|
+
yield(key, value.to_s)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Baykit
|
2
|
+
module BayServer
|
3
|
+
module Util
|
4
|
+
class CharUtil
|
5
|
+
|
6
|
+
CR = "\r"
|
7
|
+
LF = "\n"
|
8
|
+
CRLF = "\r\n"
|
9
|
+
|
10
|
+
CR_BYTE = CR.codepoints[0]
|
11
|
+
LF_BYTE = LF.codepoints[0]
|
12
|
+
|
13
|
+
|
14
|
+
def CharUtil.is_ascii(c)
|
15
|
+
cp = c.codepoints[0]
|
16
|
+
cp >= 32 && cp <= 126
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Baykit
|
2
|
+
module BayServer
|
3
|
+
module Util
|
4
|
+
class Cities
|
5
|
+
|
6
|
+
attr :any_city
|
7
|
+
attr :cities
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@any_city = nil
|
11
|
+
@cities = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def add(c)
|
15
|
+
if c.name == "*"
|
16
|
+
@any_city = c
|
17
|
+
else
|
18
|
+
@cities << c
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
def find_city(name)
|
24
|
+
# Check exact match
|
25
|
+
@cities.each do |city|
|
26
|
+
if city.name == name
|
27
|
+
return city
|
28
|
+
end
|
29
|
+
end
|
30
|
+
return @any_city
|
31
|
+
end
|
32
|
+
|
33
|
+
def cities()
|
34
|
+
ret = @cities.dup
|
35
|
+
if @any_city != nil
|
36
|
+
ret << @any_city
|
37
|
+
end
|
38
|
+
return ret
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Baykit
|
2
|
+
module BayServer
|
3
|
+
module Util
|
4
|
+
class Counter
|
5
|
+
attr :counter
|
6
|
+
attr :mutex
|
7
|
+
|
8
|
+
def initialize(init=1)
|
9
|
+
@counter = init
|
10
|
+
@mutex = Mutex.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def next
|
14
|
+
@mutex.synchronize do
|
15
|
+
c = @counter
|
16
|
+
@counter += 1
|
17
|
+
c
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# ExecutorService
|
4
|
+
# Implementation of thread pool
|
5
|
+
#
|
6
|
+
module Baykit
|
7
|
+
module BayServer
|
8
|
+
module Util
|
9
|
+
class ExecutorService
|
10
|
+
|
11
|
+
class Executor
|
12
|
+
|
13
|
+
attr :que
|
14
|
+
attr :id
|
15
|
+
attr :name
|
16
|
+
|
17
|
+
def initialize(que, id, name)
|
18
|
+
@que = que
|
19
|
+
@id = id
|
20
|
+
@name = name
|
21
|
+
end
|
22
|
+
|
23
|
+
def run
|
24
|
+
while true
|
25
|
+
tsk = @que.deq
|
26
|
+
#BayLog.debug("%s Start task on: %s", tsk, @name)
|
27
|
+
tsk.run
|
28
|
+
#BayLog.debug("%s End task on: %s", tsk, @name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_s
|
33
|
+
@name
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
MAX_LEN_PER_EXECUTOR = 32
|
38
|
+
|
39
|
+
attr :que
|
40
|
+
attr :count
|
41
|
+
attr :max_queue_len
|
42
|
+
attr :name
|
43
|
+
|
44
|
+
def initialize(name, count)
|
45
|
+
@que = Thread::Queue.new
|
46
|
+
@count = count
|
47
|
+
@max_queue_len = MAX_LEN_PER_EXECUTOR * count
|
48
|
+
@name = name
|
49
|
+
|
50
|
+
count.times do |i|
|
51
|
+
started = false
|
52
|
+
Thread.new do
|
53
|
+
started = true
|
54
|
+
id = i + 1
|
55
|
+
th_name = "Executor[#{name}]##{id}"
|
56
|
+
Thread.current.name = th_name
|
57
|
+
e = Executor.new @que, id, th_name
|
58
|
+
e.run
|
59
|
+
end
|
60
|
+
while !started
|
61
|
+
sleep(0.01)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_s()
|
67
|
+
return "ExecutorService[#{@name}]"
|
68
|
+
end
|
69
|
+
|
70
|
+
# post task
|
71
|
+
def submit(tsk)
|
72
|
+
BayLog.debug("%s Submit: task=%s (qlen=%d/%d)", self, tsk, @que.length, @max_queue_len)
|
73
|
+
if @que.length > @max_queue_len
|
74
|
+
raise IOError("Task queue is full (>_<)")
|
75
|
+
end
|
76
|
+
@que.enq(tsk)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'baykit/bayserver/util/md5_password'
|
2
|
+
require 'baykit/bayserver/bcf/package'
|
3
|
+
|
4
|
+
module Baykit
|
5
|
+
module BayServer
|
6
|
+
module Util
|
7
|
+
class Groups
|
8
|
+
include Baykit::BayServer::Bcf
|
9
|
+
|
10
|
+
class Member
|
11
|
+
attr :name
|
12
|
+
attr :digest
|
13
|
+
|
14
|
+
def initialize(name, digest)
|
15
|
+
@name = name
|
16
|
+
@digest = digest
|
17
|
+
end
|
18
|
+
|
19
|
+
def validate(password)
|
20
|
+
if password == nil
|
21
|
+
return false
|
22
|
+
end
|
23
|
+
|
24
|
+
dig = MD5Password.encode(password)
|
25
|
+
return dig == @digest
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Group
|
30
|
+
attr :name
|
31
|
+
attr :members
|
32
|
+
attr :groups
|
33
|
+
|
34
|
+
def initialize(groups, name)
|
35
|
+
@name = name
|
36
|
+
@groups = groups
|
37
|
+
@members = []
|
38
|
+
end
|
39
|
+
|
40
|
+
def add(mem)
|
41
|
+
@members << mem
|
42
|
+
end
|
43
|
+
|
44
|
+
def validate(mem_name, pass)
|
45
|
+
if !@members.include?(mem_name)
|
46
|
+
return false
|
47
|
+
end
|
48
|
+
|
49
|
+
m = @groups.all_members[mem_name]
|
50
|
+
if m == nil
|
51
|
+
return false
|
52
|
+
end
|
53
|
+
|
54
|
+
return m.validate(pass)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
attr :all_groups
|
59
|
+
attr :all_members
|
60
|
+
|
61
|
+
def initialize
|
62
|
+
@all_groups = {}
|
63
|
+
@all_members = {}
|
64
|
+
end
|
65
|
+
|
66
|
+
def init(bcf)
|
67
|
+
p = BcfParser.new
|
68
|
+
doc = p.parse(bcf)
|
69
|
+
|
70
|
+
doc.content_list.each do |obj|
|
71
|
+
if obj.instance_of? BcfElement
|
72
|
+
if obj.name.casecmp?("group")
|
73
|
+
init_groups(obj)
|
74
|
+
elsif obj.name.casecmp?("member")
|
75
|
+
init_members(obj)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
def get_group(name)
|
83
|
+
return @all_groups[name]
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
private
|
88
|
+
def init_groups(elm)
|
89
|
+
elm.content_list.each do |obj|
|
90
|
+
if obj.instance_of? BcfKeyVal
|
91
|
+
g = Group.new(self, obj.key)
|
92
|
+
@all_groups[obj.key] = g
|
93
|
+
|
94
|
+
obj.value.split(" ").each do |mem_name|
|
95
|
+
g.add(mem_name)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def init_members(elm)
|
102
|
+
elm.content_list.each do |obj|
|
103
|
+
m = Member.new(obj.key, obj.value)
|
104
|
+
@all_members[m.name] = m
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'zlib'
|
2
|
+
|
3
|
+
module Baykit
|
4
|
+
module BayServer
|
5
|
+
module Util
|
6
|
+
class GzipCompressor
|
7
|
+
|
8
|
+
class CompressListener
|
9
|
+
# interface
|
10
|
+
# def on_compressed(*str)
|
11
|
+
end
|
12
|
+
|
13
|
+
class CallbackWriter
|
14
|
+
|
15
|
+
attr :gzip_comp
|
16
|
+
attr_accessor :done_listener
|
17
|
+
|
18
|
+
def initialize(gzip_comp)
|
19
|
+
@gzip_comp = gzip_comp
|
20
|
+
@done_listener = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def write(*str)
|
24
|
+
# proc
|
25
|
+
str.each do |item|
|
26
|
+
@gzip_comp.listener.call(item, 0, item.length, &@done_listener)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
attr :listener
|
32
|
+
attr :gout
|
33
|
+
attr :cb_writer
|
34
|
+
|
35
|
+
def initialize(comp_lis)
|
36
|
+
@listener = comp_lis
|
37
|
+
@cb_writer = CallbackWriter.new(self)
|
38
|
+
@gout = Zlib::GzipWriter.new(@cb_writer)
|
39
|
+
end
|
40
|
+
|
41
|
+
def compress(buf, ofs, len, &lis)
|
42
|
+
@cb_writer.done_listener = lis
|
43
|
+
@gout.write(buf[ofs .. ofs + len - 1])
|
44
|
+
@gout.flush()
|
45
|
+
end
|
46
|
+
|
47
|
+
def finish()
|
48
|
+
#@gout.finish()
|
49
|
+
@gout.close()
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|