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.
- 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,117 @@
|
|
|
1
|
+
require 'baykit/bayserver/docker/club'
|
|
2
|
+
require 'baykit/bayserver/docker/town'
|
|
3
|
+
require 'baykit/bayserver/docker/reroute'
|
|
4
|
+
require 'baykit/bayserver/docker/permission'
|
|
5
|
+
require 'baykit/bayserver/docker/base/docker_base'
|
|
6
|
+
|
|
7
|
+
module Baykit
|
|
8
|
+
module BayServer
|
|
9
|
+
module Docker
|
|
10
|
+
module BuiltIn
|
|
11
|
+
class BuiltInTownDocker < Baykit::BayServer::Docker::Base::DockerBase
|
|
12
|
+
include Baykit::BayServer::Docker::Town #implements
|
|
13
|
+
|
|
14
|
+
include Baykit::BayServer::Docker
|
|
15
|
+
include Baykit::BayServer::Bcf
|
|
16
|
+
|
|
17
|
+
attr :name
|
|
18
|
+
attr :location
|
|
19
|
+
attr :welcome
|
|
20
|
+
attr :clubs
|
|
21
|
+
attr :permission_list
|
|
22
|
+
attr :city
|
|
23
|
+
attr :reroute_list
|
|
24
|
+
|
|
25
|
+
def initialize
|
|
26
|
+
@name = nil
|
|
27
|
+
@location = nil
|
|
28
|
+
@welcome = nil
|
|
29
|
+
@clubs = []
|
|
30
|
+
@permission_list = []
|
|
31
|
+
@city = nil
|
|
32
|
+
@reroute_list = []
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
######################################################
|
|
36
|
+
# Implements Docker
|
|
37
|
+
######################################################
|
|
38
|
+
|
|
39
|
+
def init(elm, parent)
|
|
40
|
+
arg = elm.arg
|
|
41
|
+
if !arg.start_with? "/"
|
|
42
|
+
arg = "/" + arg
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
@name = arg
|
|
46
|
+
if !@name.end_with? "/"
|
|
47
|
+
@name = @name + "/"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
@city = parent
|
|
51
|
+
super
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def init_docker(dkr)
|
|
55
|
+
if dkr.kind_of?(Baykit::BayServer::Docker::Club)
|
|
56
|
+
@clubs.append(dkr)
|
|
57
|
+
elsif dkr.kind_of?(Baykit::BayServer::Docker::Permission)
|
|
58
|
+
@permission_list.append(dkr)
|
|
59
|
+
elsif dkr.kind_of?(Baykit::BayServer::Docker::Reroute)
|
|
60
|
+
@reroute_list.append(dkr)
|
|
61
|
+
else
|
|
62
|
+
return super
|
|
63
|
+
end
|
|
64
|
+
return true
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def init_key_val(kv)
|
|
68
|
+
case kv.key.downcase
|
|
69
|
+
when "location"
|
|
70
|
+
@location = kv.value
|
|
71
|
+
if !File.absolute_path?(@location)
|
|
72
|
+
@location = BayServer.get_location(@location)
|
|
73
|
+
if !File.directory?(@location)
|
|
74
|
+
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage.get(:CFG_INVALID_LOCATION, kv.value))
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
when "index"
|
|
78
|
+
@welcome = kv.value
|
|
79
|
+
when "welcome"
|
|
80
|
+
@welcome = kv.value
|
|
81
|
+
else
|
|
82
|
+
return super
|
|
83
|
+
end
|
|
84
|
+
return true;
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
######################################################
|
|
88
|
+
# Implements Town
|
|
89
|
+
######################################################
|
|
90
|
+
|
|
91
|
+
def reroute(uri)
|
|
92
|
+
@reroute_list.each do |r|
|
|
93
|
+
uri = r.reroute(self, uri)
|
|
94
|
+
end
|
|
95
|
+
return uri
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def matches(uri)
|
|
99
|
+
if uri.start_with?(@name)
|
|
100
|
+
return MATCH_TYPE_MATCHED
|
|
101
|
+
elsif uri + "/" == name
|
|
102
|
+
return MATCH_TYPE_CLOSE
|
|
103
|
+
else
|
|
104
|
+
return MATCH_TYPE_NOT_MATCHED
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def tour_admitted(tur)
|
|
109
|
+
@permission_list.each do |p|
|
|
110
|
+
p.tour_admitted(tur)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'ipaddr'
|
|
2
|
+
|
|
3
|
+
require 'baykit/bayserver/bcf/package'
|
|
4
|
+
require 'baykit/bayserver/docker/trouble'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Baykit
|
|
8
|
+
module BayServer
|
|
9
|
+
module Docker
|
|
10
|
+
module BuiltIn
|
|
11
|
+
class BuiltInTroubleDocker < Baykit::BayServer::Docker::Base::DockerBase
|
|
12
|
+
include Trouble # import
|
|
13
|
+
|
|
14
|
+
include Baykit::BayServer
|
|
15
|
+
include Baykit::BayServer::Bcf
|
|
16
|
+
include Baykit::BayServer::Util
|
|
17
|
+
|
|
18
|
+
attr :cmd_map
|
|
19
|
+
|
|
20
|
+
def initialize
|
|
21
|
+
@cmd_map = {}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def init_key_val(kv)
|
|
25
|
+
status = Integer(kv.key)
|
|
26
|
+
|
|
27
|
+
pos = kv.value.index(' ')
|
|
28
|
+
if(pos == nil)
|
|
29
|
+
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage.get(:CFG_INVALID_PARAMETER, kv.key))
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
mstr = kv.value[0, pos]
|
|
33
|
+
method = nil
|
|
34
|
+
if(mstr.casecmp?("guide"))
|
|
35
|
+
method = Method::GUIDE
|
|
36
|
+
elsif(mstr.casecmp?("text"))
|
|
37
|
+
method = Method::TEXT;
|
|
38
|
+
elsif(mstr.casecmp?("reroute"))
|
|
39
|
+
method = Method::REROUTE;
|
|
40
|
+
else
|
|
41
|
+
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage.get(:CFG_INVALID_PARAMETER, kv.key))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
@cmd_map[status] = Command.new(method, kv.value[pos + 1 .. -1])
|
|
45
|
+
return true;
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def find(status)
|
|
50
|
+
@cmd_map[status]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
require 'baykit/bayserver/agent/transporter/data_listener'
|
|
2
|
+
require 'baykit/bayserver/protocol/packet'
|
|
3
|
+
require 'baykit/bayserver/watercraft/boat'
|
|
4
|
+
|
|
5
|
+
module Baykit
|
|
6
|
+
module BayServer
|
|
7
|
+
module Docker
|
|
8
|
+
module BuiltIn
|
|
9
|
+
class LogBoat < Baykit::BayServer::WaterCraft::Boat
|
|
10
|
+
include Baykit::BayServer::Agent::Transporter::DataListener
|
|
11
|
+
include Baykit::BayServer::Protocol
|
|
12
|
+
|
|
13
|
+
class LogPacket < Packet
|
|
14
|
+
def initialize(data)
|
|
15
|
+
super(0, 0, data.length)
|
|
16
|
+
new_data_accessor().put_string(data)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
attr :file_name
|
|
21
|
+
attr :postman
|
|
22
|
+
|
|
23
|
+
def initialize()
|
|
24
|
+
super
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def to_s()
|
|
28
|
+
return "lboat##{@boart_id}/#{@object_id} file=#{@file_name}";
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
######################################################
|
|
32
|
+
# Implements Reusable
|
|
33
|
+
######################################################
|
|
34
|
+
|
|
35
|
+
def reset()
|
|
36
|
+
@file_name = nil
|
|
37
|
+
@postman = nil
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
######################################################
|
|
41
|
+
# Implements DataListener
|
|
42
|
+
######################################################
|
|
43
|
+
|
|
44
|
+
def notify_close()
|
|
45
|
+
BayLog.info("Log closed: %s", self.file_name)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
######################################################
|
|
49
|
+
# Custom methods
|
|
50
|
+
######################################################
|
|
51
|
+
|
|
52
|
+
def init(file_name, postman)
|
|
53
|
+
init_boat()
|
|
54
|
+
@file_name = file_name
|
|
55
|
+
@postman = postman
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def log(data)
|
|
59
|
+
if data == nil
|
|
60
|
+
data = ""
|
|
61
|
+
end
|
|
62
|
+
data += CharUtil::LF
|
|
63
|
+
|
|
64
|
+
@postman.post(data, nil, file_name)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
require 'baykit/bayserver/docker/built_in/log_item'
|
|
2
|
+
|
|
3
|
+
module Baykit
|
|
4
|
+
module BayServer
|
|
5
|
+
module Docker
|
|
6
|
+
module BuiltIn
|
|
7
|
+
|
|
8
|
+
module LogItems
|
|
9
|
+
#
|
|
10
|
+
# Return static text
|
|
11
|
+
#
|
|
12
|
+
class TextItem < LogItem
|
|
13
|
+
attr :text
|
|
14
|
+
|
|
15
|
+
def initialize(text)
|
|
16
|
+
@text = text
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_item(tour)
|
|
20
|
+
return @text
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# Return null result
|
|
26
|
+
#
|
|
27
|
+
class NullItem < LogItem
|
|
28
|
+
def get_item(tur)
|
|
29
|
+
return nil
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
#
|
|
34
|
+
# Return remote IP address (%a)
|
|
35
|
+
#
|
|
36
|
+
class RemoteIpItem < LogItem
|
|
37
|
+
def get_item(tur)
|
|
38
|
+
return tur.req.remote_address
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
#
|
|
43
|
+
# Return local IP address (%A)
|
|
44
|
+
#
|
|
45
|
+
class ServerIpItem < LogItem
|
|
46
|
+
def get_item(tur)
|
|
47
|
+
return tur.sever_address
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
#
|
|
52
|
+
# Return number of bytes that is sent from clients (Except HTTP headers)
|
|
53
|
+
# (%B)
|
|
54
|
+
#
|
|
55
|
+
class RequestBytesItem1 < LogItem
|
|
56
|
+
def get_item(tur)
|
|
57
|
+
bytes = tur.req.headers.content_length
|
|
58
|
+
if bytes < 0
|
|
59
|
+
bytes = 0
|
|
60
|
+
end
|
|
61
|
+
return bytes.to_s
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Return number of bytes that is sent from clients in CLF format (Except
|
|
67
|
+
# HTTP headers) (%b)
|
|
68
|
+
#
|
|
69
|
+
class RequestBytesItem2 < LogItem
|
|
70
|
+
def get_item(tur)
|
|
71
|
+
bytes = tur.req.headers.content_length
|
|
72
|
+
if bytes <= 0
|
|
73
|
+
return "-"
|
|
74
|
+
else
|
|
75
|
+
return bytes.to_s
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# Return connection status (%c)
|
|
82
|
+
#
|
|
83
|
+
class ConnectionStatusItem < LogItem
|
|
84
|
+
def get_item(tur)
|
|
85
|
+
if tur.aborted?
|
|
86
|
+
return "X"
|
|
87
|
+
else
|
|
88
|
+
return "-"
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
# Return file name (%f)
|
|
95
|
+
#
|
|
96
|
+
class FileNameItem < LogItem
|
|
97
|
+
def get_item(tur)
|
|
98
|
+
return tur.req.script_name
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
#
|
|
104
|
+
# Return remote host name (%H)
|
|
105
|
+
#
|
|
106
|
+
class RemoteHostItem < LogItem
|
|
107
|
+
def get_item(tur)
|
|
108
|
+
return tur.req.remote_host()
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
#
|
|
113
|
+
# Return remote log name (%l)
|
|
114
|
+
#
|
|
115
|
+
class RemoteLogItem < LogItem
|
|
116
|
+
def get_item(tur)
|
|
117
|
+
return nil
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
#
|
|
122
|
+
# Return request protocol (%m)
|
|
123
|
+
#
|
|
124
|
+
class ProtocolItem < LogItem
|
|
125
|
+
def get_item(tur)
|
|
126
|
+
return tur.req.protocol
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
#
|
|
131
|
+
# Return requested header (%{Foobar}i)
|
|
132
|
+
#
|
|
133
|
+
class RequestHeaderItem < LogItem
|
|
134
|
+
|
|
135
|
+
# Header name
|
|
136
|
+
attr :name
|
|
137
|
+
|
|
138
|
+
def init(param)
|
|
139
|
+
if param == nil
|
|
140
|
+
param = ""
|
|
141
|
+
end
|
|
142
|
+
@name = param
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def get_item(tur)
|
|
146
|
+
return tur.req.headers.get(@name)
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
#
|
|
151
|
+
# Return request method (%m)
|
|
152
|
+
#
|
|
153
|
+
class MethodItem < LogItem
|
|
154
|
+
def get_item(tur)
|
|
155
|
+
return tur.req.method
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
#
|
|
160
|
+
# Return responde header (%{Foobar}o)
|
|
161
|
+
#
|
|
162
|
+
class ResponseHeaderItem < LogItem
|
|
163
|
+
# Header name
|
|
164
|
+
attr :name
|
|
165
|
+
|
|
166
|
+
def init(param)
|
|
167
|
+
if param == nil
|
|
168
|
+
param = ""
|
|
169
|
+
end
|
|
170
|
+
@name = param
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def get_item(tur)
|
|
174
|
+
return tur.res.headers.get(@name)
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
#
|
|
180
|
+
# The server port (%p)
|
|
181
|
+
#
|
|
182
|
+
class PortItem < LogItem
|
|
183
|
+
def get_item(tur)
|
|
184
|
+
return tur.req.server_port
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
#
|
|
190
|
+
# Return query string (%q)
|
|
191
|
+
#
|
|
192
|
+
class QueryStringItem < LogItem
|
|
193
|
+
def get_item(tur)
|
|
194
|
+
qStr = tur.query_string
|
|
195
|
+
if qStr != nil
|
|
196
|
+
return '?' + qStr
|
|
197
|
+
else
|
|
198
|
+
return ""
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
#
|
|
204
|
+
# The start line (%r)
|
|
205
|
+
#
|
|
206
|
+
class StartLineItem < LogItem
|
|
207
|
+
def get_item(tur)
|
|
208
|
+
return "#{tur.req.method} #{tur.req.uri} #{tur.req.protocol}"
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
#
|
|
213
|
+
# Return status (%s)
|
|
214
|
+
#
|
|
215
|
+
class StatusItem < LogItem
|
|
216
|
+
def get_item(tur)
|
|
217
|
+
return tur.res.headers.status
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
#
|
|
222
|
+
# Return current time (%{format}t)
|
|
223
|
+
#
|
|
224
|
+
class TimeItem < LogItem
|
|
225
|
+
|
|
226
|
+
# format
|
|
227
|
+
attr :format
|
|
228
|
+
|
|
229
|
+
def init(param)
|
|
230
|
+
if param == nil
|
|
231
|
+
@format = "[%d/%m/%Y %H:%M:%S %Z]"
|
|
232
|
+
else
|
|
233
|
+
@format = param
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def get_item(tur)
|
|
238
|
+
return Time.now.strftime(@format)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
#
|
|
243
|
+
# Return how long request took (%T)
|
|
244
|
+
#
|
|
245
|
+
class IntervalItem < LogItem
|
|
246
|
+
def get_item(tur)
|
|
247
|
+
return (tur.interval / 1000).to_s
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
#
|
|
252
|
+
# Return remote user (%u)
|
|
253
|
+
#
|
|
254
|
+
class RemoteUserItem < LogItem
|
|
255
|
+
def get_item(tur)
|
|
256
|
+
return tur.req.remote_user
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
#
|
|
261
|
+
# Return requested URL(not content query string) (%U)
|
|
262
|
+
#
|
|
263
|
+
class RequestUrlItem < LogItem
|
|
264
|
+
def get_item(tur)
|
|
265
|
+
url = tur.req.uri== nil ? "" : tur.req.uri
|
|
266
|
+
pos = url.index('?')
|
|
267
|
+
if pos != nil
|
|
268
|
+
url = url[0, pos]
|
|
269
|
+
end
|
|
270
|
+
return url
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
#
|
|
275
|
+
# Return the server name (%v)
|
|
276
|
+
#
|
|
277
|
+
class ServerNameItem < LogItem
|
|
278
|
+
def get_item(tur)
|
|
279
|
+
return tur.req.server_name
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
require 'baykit/bayserver/sink'
|
|
2
|
+
require 'baykit/bayserver/taxi/taxi'
|
|
3
|
+
require 'baykit/bayserver/taxi/taxi_runner'
|
|
4
|
+
require 'baykit/bayserver/util/valve'
|
|
5
|
+
require 'baykit/bayserver/util/postman'
|
|
6
|
+
|
|
7
|
+
module Baykit
|
|
8
|
+
module BayServer
|
|
9
|
+
module Docker
|
|
10
|
+
module BuiltIn
|
|
11
|
+
class WriteFileTaxi < Baykit::BayServer::Taxi::Taxi
|
|
12
|
+
include Baykit::BayServer::Util::Valve # implements
|
|
13
|
+
include Baykit::BayServer::Util::Postman # implements
|
|
14
|
+
|
|
15
|
+
include Baykit::BayServer::Taxi
|
|
16
|
+
|
|
17
|
+
attr :outfile
|
|
18
|
+
attr :ch_valid
|
|
19
|
+
attr :data_listener
|
|
20
|
+
attr :write_queue
|
|
21
|
+
attr :lock
|
|
22
|
+
|
|
23
|
+
def initialize()
|
|
24
|
+
super
|
|
25
|
+
@write_queue = []
|
|
26
|
+
@lock = Mutex.new()
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def init(out, data_listener)
|
|
30
|
+
@outfile = out
|
|
31
|
+
@data_listener = data_listener
|
|
32
|
+
@ch_valid = true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def to_s()
|
|
36
|
+
return super.to_s + " " + @data_listener.to_s
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
######################################################
|
|
40
|
+
# Implements Resumable
|
|
41
|
+
######################################################
|
|
42
|
+
def open_valve()
|
|
43
|
+
next_run()
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
######################################################
|
|
47
|
+
# Implements Taxi
|
|
48
|
+
######################################################
|
|
49
|
+
|
|
50
|
+
def depart()
|
|
51
|
+
begin
|
|
52
|
+
while true
|
|
53
|
+
buf = nil
|
|
54
|
+
|
|
55
|
+
empty = nil
|
|
56
|
+
@lock.synchronize do
|
|
57
|
+
empty = @write_queue.empty?
|
|
58
|
+
if !empty
|
|
59
|
+
buf = @write_queue[0]
|
|
60
|
+
@write_queue.delete_at(0)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
if empty
|
|
65
|
+
break
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
@outfile.syswrite(buf)
|
|
69
|
+
|
|
70
|
+
empty = nil
|
|
71
|
+
@lock.synchronize do
|
|
72
|
+
empty = @write_queue.empty?
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
if !empty
|
|
76
|
+
next_run()
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
rescue StandardError => e
|
|
80
|
+
BayLog.error_e(e)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def post(data, adr, tag)
|
|
85
|
+
@lock.synchronize do
|
|
86
|
+
empty = @write_queue.empty?
|
|
87
|
+
@write_queue.append(data)
|
|
88
|
+
if empty
|
|
89
|
+
open_valve()
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def next_run()
|
|
95
|
+
TaxiRunner.post(self)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'baykit/bayserver/docker/docker'
|
|
2
|
+
|
|
3
|
+
module Baykit
|
|
4
|
+
module BayServer
|
|
5
|
+
module Docker
|
|
6
|
+
module City
|
|
7
|
+
include Baykit::BayServer::Docker::Docker
|
|
8
|
+
|
|
9
|
+
#
|
|
10
|
+
# interface
|
|
11
|
+
#
|
|
12
|
+
# String name();
|
|
13
|
+
# List<Club> clubs();
|
|
14
|
+
# List<Town> towns();
|
|
15
|
+
# void enter(Tour tour) throws HttpException;
|
|
16
|
+
# Trouble getTrouble();
|
|
17
|
+
# void log(Tour tour);
|
|
18
|
+
#
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|