fluentd 0.12.40 → 1.6.2

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 (428) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  6. data/.gitignore +5 -0
  7. data/.gitlab/cicd-template.yaml +10 -0
  8. data/.gitlab-ci.yml +147 -0
  9. data/.travis.yml +56 -20
  10. data/ADOPTERS.md +5 -0
  11. data/CHANGELOG.md +1369 -0
  12. data/CONTRIBUTING.md +16 -5
  13. data/GOVERNANCE.md +55 -0
  14. data/Gemfile +5 -0
  15. data/GithubWorkflow.md +78 -0
  16. data/LICENSE +202 -0
  17. data/MAINTAINERS.md +7 -0
  18. data/README.md +23 -11
  19. data/Rakefile +48 -2
  20. data/Vagrantfile +17 -0
  21. data/appveyor.yml +37 -0
  22. data/bin/fluent-binlog-reader +7 -0
  23. data/bin/fluent-ca-generate +6 -0
  24. data/bin/fluent-plugin-config-format +5 -0
  25. data/bin/fluent-plugin-generate +5 -0
  26. data/bin/fluentd +3 -0
  27. data/code-of-conduct.md +3 -0
  28. data/example/copy_roundrobin.conf +39 -0
  29. data/example/counter.conf +18 -0
  30. data/example/in_dummy_blocks.conf +17 -0
  31. data/example/in_dummy_with_compression.conf +23 -0
  32. data/example/in_forward.conf +7 -0
  33. data/example/in_forward_client.conf +37 -0
  34. data/example/in_forward_shared_key.conf +15 -0
  35. data/example/in_forward_tls.conf +14 -0
  36. data/example/in_forward_users.conf +24 -0
  37. data/example/in_forward_workers.conf +21 -0
  38. data/example/in_http.conf +3 -1
  39. data/example/in_out_forward.conf +17 -0
  40. data/example/logevents.conf +25 -0
  41. data/example/multi_filters.conf +61 -0
  42. data/example/out_exec_filter.conf +42 -0
  43. data/example/out_forward.conf +13 -13
  44. data/example/out_forward_buf_file.conf +23 -0
  45. data/example/out_forward_client.conf +109 -0
  46. data/example/out_forward_heartbeat_none.conf +16 -0
  47. data/example/out_forward_shared_key.conf +36 -0
  48. data/example/out_forward_tls.conf +18 -0
  49. data/example/out_forward_users.conf +65 -0
  50. data/example/out_null.conf +36 -0
  51. data/example/secondary_file.conf +42 -0
  52. data/example/suppress_config_dump.conf +7 -0
  53. data/example/worker_section.conf +36 -0
  54. data/fluent.conf +29 -0
  55. data/fluentd.gemspec +21 -11
  56. data/lib/fluent/agent.rb +67 -90
  57. data/lib/fluent/clock.rb +62 -0
  58. data/lib/fluent/command/binlog_reader.rb +244 -0
  59. data/lib/fluent/command/ca_generate.rb +181 -0
  60. data/lib/fluent/command/cat.rb +42 -18
  61. data/lib/fluent/command/debug.rb +12 -10
  62. data/lib/fluent/command/fluentd.rb +153 -5
  63. data/lib/fluent/command/plugin_config_formatter.rb +292 -0
  64. data/lib/fluent/command/plugin_generator.rb +324 -0
  65. data/lib/fluent/compat/call_super_mixin.rb +67 -0
  66. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  67. data/lib/fluent/compat/exec_util.rb +129 -0
  68. data/lib/fluent/compat/file_util.rb +54 -0
  69. data/lib/fluent/compat/filter.rb +68 -0
  70. data/lib/fluent/compat/formatter.rb +111 -0
  71. data/lib/fluent/compat/formatter_utils.rb +85 -0
  72. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  73. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  74. data/lib/fluent/compat/input.rb +49 -0
  75. data/lib/fluent/compat/output.rb +718 -0
  76. data/lib/fluent/compat/output_chain.rb +60 -0
  77. data/lib/fluent/compat/parser.rb +310 -0
  78. data/lib/fluent/compat/parser_utils.rb +40 -0
  79. data/lib/fluent/compat/propagate_default.rb +62 -0
  80. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  81. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  82. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  83. data/lib/fluent/compat/socket_util.rb +165 -0
  84. data/lib/fluent/compat/string_util.rb +34 -0
  85. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  86. data/lib/fluent/compat/type_converter.rb +90 -0
  87. data/lib/fluent/config/configure_proxy.rb +210 -62
  88. data/lib/fluent/config/dsl.rb +12 -5
  89. data/lib/fluent/config/element.rb +107 -9
  90. data/lib/fluent/config/literal_parser.rb +9 -3
  91. data/lib/fluent/config/parser.rb +4 -4
  92. data/lib/fluent/config/section.rb +51 -14
  93. data/lib/fluent/config/types.rb +28 -13
  94. data/lib/fluent/config/v1_parser.rb +3 -5
  95. data/lib/fluent/config.rb +23 -20
  96. data/lib/fluent/configurable.rb +79 -21
  97. data/lib/fluent/counter/base_socket.rb +46 -0
  98. data/lib/fluent/counter/client.rb +297 -0
  99. data/lib/fluent/counter/error.rb +86 -0
  100. data/lib/fluent/counter/mutex_hash.rb +163 -0
  101. data/lib/fluent/counter/server.rb +273 -0
  102. data/lib/fluent/counter/store.rb +205 -0
  103. data/lib/fluent/counter/validator.rb +145 -0
  104. data/lib/fluent/counter.rb +23 -0
  105. data/lib/fluent/daemon.rb +15 -0
  106. data/lib/fluent/engine.rb +102 -65
  107. data/lib/fluent/env.rb +7 -3
  108. data/lib/fluent/error.rb +30 -0
  109. data/lib/fluent/event.rb +197 -21
  110. data/lib/fluent/event_router.rb +93 -10
  111. data/lib/fluent/filter.rb +2 -50
  112. data/lib/fluent/formatter.rb +4 -293
  113. data/lib/fluent/input.rb +2 -32
  114. data/lib/fluent/label.rb +10 -2
  115. data/lib/fluent/load.rb +3 -3
  116. data/lib/fluent/log.rb +348 -81
  117. data/lib/fluent/match.rb +37 -36
  118. data/lib/fluent/mixin.rb +12 -176
  119. data/lib/fluent/msgpack_factory.rb +62 -0
  120. data/lib/fluent/output.rb +10 -612
  121. data/lib/fluent/output_chain.rb +23 -0
  122. data/lib/fluent/parser.rb +4 -800
  123. data/lib/fluent/plugin/bare_output.rb +63 -0
  124. data/lib/fluent/plugin/base.rb +192 -0
  125. data/lib/fluent/plugin/buf_file.rb +128 -174
  126. data/lib/fluent/plugin/buf_memory.rb +9 -92
  127. data/lib/fluent/plugin/buffer/chunk.rb +221 -0
  128. data/lib/fluent/plugin/buffer/file_chunk.rb +383 -0
  129. data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
  130. data/lib/fluent/plugin/buffer.rb +779 -0
  131. data/lib/fluent/plugin/compressable.rb +92 -0
  132. data/lib/fluent/plugin/exec_util.rb +3 -108
  133. data/lib/fluent/plugin/file_util.rb +4 -34
  134. data/lib/fluent/plugin/file_wrapper.rb +120 -0
  135. data/lib/fluent/plugin/filter.rb +93 -0
  136. data/lib/fluent/plugin/filter_grep.rb +117 -34
  137. data/lib/fluent/plugin/filter_parser.rb +85 -62
  138. data/lib/fluent/plugin/filter_record_transformer.rb +27 -39
  139. data/lib/fluent/plugin/filter_stdout.rb +15 -12
  140. data/lib/fluent/plugin/formatter.rb +50 -0
  141. data/lib/fluent/plugin/formatter_csv.rb +52 -0
  142. data/lib/fluent/plugin/formatter_hash.rb +33 -0
  143. data/lib/fluent/plugin/formatter_json.rb +55 -0
  144. data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
  145. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  146. data/lib/fluent/plugin/formatter_out_file.rb +51 -0
  147. data/lib/fluent/plugin/formatter_single_value.rb +34 -0
  148. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  149. data/lib/fluent/plugin/formatter_tsv.rb +38 -0
  150. data/lib/fluent/plugin/in_debug_agent.rb +17 -6
  151. data/lib/fluent/plugin/in_dummy.rb +47 -20
  152. data/lib/fluent/plugin/in_exec.rb +55 -123
  153. data/lib/fluent/plugin/in_forward.rb +299 -216
  154. data/lib/fluent/plugin/in_gc_stat.rb +14 -36
  155. data/lib/fluent/plugin/in_http.rb +204 -91
  156. data/lib/fluent/plugin/in_monitor_agent.rb +186 -258
  157. data/lib/fluent/plugin/in_object_space.rb +13 -41
  158. data/lib/fluent/plugin/in_syslog.rb +112 -134
  159. data/lib/fluent/plugin/in_tail.rb +408 -745
  160. data/lib/fluent/plugin/in_tcp.rb +66 -9
  161. data/lib/fluent/plugin/in_udp.rb +60 -11
  162. data/lib/fluent/plugin/{in_stream.rb → in_unix.rb} +8 -4
  163. data/lib/fluent/plugin/input.rb +37 -0
  164. data/lib/fluent/plugin/multi_output.rb +158 -0
  165. data/lib/fluent/plugin/out_copy.rb +23 -35
  166. data/lib/fluent/plugin/out_exec.rb +67 -70
  167. data/lib/fluent/plugin/out_exec_filter.rb +204 -271
  168. data/lib/fluent/plugin/out_file.rb +267 -73
  169. data/lib/fluent/plugin/out_forward.rb +854 -325
  170. data/lib/fluent/plugin/out_null.rb +42 -9
  171. data/lib/fluent/plugin/out_relabel.rb +9 -5
  172. data/lib/fluent/plugin/out_roundrobin.rb +18 -37
  173. data/lib/fluent/plugin/out_secondary_file.rb +133 -0
  174. data/lib/fluent/plugin/out_stdout.rb +43 -10
  175. data/lib/fluent/plugin/out_stream.rb +7 -2
  176. data/lib/fluent/plugin/output.rb +1498 -0
  177. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  178. data/lib/fluent/plugin/parser.rb +191 -0
  179. data/lib/fluent/plugin/parser_apache.rb +28 -0
  180. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  181. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  182. data/lib/fluent/plugin/parser_csv.rb +39 -0
  183. data/lib/fluent/plugin/parser_json.rb +94 -0
  184. data/lib/fluent/plugin/parser_ltsv.rb +49 -0
  185. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  186. data/lib/fluent/plugin/parser_multiline.rb +106 -0
  187. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  188. data/lib/fluent/plugin/parser_none.rb +36 -0
  189. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  190. data/lib/fluent/plugin/parser_syslog.rb +142 -0
  191. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  192. data/lib/fluent/plugin/socket_util.rb +3 -143
  193. data/lib/fluent/plugin/storage.rb +84 -0
  194. data/lib/fluent/plugin/storage_local.rb +164 -0
  195. data/lib/fluent/plugin/string_util.rb +3 -15
  196. data/lib/fluent/plugin.rb +122 -121
  197. data/lib/fluent/plugin_helper/cert_option.rb +178 -0
  198. data/lib/fluent/plugin_helper/child_process.rb +364 -0
  199. data/lib/fluent/plugin_helper/compat_parameters.rb +333 -0
  200. data/lib/fluent/plugin_helper/counter.rb +51 -0
  201. data/lib/fluent/plugin_helper/event_emitter.rb +93 -0
  202. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  203. data/lib/fluent/plugin_helper/extract.rb +104 -0
  204. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  205. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  206. data/lib/fluent/plugin_helper/http_server/compat/server.rb +81 -0
  207. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  208. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  209. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  210. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  211. data/lib/fluent/plugin_helper/http_server/server.rb +87 -0
  212. data/lib/fluent/plugin_helper/http_server.rb +76 -0
  213. data/lib/fluent/plugin_helper/inject.rb +151 -0
  214. data/lib/fluent/plugin_helper/parser.rb +147 -0
  215. data/lib/fluent/plugin_helper/record_accessor.rb +210 -0
  216. data/lib/fluent/plugin_helper/retry_state.rb +205 -0
  217. data/lib/fluent/plugin_helper/server.rb +807 -0
  218. data/lib/fluent/plugin_helper/socket.rb +250 -0
  219. data/lib/fluent/plugin_helper/socket_option.rb +80 -0
  220. data/lib/fluent/plugin_helper/storage.rb +349 -0
  221. data/lib/fluent/plugin_helper/thread.rb +179 -0
  222. data/lib/fluent/plugin_helper/timer.rb +92 -0
  223. data/lib/fluent/plugin_helper.rb +73 -0
  224. data/lib/fluent/plugin_id.rb +80 -0
  225. data/lib/fluent/process.rb +3 -489
  226. data/lib/fluent/registry.rb +52 -10
  227. data/lib/fluent/root_agent.rb +204 -42
  228. data/lib/fluent/supervisor.rb +597 -359
  229. data/lib/fluent/system_config.rb +131 -42
  230. data/lib/fluent/test/base.rb +6 -54
  231. data/lib/fluent/test/driver/base.rb +224 -0
  232. data/lib/fluent/test/driver/base_owned.rb +70 -0
  233. data/lib/fluent/test/driver/base_owner.rb +135 -0
  234. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  235. data/lib/fluent/test/driver/filter.rb +57 -0
  236. data/lib/fluent/test/driver/formatter.rb +30 -0
  237. data/lib/fluent/test/driver/input.rb +31 -0
  238. data/lib/fluent/test/driver/multi_output.rb +53 -0
  239. data/lib/fluent/test/driver/output.rb +102 -0
  240. data/lib/fluent/test/driver/parser.rb +30 -0
  241. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  242. data/lib/fluent/test/filter_test.rb +0 -1
  243. data/lib/fluent/test/formatter_test.rb +4 -1
  244. data/lib/fluent/test/helpers.rb +58 -10
  245. data/lib/fluent/test/input_test.rb +27 -19
  246. data/lib/fluent/test/log.rb +79 -0
  247. data/lib/fluent/test/output_test.rb +28 -39
  248. data/lib/fluent/test/parser_test.rb +3 -1
  249. data/lib/fluent/test/startup_shutdown.rb +46 -0
  250. data/lib/fluent/test.rb +33 -1
  251. data/lib/fluent/time.rb +450 -1
  252. data/lib/fluent/timezone.rb +27 -3
  253. data/lib/fluent/{status.rb → unique_id.rb} +15 -24
  254. data/lib/fluent/version.rb +1 -1
  255. data/lib/fluent/winsvc.rb +85 -0
  256. data/templates/new_gem/Gemfile +3 -0
  257. data/templates/new_gem/README.md.erb +43 -0
  258. data/templates/new_gem/Rakefile +13 -0
  259. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  260. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  261. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  262. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  263. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  264. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  265. data/templates/new_gem/test/helper.rb.erb +8 -0
  266. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  267. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  268. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  269. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  270. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  271. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  272. data/templates/plugin_config_formatter/param.md.erb +34 -0
  273. data/templates/plugin_config_formatter/section.md.erb +12 -0
  274. data/test/command/test_binlog_reader.rb +346 -0
  275. data/test/command/test_ca_generate.rb +70 -0
  276. data/test/command/test_fluentd.rb +901 -0
  277. data/test/command/test_plugin_config_formatter.rb +276 -0
  278. data/test/command/test_plugin_generator.rb +92 -0
  279. data/test/compat/test_calls_super.rb +166 -0
  280. data/test/compat/test_parser.rb +92 -0
  281. data/test/config/test_config_parser.rb +126 -2
  282. data/test/config/test_configurable.rb +946 -187
  283. data/test/config/test_configure_proxy.rb +424 -74
  284. data/test/config/test_dsl.rb +11 -11
  285. data/test/config/test_element.rb +500 -0
  286. data/test/config/test_literal_parser.rb +8 -0
  287. data/test/config/test_plugin_configuration.rb +56 -0
  288. data/test/config/test_section.rb +79 -7
  289. data/test/config/test_system_config.rb +122 -35
  290. data/test/config/test_types.rb +38 -0
  291. data/test/counter/test_client.rb +559 -0
  292. data/test/counter/test_error.rb +44 -0
  293. data/test/counter/test_mutex_hash.rb +179 -0
  294. data/test/counter/test_server.rb +589 -0
  295. data/test/counter/test_store.rb +258 -0
  296. data/test/counter/test_validator.rb +137 -0
  297. data/test/helper.rb +89 -6
  298. data/test/helpers/fuzzy_assert.rb +89 -0
  299. data/test/plugin/test_bare_output.rb +118 -0
  300. data/test/plugin/test_base.rb +115 -0
  301. data/test/plugin/test_buf_file.rb +823 -460
  302. data/test/plugin/test_buf_memory.rb +32 -194
  303. data/test/plugin/test_buffer.rb +1233 -0
  304. data/test/plugin/test_buffer_chunk.rb +198 -0
  305. data/test/plugin/test_buffer_file_chunk.rb +844 -0
  306. data/test/plugin/test_buffer_memory_chunk.rb +338 -0
  307. data/test/plugin/test_compressable.rb +84 -0
  308. data/test/plugin/test_filter.rb +357 -0
  309. data/test/plugin/test_filter_grep.rb +540 -29
  310. data/test/plugin/test_filter_parser.rb +439 -452
  311. data/test/plugin/test_filter_record_transformer.rb +123 -166
  312. data/test/plugin/test_filter_stdout.rb +160 -72
  313. data/test/plugin/test_formatter_csv.rb +111 -0
  314. data/test/plugin/test_formatter_hash.rb +35 -0
  315. data/test/plugin/test_formatter_json.rb +51 -0
  316. data/test/plugin/test_formatter_ltsv.rb +62 -0
  317. data/test/plugin/test_formatter_msgpack.rb +28 -0
  318. data/test/plugin/test_formatter_out_file.rb +95 -0
  319. data/test/plugin/test_formatter_single_value.rb +38 -0
  320. data/test/plugin/test_formatter_tsv.rb +68 -0
  321. data/test/plugin/test_in_debug_agent.rb +24 -1
  322. data/test/plugin/test_in_dummy.rb +111 -18
  323. data/test/plugin/test_in_exec.rb +200 -113
  324. data/test/plugin/test_in_forward.rb +990 -387
  325. data/test/plugin/test_in_gc_stat.rb +10 -8
  326. data/test/plugin/test_in_http.rb +600 -224
  327. data/test/plugin/test_in_monitor_agent.rb +690 -0
  328. data/test/plugin/test_in_object_space.rb +24 -8
  329. data/test/plugin/test_in_syslog.rb +154 -215
  330. data/test/plugin/test_in_tail.rb +1006 -707
  331. data/test/plugin/test_in_tcp.rb +125 -48
  332. data/test/plugin/test_in_udp.rb +204 -63
  333. data/test/plugin/{test_in_stream.rb → test_in_unix.rb} +14 -13
  334. data/test/plugin/test_input.rb +126 -0
  335. data/test/plugin/test_metadata.rb +89 -0
  336. data/test/plugin/test_multi_output.rb +180 -0
  337. data/test/plugin/test_out_copy.rb +117 -112
  338. data/test/plugin/test_out_exec.rb +258 -53
  339. data/test/plugin/test_out_exec_filter.rb +538 -115
  340. data/test/plugin/test_out_file.rb +865 -178
  341. data/test/plugin/test_out_forward.rb +998 -210
  342. data/test/plugin/test_out_null.rb +105 -0
  343. data/test/plugin/test_out_relabel.rb +28 -0
  344. data/test/plugin/test_out_roundrobin.rb +36 -29
  345. data/test/plugin/test_out_secondary_file.rb +458 -0
  346. data/test/plugin/test_out_stdout.rb +135 -37
  347. data/test/plugin/test_out_stream.rb +18 -0
  348. data/test/plugin/test_output.rb +984 -0
  349. data/test/plugin/test_output_as_buffered.rb +2021 -0
  350. data/test/plugin/test_output_as_buffered_backup.rb +312 -0
  351. data/test/plugin/test_output_as_buffered_compress.rb +165 -0
  352. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  353. data/test/plugin/test_output_as_buffered_retries.rb +911 -0
  354. data/test/plugin/test_output_as_buffered_secondary.rb +874 -0
  355. data/test/plugin/test_output_as_standard.rb +374 -0
  356. data/test/plugin/test_owned_by.rb +35 -0
  357. data/test/plugin/test_parser.rb +359 -0
  358. data/test/plugin/test_parser_apache.rb +42 -0
  359. data/test/plugin/test_parser_apache2.rb +47 -0
  360. data/test/plugin/test_parser_apache_error.rb +45 -0
  361. data/test/plugin/test_parser_csv.rb +103 -0
  362. data/test/plugin/test_parser_json.rb +138 -0
  363. data/test/plugin/test_parser_labeled_tsv.rb +145 -0
  364. data/test/plugin/test_parser_multiline.rb +100 -0
  365. data/test/plugin/test_parser_nginx.rb +88 -0
  366. data/test/plugin/test_parser_none.rb +52 -0
  367. data/test/plugin/test_parser_regexp.rb +289 -0
  368. data/test/plugin/test_parser_syslog.rb +441 -0
  369. data/test/plugin/test_parser_tsv.rb +122 -0
  370. data/test/plugin/test_storage.rb +167 -0
  371. data/test/plugin/test_storage_local.rb +335 -0
  372. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  373. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  374. data/test/plugin_helper/data/cert/cert.pem +19 -0
  375. data/test/plugin_helper/http_server/test_app.rb +65 -0
  376. data/test/plugin_helper/http_server/test_route.rb +32 -0
  377. data/test/plugin_helper/test_cert_option.rb +16 -0
  378. data/test/plugin_helper/test_child_process.rb +794 -0
  379. data/test/plugin_helper/test_compat_parameters.rb +353 -0
  380. data/test/plugin_helper/test_event_emitter.rb +51 -0
  381. data/test/plugin_helper/test_event_loop.rb +52 -0
  382. data/test/plugin_helper/test_extract.rb +194 -0
  383. data/test/plugin_helper/test_formatter.rb +255 -0
  384. data/test/plugin_helper/test_http_server_helper.rb +205 -0
  385. data/test/plugin_helper/test_inject.rb +519 -0
  386. data/test/plugin_helper/test_parser.rb +264 -0
  387. data/test/plugin_helper/test_record_accessor.rb +197 -0
  388. data/test/plugin_helper/test_retry_state.rb +442 -0
  389. data/test/plugin_helper/test_server.rb +1714 -0
  390. data/test/plugin_helper/test_storage.rb +542 -0
  391. data/test/plugin_helper/test_thread.rb +164 -0
  392. data/test/plugin_helper/test_timer.rb +132 -0
  393. data/test/scripts/exec_script.rb +0 -6
  394. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  395. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  396. data/test/scripts/fluent/plugin/out_test.rb +23 -15
  397. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  398. data/test/test_clock.rb +164 -0
  399. data/test/test_config.rb +16 -7
  400. data/test/test_configdsl.rb +2 -2
  401. data/test/test_event.rb +360 -13
  402. data/test/test_event_router.rb +108 -11
  403. data/test/test_event_time.rb +199 -0
  404. data/test/test_filter.rb +48 -6
  405. data/test/test_formatter.rb +11 -391
  406. data/test/test_input.rb +1 -1
  407. data/test/test_log.rb +591 -31
  408. data/test/test_mixin.rb +1 -1
  409. data/test/test_output.rb +121 -185
  410. data/test/test_plugin.rb +251 -0
  411. data/test/test_plugin_classes.rb +177 -10
  412. data/test/test_plugin_helper.rb +81 -0
  413. data/test/test_plugin_id.rb +101 -0
  414. data/test/test_process.rb +8 -42
  415. data/test/test_root_agent.rb +766 -21
  416. data/test/test_supervisor.rb +481 -0
  417. data/test/test_test_drivers.rb +135 -0
  418. data/test/test_time_formatter.rb +282 -0
  419. data/test/test_time_parser.rb +231 -0
  420. data/test/test_unique_id.rb +47 -0
  421. metadata +454 -60
  422. data/COPYING +0 -14
  423. data/ChangeLog +0 -666
  424. data/lib/fluent/buffer.rb +0 -365
  425. data/lib/fluent/plugin/in_status.rb +0 -76
  426. data/test/plugin/test_in_status.rb +0 -38
  427. data/test/test_buffer.rb +0 -624
  428. data/test/test_parser.rb +0 -1305
