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,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,18 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Docker
4
+ module BuiltIn
5
+
6
+ class LogItem
7
+ def init(param)
8
+ end
9
+
10
+ def get_item(tour)
11
+ end
12
+
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Docker
4
+ module BuiltIn
5
+
6
+
7
+ class LogItemFactory
8
+ #
9
+ # interface
10
+ #
11
+ # LogItem newLogItem();
12
+ #
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -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