fluentd 0.14.4-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

Files changed (328) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE.md +6 -0
  3. data/.gitignore +26 -0
  4. data/.travis.yml +45 -0
  5. data/AUTHORS +2 -0
  6. data/CONTRIBUTING.md +35 -0
  7. data/COPYING +14 -0
  8. data/ChangeLog +276 -0
  9. data/Gemfile +9 -0
  10. data/README.md +51 -0
  11. data/Rakefile +53 -0
  12. data/Vagrantfile +17 -0
  13. data/appveyor.yml +41 -0
  14. data/bin/fluent-debug +5 -0
  15. data/example/copy_roundrobin.conf +39 -0
  16. data/example/filter_stdout.conf +22 -0
  17. data/example/in_forward.conf +11 -0
  18. data/example/in_http.conf +14 -0
  19. data/example/in_out_forward.conf +17 -0
  20. data/example/in_syslog.conf +15 -0
  21. data/example/in_tail.conf +14 -0
  22. data/example/in_tcp.conf +13 -0
  23. data/example/in_udp.conf +13 -0
  24. data/example/multi_filters.conf +61 -0
  25. data/example/out_buffered_null.conf +32 -0
  26. data/example/out_copy.conf +20 -0
  27. data/example/out_file.conf +13 -0
  28. data/example/out_forward.conf +35 -0
  29. data/example/out_forward_buf_file.conf +23 -0
  30. data/example/v0_12_filter.conf +78 -0
  31. data/example/v1_literal_example.conf +36 -0
  32. data/fluent.conf +139 -0
  33. data/fluentd.gemspec +51 -0
  34. data/lib/fluent/agent.rb +194 -0
  35. data/lib/fluent/command/bundler_injection.rb +45 -0
  36. data/lib/fluent/command/cat.rb +319 -0
  37. data/lib/fluent/command/debug.rb +102 -0
  38. data/lib/fluent/command/fluentd.rb +273 -0
  39. data/lib/fluent/compat/call_super_mixin.rb +67 -0
  40. data/lib/fluent/compat/exec_util.rb +129 -0
  41. data/lib/fluent/compat/file_util.rb +54 -0
  42. data/lib/fluent/compat/filter.rb +68 -0
  43. data/lib/fluent/compat/formatter.rb +111 -0
  44. data/lib/fluent/compat/formatter_utils.rb +85 -0
  45. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  46. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  47. data/lib/fluent/compat/input.rb +49 -0
  48. data/lib/fluent/compat/output.rb +677 -0
  49. data/lib/fluent/compat/output_chain.rb +60 -0
  50. data/lib/fluent/compat/parser.rb +180 -0
  51. data/lib/fluent/compat/parser_utils.rb +40 -0
  52. data/lib/fluent/compat/propagate_default.rb +62 -0
  53. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  54. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  55. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  56. data/lib/fluent/compat/socket_util.rb +165 -0
  57. data/lib/fluent/compat/string_util.rb +34 -0
  58. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  59. data/lib/fluent/compat/type_converter.rb +90 -0
  60. data/lib/fluent/config.rb +56 -0
  61. data/lib/fluent/config/basic_parser.rb +123 -0
  62. data/lib/fluent/config/configure_proxy.rb +366 -0
  63. data/lib/fluent/config/dsl.rb +149 -0
  64. data/lib/fluent/config/element.rb +218 -0
  65. data/lib/fluent/config/error.rb +26 -0
  66. data/lib/fluent/config/literal_parser.rb +251 -0
  67. data/lib/fluent/config/parser.rb +107 -0
  68. data/lib/fluent/config/section.rb +212 -0
  69. data/lib/fluent/config/types.rb +136 -0
  70. data/lib/fluent/config/v1_parser.rb +190 -0
  71. data/lib/fluent/configurable.rb +176 -0
  72. data/lib/fluent/daemon.rb +15 -0
  73. data/lib/fluent/engine.rb +220 -0
  74. data/lib/fluent/env.rb +27 -0
  75. data/lib/fluent/event.rb +287 -0
  76. data/lib/fluent/event_router.rb +259 -0
  77. data/lib/fluent/filter.rb +21 -0
  78. data/lib/fluent/formatter.rb +23 -0
  79. data/lib/fluent/input.rb +21 -0
  80. data/lib/fluent/label.rb +38 -0
  81. data/lib/fluent/load.rb +36 -0
  82. data/lib/fluent/log.rb +445 -0
  83. data/lib/fluent/match.rb +141 -0
  84. data/lib/fluent/mixin.rb +31 -0
  85. data/lib/fluent/msgpack_factory.rb +62 -0
  86. data/lib/fluent/output.rb +26 -0
  87. data/lib/fluent/output_chain.rb +23 -0
  88. data/lib/fluent/parser.rb +23 -0
  89. data/lib/fluent/plugin.rb +161 -0
  90. data/lib/fluent/plugin/bare_output.rb +63 -0
  91. data/lib/fluent/plugin/base.rb +130 -0
  92. data/lib/fluent/plugin/buf_file.rb +154 -0
  93. data/lib/fluent/plugin/buf_memory.rb +34 -0
  94. data/lib/fluent/plugin/buffer.rb +603 -0
  95. data/lib/fluent/plugin/buffer/chunk.rb +160 -0
  96. data/lib/fluent/plugin/buffer/file_chunk.rb +323 -0
  97. data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
  98. data/lib/fluent/plugin/exec_util.rb +22 -0
  99. data/lib/fluent/plugin/file_util.rb +22 -0
  100. data/lib/fluent/plugin/file_wrapper.rb +120 -0
  101. data/lib/fluent/plugin/filter.rb +93 -0
  102. data/lib/fluent/plugin/filter_grep.rb +75 -0
  103. data/lib/fluent/plugin/filter_record_transformer.rb +342 -0
  104. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  105. data/lib/fluent/plugin/formatter.rb +45 -0
  106. data/lib/fluent/plugin/formatter_csv.rb +47 -0
  107. data/lib/fluent/plugin/formatter_hash.rb +29 -0
  108. data/lib/fluent/plugin/formatter_json.rb +44 -0
  109. data/lib/fluent/plugin/formatter_ltsv.rb +41 -0
  110. data/lib/fluent/plugin/formatter_msgpack.rb +29 -0
  111. data/lib/fluent/plugin/formatter_out_file.rb +78 -0
  112. data/lib/fluent/plugin/formatter_single_value.rb +34 -0
  113. data/lib/fluent/plugin/formatter_stdout.rb +74 -0
  114. data/lib/fluent/plugin/in_debug_agent.rb +64 -0
  115. data/lib/fluent/plugin/in_dummy.rb +135 -0
  116. data/lib/fluent/plugin/in_exec.rb +149 -0
  117. data/lib/fluent/plugin/in_forward.rb +366 -0
  118. data/lib/fluent/plugin/in_gc_stat.rb +52 -0
  119. data/lib/fluent/plugin/in_http.rb +422 -0
  120. data/lib/fluent/plugin/in_monitor_agent.rb +401 -0
  121. data/lib/fluent/plugin/in_object_space.rb +90 -0
  122. data/lib/fluent/plugin/in_syslog.rb +204 -0
  123. data/lib/fluent/plugin/in_tail.rb +838 -0
  124. data/lib/fluent/plugin/in_tcp.rb +41 -0
  125. data/lib/fluent/plugin/in_udp.rb +37 -0
  126. data/lib/fluent/plugin/in_unix.rb +201 -0
  127. data/lib/fluent/plugin/input.rb +33 -0
  128. data/lib/fluent/plugin/multi_output.rb +95 -0
  129. data/lib/fluent/plugin/out_buffered_null.rb +59 -0
  130. data/lib/fluent/plugin/out_buffered_stdout.rb +70 -0
  131. data/lib/fluent/plugin/out_copy.rb +42 -0
  132. data/lib/fluent/plugin/out_exec.rb +114 -0
  133. data/lib/fluent/plugin/out_exec_filter.rb +393 -0
  134. data/lib/fluent/plugin/out_file.rb +167 -0
  135. data/lib/fluent/plugin/out_forward.rb +646 -0
  136. data/lib/fluent/plugin/out_null.rb +27 -0
  137. data/lib/fluent/plugin/out_relabel.rb +28 -0
  138. data/lib/fluent/plugin/out_roundrobin.rb +80 -0
  139. data/lib/fluent/plugin/out_stdout.rb +48 -0
  140. data/lib/fluent/plugin/out_stream.rb +130 -0
  141. data/lib/fluent/plugin/output.rb +1020 -0
  142. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  143. data/lib/fluent/plugin/parser.rb +175 -0
  144. data/lib/fluent/plugin/parser_apache.rb +28 -0
  145. data/lib/fluent/plugin/parser_apache2.rb +84 -0
  146. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  147. data/lib/fluent/plugin/parser_csv.rb +33 -0
  148. data/lib/fluent/plugin/parser_json.rb +79 -0
  149. data/lib/fluent/plugin/parser_ltsv.rb +50 -0
  150. data/lib/fluent/plugin/parser_multiline.rb +104 -0
  151. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  152. data/lib/fluent/plugin/parser_none.rb +36 -0
  153. data/lib/fluent/plugin/parser_regexp.rb +73 -0
  154. data/lib/fluent/plugin/parser_syslog.rb +82 -0
  155. data/lib/fluent/plugin/parser_tsv.rb +37 -0
  156. data/lib/fluent/plugin/socket_util.rb +22 -0
  157. data/lib/fluent/plugin/storage.rb +84 -0
  158. data/lib/fluent/plugin/storage_local.rb +132 -0
  159. data/lib/fluent/plugin/string_util.rb +22 -0
  160. data/lib/fluent/plugin_helper.rb +42 -0
  161. data/lib/fluent/plugin_helper/child_process.rb +298 -0
  162. data/lib/fluent/plugin_helper/compat_parameters.rb +224 -0
  163. data/lib/fluent/plugin_helper/event_emitter.rb +80 -0
  164. data/lib/fluent/plugin_helper/event_loop.rb +118 -0
  165. data/lib/fluent/plugin_helper/formatter.rb +149 -0
  166. data/lib/fluent/plugin_helper/inject.rb +125 -0
  167. data/lib/fluent/plugin_helper/parser.rb +147 -0
  168. data/lib/fluent/plugin_helper/retry_state.rb +177 -0
  169. data/lib/fluent/plugin_helper/storage.rb +331 -0
  170. data/lib/fluent/plugin_helper/thread.rb +147 -0
  171. data/lib/fluent/plugin_helper/timer.rb +90 -0
  172. data/lib/fluent/plugin_id.rb +63 -0
  173. data/lib/fluent/process.rb +504 -0
  174. data/lib/fluent/registry.rb +99 -0
  175. data/lib/fluent/root_agent.rb +314 -0
  176. data/lib/fluent/rpc.rb +94 -0
  177. data/lib/fluent/supervisor.rb +680 -0
  178. data/lib/fluent/system_config.rb +122 -0
  179. data/lib/fluent/test.rb +56 -0
  180. data/lib/fluent/test/base.rb +85 -0
  181. data/lib/fluent/test/driver/base.rb +179 -0
  182. data/lib/fluent/test/driver/base_owned.rb +70 -0
  183. data/lib/fluent/test/driver/base_owner.rb +125 -0
  184. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  185. data/lib/fluent/test/driver/filter.rb +57 -0
  186. data/lib/fluent/test/driver/formatter.rb +30 -0
  187. data/lib/fluent/test/driver/input.rb +31 -0
  188. data/lib/fluent/test/driver/multi_output.rb +52 -0
  189. data/lib/fluent/test/driver/output.rb +76 -0
  190. data/lib/fluent/test/driver/parser.rb +30 -0
  191. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  192. data/lib/fluent/test/filter_test.rb +77 -0
  193. data/lib/fluent/test/formatter_test.rb +65 -0
  194. data/lib/fluent/test/helpers.rb +79 -0
  195. data/lib/fluent/test/input_test.rb +172 -0
  196. data/lib/fluent/test/log.rb +73 -0
  197. data/lib/fluent/test/output_test.rb +156 -0
  198. data/lib/fluent/test/parser_test.rb +70 -0
  199. data/lib/fluent/time.rb +175 -0
  200. data/lib/fluent/timezone.rb +133 -0
  201. data/lib/fluent/unique_id.rb +39 -0
  202. data/lib/fluent/version.rb +21 -0
  203. data/lib/fluent/winsvc.rb +71 -0
  204. data/test/compat/test_calls_super.rb +166 -0
  205. data/test/compat/test_parser.rb +82 -0
  206. data/test/config/assertions.rb +42 -0
  207. data/test/config/test_config_parser.rb +507 -0
  208. data/test/config/test_configurable.rb +1194 -0
  209. data/test/config/test_configure_proxy.rb +386 -0
  210. data/test/config/test_dsl.rb +415 -0
  211. data/test/config/test_element.rb +403 -0
  212. data/test/config/test_literal_parser.rb +297 -0
  213. data/test/config/test_section.rb +184 -0
  214. data/test/config/test_system_config.rb +120 -0
  215. data/test/config/test_types.rb +171 -0
  216. data/test/helper.rb +119 -0
  217. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  218. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  219. data/test/plugin/data/2010/01/20100102.log +0 -0
  220. data/test/plugin/data/log/bar +0 -0
  221. data/test/plugin/data/log/foo/bar.log +0 -0
  222. data/test/plugin/data/log/test.log +0 -0
  223. data/test/plugin/test_bare_output.rb +118 -0
  224. data/test/plugin/test_base.rb +75 -0
  225. data/test/plugin/test_buf_file.rb +571 -0
  226. data/test/plugin/test_buf_memory.rb +42 -0
  227. data/test/plugin/test_buffer.rb +1200 -0
  228. data/test/plugin/test_buffer_chunk.rb +168 -0
  229. data/test/plugin/test_buffer_file_chunk.rb +771 -0
  230. data/test/plugin/test_buffer_memory_chunk.rb +265 -0
  231. data/test/plugin/test_file_util.rb +96 -0
  232. data/test/plugin/test_filter.rb +353 -0
  233. data/test/plugin/test_filter_grep.rb +119 -0
  234. data/test/plugin/test_filter_record_transformer.rb +600 -0
  235. data/test/plugin/test_filter_stdout.rb +211 -0
  236. data/test/plugin/test_formatter_csv.rb +94 -0
  237. data/test/plugin/test_formatter_json.rb +30 -0
  238. data/test/plugin/test_formatter_ltsv.rb +52 -0
  239. data/test/plugin/test_formatter_msgpack.rb +28 -0
  240. data/test/plugin/test_formatter_out_file.rb +95 -0
  241. data/test/plugin/test_formatter_single_value.rb +38 -0
  242. data/test/plugin/test_in_debug_agent.rb +28 -0
  243. data/test/plugin/test_in_dummy.rb +188 -0
  244. data/test/plugin/test_in_exec.rb +133 -0
  245. data/test/plugin/test_in_forward.rb +635 -0
  246. data/test/plugin/test_in_gc_stat.rb +39 -0
  247. data/test/plugin/test_in_http.rb +442 -0
  248. data/test/plugin/test_in_monitor_agent.rb +329 -0
  249. data/test/plugin/test_in_object_space.rb +64 -0
  250. data/test/plugin/test_in_syslog.rb +205 -0
  251. data/test/plugin/test_in_tail.rb +1001 -0
  252. data/test/plugin/test_in_tcp.rb +102 -0
  253. data/test/plugin/test_in_udp.rb +121 -0
  254. data/test/plugin/test_in_unix.rb +126 -0
  255. data/test/plugin/test_input.rb +122 -0
  256. data/test/plugin/test_multi_output.rb +180 -0
  257. data/test/plugin/test_out_buffered_null.rb +79 -0
  258. data/test/plugin/test_out_buffered_stdout.rb +122 -0
  259. data/test/plugin/test_out_copy.rb +160 -0
  260. data/test/plugin/test_out_exec.rb +155 -0
  261. data/test/plugin/test_out_exec_filter.rb +262 -0
  262. data/test/plugin/test_out_file.rb +383 -0
  263. data/test/plugin/test_out_forward.rb +590 -0
  264. data/test/plugin/test_out_null.rb +29 -0
  265. data/test/plugin/test_out_relabel.rb +28 -0
  266. data/test/plugin/test_out_roundrobin.rb +146 -0
  267. data/test/plugin/test_out_stdout.rb +92 -0
  268. data/test/plugin/test_out_stream.rb +93 -0
  269. data/test/plugin/test_output.rb +568 -0
  270. data/test/plugin/test_output_as_buffered.rb +1604 -0
  271. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  272. data/test/plugin/test_output_as_buffered_retries.rb +839 -0
  273. data/test/plugin/test_output_as_buffered_secondary.rb +817 -0
  274. data/test/plugin/test_output_as_standard.rb +374 -0
  275. data/test/plugin/test_owned_by.rb +35 -0
  276. data/test/plugin/test_parser_apache.rb +42 -0
  277. data/test/plugin/test_parser_apache2.rb +38 -0
  278. data/test/plugin/test_parser_apache_error.rb +45 -0
  279. data/test/plugin/test_parser_base.rb +32 -0
  280. data/test/plugin/test_parser_csv.rb +104 -0
  281. data/test/plugin/test_parser_json.rb +107 -0
  282. data/test/plugin/test_parser_labeled_tsv.rb +129 -0
  283. data/test/plugin/test_parser_multiline.rb +100 -0
  284. data/test/plugin/test_parser_nginx.rb +48 -0
  285. data/test/plugin/test_parser_none.rb +53 -0
  286. data/test/plugin/test_parser_regexp.rb +277 -0
  287. data/test/plugin/test_parser_syslog.rb +66 -0
  288. data/test/plugin/test_parser_time.rb +46 -0
  289. data/test/plugin/test_parser_tsv.rb +121 -0
  290. data/test/plugin/test_storage.rb +167 -0
  291. data/test/plugin/test_storage_local.rb +8 -0
  292. data/test/plugin/test_string_util.rb +26 -0
  293. data/test/plugin_helper/test_child_process.rb +608 -0
  294. data/test/plugin_helper/test_compat_parameters.rb +242 -0
  295. data/test/plugin_helper/test_event_emitter.rb +51 -0
  296. data/test/plugin_helper/test_event_loop.rb +52 -0
  297. data/test/plugin_helper/test_formatter.rb +252 -0
  298. data/test/plugin_helper/test_inject.rb +487 -0
  299. data/test/plugin_helper/test_parser.rb +263 -0
  300. data/test/plugin_helper/test_retry_state.rb +399 -0
  301. data/test/plugin_helper/test_storage.rb +521 -0
  302. data/test/plugin_helper/test_thread.rb +164 -0
  303. data/test/plugin_helper/test_timer.rb +131 -0
  304. data/test/scripts/exec_script.rb +32 -0
  305. data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
  306. data/test/scripts/fluent/plugin/out_test.rb +81 -0
  307. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  308. data/test/scripts/fluent/plugin/parser_known.rb +4 -0
  309. data/test/test_config.rb +179 -0
  310. data/test/test_configdsl.rb +148 -0
  311. data/test/test_event.rb +329 -0
  312. data/test/test_event_router.rb +331 -0
  313. data/test/test_event_time.rb +184 -0
  314. data/test/test_filter.rb +121 -0
  315. data/test/test_formatter.rb +319 -0
  316. data/test/test_input.rb +31 -0
  317. data/test/test_log.rb +572 -0
  318. data/test/test_match.rb +137 -0
  319. data/test/test_mixin.rb +351 -0
  320. data/test/test_output.rb +214 -0
  321. data/test/test_plugin_classes.rb +136 -0
  322. data/test/test_plugin_helper.rb +81 -0
  323. data/test/test_process.rb +48 -0
  324. data/test/test_root_agent.rb +278 -0
  325. data/test/test_supervisor.rb +339 -0
  326. data/test/test_time_formatter.rb +186 -0
  327. data/test/test_unique_id.rb +47 -0
  328. metadata +823 -0