@@ -14,495 +14,9 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
- require 'thread'
18
-
19
- require 'fluent/config'
20
- require 'fluent/engine'
21
- require 'fluent/event'
17
+ require 'fluent/compat/detach_process_mixin'
22
18
 
23
19
  module Fluent
24
- class DetachProcessManager
25
- require 'singleton'
26
- include Singleton
27
-
28
- class Broker
29
- def initialize
30
- end
31
-
32
- def engine
33
- Engine
34
- end
35
- end
36
-
37
- def initialize
38
- require 'drb'
39
- DRb.start_service(create_drb_uri, Broker.new)
40
- @parent_uri = DRb.uri
41
- end
42
-
43
- def fork(forward_interval, delegate_object)
44
- ipr, ipw = IO.pipe # child Engine.emit_stream -> parent Engine.emit_stream
45
- opr, opw = IO.pipe # parent target.emit -> child target.emit
46
-
47
- pid = Process.fork
48
- if pid
49
- # parent process
50
- ipw.close
51
- opr.close
52
- forward_thread = process_parent(ipr, opw, pid, forward_interval, delegate_object)
53
- return pid, forward_thread
54
- end
55
-
56
- # child process
57
- ipr.close
58
- opw.close
59
- forward_thread = process_child(ipw, opr, forward_interval, delegate_object)
60
- return nil, forward_thread
61
- end
62
-
63
- private
64
- def read_header(ipr)
65
- sz = ipr.read(4).unpack('N')[0]
66
- ipr.read(sz)
67
- end
68
-
69
- def send_header(ipw, data)
70
- ipw.write [data.bytesize].pack('N')
71
- ipw.write data
72
- ipw.flush
73
- end
74
-
75
- def create_drb_uri
76
- "drbunix:" # TODO
77
- end
78
-
79
- private
80
- def process_child(ipw, opr, forward_interval, delegate_object)
81
- DRb.start_service(create_drb_uri, delegate_object)
82
- child_uri = DRb.uri
83
-
84
- send_header(ipw, child_uri)
85
-
86
- # override target.emit_stream to write event stream to the pipe
87
- fwd = new_forwarder(ipw, forward_interval)
88
- Engine.define_singleton_method(:emit_stream) do |tag,es|
89
- fwd.emit(tag, es)
90
- end
91
-
92
- # read event stream from the pipe and forward to target.emit
93
- forward_thread = Thread.new(opr, delegate_object, &method(:output_forward_main))
94
-
95
- # override global methods to call parent process
96
- override_shared_methods(@parent_uri)
97
-
98
- return forward_thread
99
- end
100
-
101
- def override_shared_methods(parent_uri)
102
- broker = DRbObject.new_with_uri(parent_uri)
103
- shared_methods.each {|(broker_accessor,target,name)|
104
- remote = broker.send(broker_accessor)
105
- target.define_singleton_method(name) do |*args,&block|
106
- remote.send(name, *args, &block)
107
- end
108
- }
109
- end
110
-
111
- def shared_methods
112
- [
113
- #[:engine, Engine, :flush!],
114
- #[:engine, Engine, :stop],
115
- ]
116
- end
117
-
118
- def process_parent(ipr, opw, pid, forward_interval, delegate_object)
119
- child_uri = read_header(ipr)
120
-
121
- # read event stream from the pipe and forward to Engine.emit_stream
122
- forward_thread = Thread.new(ipr, pid, &method(:input_forward_main))
123
-
124
- # note: don't override methods in parent process
125
- # because another process may fork after overriding
126
- #override_delegate_methods(delegate_object, child_uri)
127
-
128
- # return forwarder for DetachProcessMixin to
129
- # override target.emit and write event stream to the pipe
130
- fwd = new_forwarder(opw, forward_interval)
131
- # note: override emit method on DetachProcessMixin
132
- forward_thread.define_singleton_method(:forwarder) do
133
- fwd
134
- end
135
-
136
- return forward_thread
137
- end
138
-
139
- #def override_delegate_methods(target, child_uri)
140
- # remote = DRbObject.new_with_uri(child_uri)
141
- # delegate_methods(target).each {|name|
142
- # target.define_singleton_method(name) do |*args,&block|
143
- # remote.send(name, *args, &block)
144
- # end
145
- # }
146
- #end
147
- #
148
- #def delegate_methods(target)
149
- # target.methods - Object.public_instance_methods
150
- #end
151
-
152
- def output_forward_main(opr, target)
153
- read_event_stream(opr) {|tag,es|
154
- # FIXME error handling
155
- begin
156
- target.emit(tag, es, NullOutputChain.instance)
157
- rescue
158
- $log.warn "failed to emit", error: $!.to_s, pid: Process.pid
159
- $log.warn_backtrace
160
- end
161
- }
162
- rescue
163
- $log.error "error on output process forwarding thread", error: $!.to_s, pid: Process.pid
164
- $log.error_backtrace
165
- raise
166
- end
167
-
168
- def input_forward_main(ipr, pid)
169
- read_event_stream(ipr) {|tag,es|
170
- # FIXME error handling
171
- begin
172
- Engine.emit_stream(tag, es)
173
- rescue
174
- $log.warn "failed to emit", error: $!.to_s, pid: Process.pid
175
- $log.warn_backtrace
176
- end
177
- }
178
- rescue
179
- $log.error "error on input process forwarding thread", error: $!.to_s, pid: Process.pid
180
- $log.error_backtrace
181
- raise
182
- end
183
-
184
- def read_event_stream(r, &block)
185
- u = Fluent::Engine.msgpack_factory.unpacker(r)
186
- begin
187
- #buf = ''
188
- #map = {}
189
- #while true
190
- # r.readpartial(64*1024, buf)
191
- # u.feed_each(buf) {|tag,ms|
192
- # if msbuf = map[tag]
193
- # msbuf << ms
194
- # else
195
- # map[tag] = ms
196
- # end
197
- # }
198
- # unless map.empty?
199
- # map.each_pair {|tag,ms|
200
- # es = MessagePackEventStream.new(ms)
201
- # block.call(tag, es)
202
- # }
203
- # map.clear
204
- # end
205
- #end
206
- u.each {|tag,ms|
207
- es = MessagePackEventStream.new(ms)
208
- block.call(tag, es)
209
- }
210
- rescue EOFError
211
- ensure
212
- r.close
213
- end
214
- end
215
-
216
- def new_forwarder(w, interval)
217
- if interval < 0.2 # TODO interval
218
- Forwarder.new(w)
219
- else
220
- DelayedForwarder.new(w, interval)
221
- end
222
- end
223
-
224
- class Forwarder
225
- def initialize(w)
226
- @w = w
227
- end
228
-
229
- def emit(tag, es)
230
- ms = es.to_msgpack_stream
231
- #[tag, ms].to_msgpack(@w) # not thread safe
232
- @w.write [tag, ms].to_msgpack
233
- end
234
- end
235
-
236
- class DelayedForwarder
237
- def initialize(w, interval)
238
- @w = w
239
- @interval = interval
240
- @buffer = {}
241
- @mutex = Mutex.new
242
- Thread.new(&method(:run))
243
- end
244
-
245
- def emit(tag, es)
246
- stream = es.to_msgpack_stream
247
- @mutex.synchronize do
248
- if @buffer[tag]
249
- @buffer[tag] << stream
250
- else
251
- @buffer[tag] = stream
252
- end
253
- end
254
- end
255
-
256
- def run
257
- while true
258
- sleep @interval
259
-
260
- pairs = []
261
- @mutex.synchronize do
262
- @buffer.keys.each do |tag|
263
- if ms = @buffer.delete(tag)
264
- pairs << [tag, ms]
265
- end
266
- end
267
- end
268
- pairs.each do |pair|
269
- pair.to_msgpack(@w)
270
- end
271
- end
272
- rescue
273
- $log.error "error on forwerder thread", error: $!.to_s
274
- $log.error_backtrace
275
- raise
276
- end
277
- end
278
-
279
- class MultiForwarder
280
- def initialize(forwarders)
281
- @forwarders = forwarders
282
- @rr = 1
283
- end
284
-
285
- def emit(tag, es)
286
- forwarder = @forwarders[@rr]
287
- @rr = (@rr + 1) % @forwarders.length
288
- forwarder.emit(tag, es)
289
- end
290
- end
291
- end
292
-
293
-
294
- module DetachProcessImpl
295
- def on_detach_process(i)
296
- end
297
-
298
- def on_exit_process(i)
299
- end
300
-
301
- private
302
-
303
- def detach_process_impl(num, forward_interval, &block)
304
- children = []
305
-
306
- num.times do |i|
307
- pid, forward_thread = DetachProcessManager.instance.fork(forward_interval, self)
308
-
309
- if pid
310
- # parent process
311
- $log.info "detached process", class: self.class, pid: pid
312
- children << [pid, forward_thread]
313
- next
314
- end
315
-
316
- # child process
317
- begin
318
- on_detach_process(i)
319
-
320
- block.call
321
-
322
- # disable Engine.stop called by signal handler
323
- Engine.define_singleton_method(:stop) do
324
- # do nothing
325
- end
326
-
327
- # override signal handlers called by parent process
328
- fin = FinishWait.new
329
- trap :INT do
330
- fin.stop
331
- end
332
- trap :TERM do
333
- fin.stop
334
- end
335
- #forward_thread.join # TODO this thread won't stop because parent doesn't close pipe
336
- fin.wait
337
-
338
- on_exit_process(i)
339
- exit! 0
340
- ensure
341
- $log.error "unknown error while shutting down this child process", error: $!.to_s, pid: Process.pid
342
- $log.error_backtrace
343
- end
344
-
345
- exit! 1
346
- end
347
-
348
- # parent process
349
- # override shutdown method to kill child processes
350
- define_singleton_method(:shutdown) do
351
- children.each {|pair|
352
- begin
353
- pid = pair[0]
354
- forward_thread = pair[1]
355
- if pid
356
- Process.kill(:TERM, pid)
357
- forward_thread.join # wait until child closes pipe
358
- Process.waitpid(pid)
359
- pair[0] = nil
360
- end
361
- rescue
362
- $log.error "unknown error while shutting down remote child process", error: $!.to_s
363
- $log.error_backtrace
364
- end
365
- }
366
- end
367
-
368
- # override target.emit and write event stream to the pipe
369
- forwarders = children.map {|pair| pair[1].forwarder }
370
- if forwarders.length > 1
371
- # use roundrobin
372
- fwd = DetachProcessManager::MultiForwarder.new(forwarders)
373
- else
374
- fwd = forwarders[0]
375
- end
376
- define_singleton_method(:emit) do |tag,es,chain|
377
- chain.next
378
- fwd.emit(tag, es)
379
- end
380
- end
381
-
382
- class FinishWait
383
- def initialize
384
- @finished = false
385
- @mutex = Mutex.new
386
- @cond = ConditionVariable.new
387
- end
388
-
389
- def wait
390
- @mutex.synchronize do
391
- until @finished
392
- @cond.wait(@mutex, 1.0)
393
- end
394
- end
395
- end
396
-
397
- def stop
398
- return if @finished
399
- @finished = true
400
- # Creating new thread due to mutex can't lock in main thread during trap context
401
- Thread.new {
402
- @mutex.synchronize do
403
- @cond.broadcast
404
- end
405
- }.run
406
- end
407
-
408
- def finished?
409
- @finished
410
- end
411
- end
412
- end
413
-
414
-
415
- module DetachProcessMixin
416
- include DetachProcessImpl
417
-
418
- def configure(conf)
419
- super
420
-
421
- if detach_process = conf['detach_process']
422
- b3v = Config.bool_value(detach_process)
423
- case b3v
424
- when nil
425
- num = detach_process.to_i
426
- if num > 1
427
- $log.warn "'detach_process' parameter supports only 1 process on this plugin: #{conf}"
428
- elsif num > 0
429
- @detach_process = true
430
- elsif detach_process =~ /0+/
431
- @detach_process = false
432
- else
433
- @detach_process = true
434
- end
435
- when true
436
- @detach_process = true
437
- when false
438
- @detach_process = false
439
- end
440
- end
441
-
442
- if forward_interval = conf['detach_process_forward_interval']
443
- @forward_interval = Config.time_value(forward_interval)
444
- else
445
- @forward_interval = 0.5
446
- end
447
- end
448
-
449
- def detach_process(&block)
450
- if @detach_process
451
- detach_process_impl(1, @forward_interval, &block)
452
- else
453
- block.call
454
- end
455
- end
456
- end
457
-
458
-
459
- module DetachMultiProcessMixin
460
- include DetachProcessImpl
461
-
462
- def initialize
463
- @detach_process_num = 2
464
- super
465
- end
466
-
467
- def configure(conf)
468
- super
469
-
470
- if detach_process = conf['detach_process']
471
- b3v = Config.bool_value(detach_process)
472
- case b3v
473
- when nil
474
- num = detach_process.to_i
475
- if num > 0
476
- @detach_process = true
477
- @detach_process_num = num
478
- elsif detach_process =~ /0+/
479
- @detach_process = false
480
- else
481
- @detach_process = true
482
- end
483
- when true
484
- @detach_process = true
485
- when false
486
- @detach_process = false
487
- end
488
- end
489
-
490
- if forward_interval = conf['detach_process_forward_interval']
491
- @forward_interval = Config.time_value(forward_interval)
492
- else
493
- @forward_interval = 0.5
494
- end
495
- end
496
-
497
- private
498
-
499
- def detach_multi_process(&block)
500
- if @detach_process
501
- detach_process_impl(@detach_process_num, @forward_interval, &block)
502
- else
503
- block.call
504
- end
505
- end
506
- end
20
+ DetachProcessMixin = Fluent::Compat::DetachProcessMixin
21
+ DetachMultiProcessMixin = Fluent::Compat::DetachMultiProcessMixin
507
22
  end
