bayserver-core 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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