@@ -0,0 +1,165 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'ipaddr'
18
+
19
+ require 'cool.io'
20
+
21
+ require 'fluent/plugin'
22
+ require 'fluent/input'
23
+
24
+ module Fluent
25
+ module Compat
26
+ module SocketUtil
27
+ def create_udp_socket(host)
28
+ if IPAddr.new(IPSocket.getaddress(host)).ipv4?
29
+ UDPSocket.new
30
+ else
31
+ UDPSocket.new(Socket::AF_INET6)
32
+ end
33
+ end
34
+ module_function :create_udp_socket
35
+
36
+ class UdpHandler < Coolio::IO
37
+ def initialize(io, log, body_size_limit, callback)
38
+ super(io)
39
+ @io = io
40
+ @log = log
41
+ @body_size_limit = body_size_limit
42
+ @callback = callback
43
+ end
44
+
45
+ def on_readable
46
+ msg, addr = @io.recvfrom_nonblock(@body_size_limit)
47
+ msg.chomp!
48
+ @callback.call(msg, addr)
49
+ rescue => e
50
+ @log.error "unexpected error", error: e
51
+ end
52
+ end
53
+
54
+ class TcpHandler < Coolio::Socket
55
+ PEERADDR_FAILED = ["?", "?", "name resolusion failed", "?"]
56
+
57
+ def initialize(io, log, delimiter, callback)
58
+ super(io)
59
+ @timeout = 0
60
+ if io.is_a?(TCPSocket)
61
+ @addr = (io.peeraddr rescue PEERADDR_FAILED)
62
+
63
+ opt = [1, @timeout.to_i].pack('I!I!') # { int l_onoff; int l_linger; }
64
+ io.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, opt)
65
+ end
66
+ @delimiter = delimiter
67
+ @callback = callback
68
+ @log = log
69
+ @log.trace { "accepted fluent socket object_id=#{self.object_id}" }
70
+ @buffer = "".force_encoding('ASCII-8BIT')
71
+ end
72
+
73
+ def on_connect
74
+ end
75
+
76
+ def on_read(data)
77
+ @buffer << data
78
+ pos = 0
79
+
80
+ while i = @buffer.index(@delimiter, pos)
81
+ msg = @buffer[pos...i]
82
+ @callback.call(msg, @addr)
83
+ pos = i + @delimiter.length
84
+ end
85
+ @buffer.slice!(0, pos) if pos > 0
86
+ rescue => e
87
+ @log.error "unexpected error", error: e
88
+ close
89
+ end
90
+
91
+ def on_close
92
+ @log.trace { "closed fluent socket object_id=#{self.object_id}" }
93
+ end
94
+ end
95
+
96
+ class BaseInput < Fluent::Input
97
+ def initialize
98
+ super
99
+ require 'fluent/parser'
100
+ end
101
+
102
+ desc 'Tag of output events.'
103
+ config_param :tag, :string
104
+ desc 'The format of the payload.'
105
+ config_param :format, :string
106
+ desc 'The port to listen to.'
107
+ config_param :port, :integer, default: 5150
108
+ desc 'The bind address to listen to.'
109
+ config_param :bind, :string, default: '0.0.0.0'
110
+ desc "The field name of the client's hostname."
111
+ config_param :source_host_key, :string, default: nil
112
+ config_param :blocking_timeout, :time, default: 0.5
113
+
114
+ def configure(conf)
115
+ super
116
+
117
+ @parser = Plugin.new_parser(@format)
118
+ @parser.configure(conf)
119
+ end
120
+
121
+ def start
122
+ super
123
+
124
+ @loop = Coolio::Loop.new
125
+ @handler = listen(method(:on_message))
126
+ @loop.attach(@handler)
127
+ @thread = Thread.new(&method(:run))
128
+ end
129
+
130
+ def shutdown
131
+ @loop.watchers.each { |w| w.detach }
132
+ @loop.stop if @loop.instance_variable_get("@running")
133
+ @handler.close
134
+ @thread.join
135
+
136
+ super
137
+ end
138
+
139
+ def run
140
+ @loop.run(@blocking_timeout)
141
+ rescue => e
142
+ log.error "unexpected error", error: e
143
+ log.error_backtrace
144
+ end
145
+
146
+ private
147
+
148
+ def on_message(msg, addr)
149
+ @parser.parse(msg) { |time, record|
150
+ unless time && record
151
+ log.warn "pattern not match: #{msg.inspect}"
152
+ return
153
+ end
154
+
155
+ record[@source_host_key] = addr[3] if @source_host_key
156
+ router.emit(@tag, time, record)
157
+ }
158
+ rescue => e
159
+ log.error msg.dump, error: e, host: addr[3]
160
+ log.error_backtrace
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,34 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Fluent
18
+ module Compat
19
+ module StringUtil
20
+ def match_regexp(regexp, string)
21
+ begin
22
+ return regexp.match(string)
23
+ rescue ArgumentError => e
24
+ raise e unless e.message.index("invalid byte sequence in".freeze).zero?
25
+ $log.info "invalid byte sequence is replaced in `#{string}`"
26
+ string = string.scrub('?')
27
+ retry
28
+ end
29
+ return true
30
+ end
31
+ module_function :match_regexp
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,26 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Fluent
18
+ module Compat
19
+ module StructuredFormatMixin
20
+ def format(tag, time, record)
21
+ filter_record(tag, time, record)
22
+ format_record(record)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,90 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Fluent
18
+ module Compat
19
+ module TypeConverter
20
+ Converters = {
21
+ 'string' => lambda { |v| v.to_s },
22
+ 'integer' => lambda { |v| v.to_i },
23
+ 'float' => lambda { |v| v.to_f },
24
+ 'bool' => lambda { |v|
25
+ case v.downcase
26
+ when 'true', 'yes', '1'
27
+ true
28
+ else
29
+ false
30
+ end
31
+ },
32
+ 'time' => lambda { |v, time_parser|
33
+ time_parser.parse(v)
34
+ },
35
+ 'array' => lambda { |v, delimiter|
36
+ v.to_s.split(delimiter)
37
+ }
38
+ }
39
+
40
+ def self.included(klass)
41
+ klass.instance_eval {
42
+ config_param :types, :string, default: nil
43
+ config_param :types_delimiter, :string, default: ','
44
+ config_param :types_label_delimiter, :string, default: ':'
45
+ }
46
+ end
47
+
48
+ def configure(conf)
49
+ super
50
+
51
+ @type_converters = nil
52
+ @type_converters = parse_types_parameter unless @types.nil?
53
+ end
54
+
55
+ private
56
+
57
+ def convert_type(name, value)
58
+ converter = @type_converters[name]
59
+ converter.nil? ? value : converter.call(value)
60
+ end
61
+
62
+ def parse_types_parameter
63
+ converters = {}
64
+
65
+ @types.split(@types_delimiter).each { |pattern_name|
66
+ name, type, format = pattern_name.split(@types_label_delimiter, 3)
67
+ raise ConfigError, "Type is needed" if type.nil?
68
+
69
+ case type
70
+ when 'time'
71
+ require 'fluent/parser'
72
+ t_parser = Fluent::TextParser::TimeParser.new(format)
73
+ converters[name] = lambda { |v|
74
+ Converters[type].call(v, t_parser)
75
+ }
76
+ when 'array'
77
+ delimiter = format || ','
78
+ converters[name] = lambda { |v|
79
+ Converters[type].call(v, delimiter)
80
+ }
81
+ else
82
+ converters[name] = Converters[type]
83
+ end
84
+ }
85
+
86
+ converters
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,56 @@
1
+ #
2
+ # Fluent
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/config/error'
18
+ require 'fluent/config/element'
19
+ require 'fluent/configurable'
20
+
21
+ module Fluent
22
+ module Config
23
+ def self.parse(str, fname, basepath = Dir.pwd, v1_config = nil, syntax: :v1)
24
+ parser = if fname =~ /\.rb$/ || syntax == :ruby
25
+ :ruby
26
+ elsif v1_config.nil?
27
+ case syntax
28
+ when :v1 then :v1
29
+ when :v0 then :v0
30
+ else
31
+ raise ArgumentError, "Unknown Fluentd configuration syntax: '#{syntax}'"
32
+ end
33
+ elsif v1_config then :v1
34
+ else :v0
35
+ end
36
+ case parser
37
+ when :v1
38
+ require 'fluent/config/v1_parser'
39
+ V1Parser.parse(str, fname, basepath, Kernel.binding)
40
+ when :v0
41
+ # TODO: show deprecated message in v1
42
+ require 'fluent/config/parser'
43
+ Parser.parse(str, fname, basepath)
44
+ when :ruby
45
+ require 'fluent/config/dsl'
46
+ Config::DSL::Parser.parse(str, File.join(basepath, fname))
47
+ else
48
+ raise "[BUG] unknown configuration parser specification:'#{parser}'"
49
+ end
50
+ end
51
+
52
+ def self.new(name = '')
53
+ Element.new(name, '', {}, [])
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,123 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'stringio'
18
+ require 'fluent/config/error'
19
+
20
+ module Fluent
21
+ module Config
22
+ class BasicParser
23
+ def initialize(strscan)
24
+ @ss = strscan
25
+ end
26
+
27
+ LINE_END = /(?:[ \t]*(?:\#.*)?(?:\z|[\r\n]))+/
28
+ SPACING = /(?:[ \t\r\n]|\z|\#.*?(?:\z|[\r\n]))+/
29
+ ZERO_OR_MORE_SPACING = /(?:[ \t\r\n]|\z|\#.*?(?:\z|[\r\n]))*/
30
+ SPACING_WITHOUT_COMMENT = /(?:[ \t\r\n]|\z)+/
31
+ LINE_END_WITHOUT_SPACING_AND_COMMENT = /(?:\z|[\r\n])/
32
+
33
+ module ClassMethods
34
+ def symbol(string)
35
+ /#{Regexp.escape(string)}/
36
+ end
37
+
38
+ def def_symbol(method_name, string)
39
+ pattern = symbol(string)
40
+ define_method(method_name) do
41
+ skip(pattern) && string
42
+ end
43
+ end
44
+
45
+ def def_literal(method_name, string)
46
+ pattern = /#{string}#{LINE_END}/
47
+ define_method(method_name) do
48
+ skip(pattern) && string
49
+ end
50
+ end
51
+ end
52
+
53
+ extend ClassMethods
54
+
55
+ def skip(pattern)
56
+ @ss.skip(pattern)
57
+ end
58
+
59
+ def scan(pattern)
60
+ @ss.scan(pattern)
61
+ end
62
+
63
+ def getch
64
+ @ss.getch
65
+ end
66
+
67
+ def eof?
68
+ @ss.eos?
69
+ end
70
+
71
+ def prev_match
72
+ @ss[0]
73
+ end
74
+
75
+ def check(pattern)
76
+ @ss.check(pattern)
77
+ end
78
+
79
+ def line_end
80
+ skip(LINE_END)
81
+ end
82
+
83
+ def spacing
84
+ skip(SPACING)
85
+ end
86
+
87
+ def spacing_without_comment
88
+ skip(SPACING_WITHOUT_COMMENT)
89
+ end
90
+
91
+ def parse_error!(message)
92
+ raise ConfigParseError, "#{message} at #{error_sample}"
93
+ end
94
+
95
+ def error_sample
96
+ pos = @ss.pos
97
+
98
+ lines = @ss.string.lines.to_a
99
+ lines.each_with_index { |line, ln|
100
+ if line.size >= pos
101
+ msgs = ["line #{ln + 1},#{pos}\n"]
102
+
103
+ if ln > 0
104
+ last_line = lines[ln - 1]
105
+ msgs << "%3s: %s" % [ln, last_line]
106
+ end
107
+
108
+ msgs << "%3s: %s" % [ln + 1, line]
109
+ msgs << "\n #{'-' * pos}^\n"
110
+
111
+ if next_line = lines[ln + 1]
112
+ msgs << "%3s: %s" % [ln + 2, next_line]
113
+ end
114
+
115
+ return msgs.join
116
+ end
117
+ pos -= line.size
118
+ last_line = line
119
+ }
120
+ end
121
+ end
122
+ end
123
+ end