508
-
@@ -18,13 +18,18 @@ require 'fluent/config/error'
18
18
 
19
19
  module Fluent
20
20
  class Registry
21
- def initialize(kind, search_prefix)
21
+ DEFAULT_PLUGIN_PATH = File.expand_path('../plugin', __FILE__)
22
+ FLUENT_LIB_PATH = File.dirname(File.dirname(DEFAULT_PLUGIN_PATH))
23
+
24
+ def initialize(kind, search_prefix, dir_search_prefix: nil)
22
25
  @kind = kind
23
26
  @search_prefix = search_prefix
27
+ @dir_search_prefix = dir_search_prefix
24
28
  @map = {}
29
+ @paths = []
25
30
  end
26
31
 
27
- attr_reader :kind
32
+ attr_reader :kind, :paths, :map, :dir_search_prefix
28
33
 
29
34
  def register(type, value)
30
35
  type = type.to_sym
@@ -43,13 +48,38 @@ module Fluent
43
48
  raise ConfigError, "Unknown #{@kind} plugin '#{type}'. Run 'gem search -rd fluent-plugin' to find plugins" # TODO error class
44
49
  end
45
50
 
51
+ def reverse_lookup(value)
52
+ @map.each do |k, v|
53
+ return k if v == value
54
+ end
55
+ nil
56
+ end
57
+
46
58
  def search(type)
59
+ # search from additional plugin directories
60
+ if @dir_search_prefix
61
+ path = "#{@dir_search_prefix}#{type}"
62
+ files = @paths.map { |lp|
63
+ lpath = File.expand_path(File.join(lp, "#{path}.rb"))
64
+ File.exist?(lpath) ? lpath : nil
65
+ }.compact
66
+ unless files.empty?
67
+ # prefer newer version
68
+ require files.sort.last
69
+ return
70
+ end
71
+ end
72
+
47
73
  path = "#{@search_prefix}#{type}"
48
74
 
49
75
  # prefer LOAD_PATH than gems
50
76
  files = $LOAD_PATH.map { |lp|
51
- lpath = File.expand_path(File.join(lp, "#{path}.rb"))
52
- File.exist?(lpath) ? lpath : nil
77
+ if lp == FLUENT_LIB_PATH
78
+ nil
79
+ else
80
+ lpath = File.expand_path(File.join(lp, "#{path}.rb"))
81
+ File.exist?(lpath) ? lpath : nil
82
+ end
53
83
  }.compact
54
84
  unless files.empty?
55
85
  # prefer newer version
@@ -57,18 +87,30 @@ module Fluent
57
87
  return
58
88
  end
59
89
 
90
+ # Find from gems and prefer newer version
60
91
  specs = Gem::Specification.find_all { |spec|
61
- spec.contains_requirable_file? path
62
- }
63
-
64
- # prefer newer version
65
- specs = specs.sort_by { |spec| spec.version }
92
+ if spec.name == 'fluentd'.freeze
93
+ false
94
+ else
95
+ spec.contains_requirable_file? path
96
+ end
97
+ }.sort_by { |spec| spec.version }
66
98
  if spec = specs.last
67
99
  spec.require_paths.each { |lib|
68
100
  file = "#{spec.full_gem_path}/#{lib}/#{path}"
69
- require file
101
+ if File.exist?("#{file}.rb")
102
+ require file
103
+ return
104
+ end
70
105
  }
71
106
  end
107
+
108
+ # Lastly, load built-in plugin
109
+ lpath = File.expand_path(File.join(FLUENT_LIB_PATH, "#{@search_prefix}#{type}.rb"))
110
+ if File.exist?(lpath)
111
+ require lpath
112
+ return
113
+ end
72
114
  end
73
115
  end
74
116
  end