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
@@ -0,0 +1,51 @@
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 'fluent/plugin'
18
+ require 'fluent/counter/client'
19
+
20
+ module Fluent
21
+ module PluginHelper
22
+ module Counter
23
+ def counter_client_create(scope:, loop: Coolio::Loop.new)
24
+ client_conf = system_config.counter_client
25
+ raise Fluent::ConfigError, '<counter_client> is required in <system>' unless client_conf
26
+ counter_client = Fluent::Counter::Client.new(loop, port: client_conf.port, host: client_conf.host, log: log, timeout: client_conf.timeout)
27
+ counter_client.start
28
+ counter_client.establish(scope)
29
+ @_counter_client = counter_client
30
+ counter_client
31
+ end
32
+
33
+ attr_reader :_counter_client
34
+
35
+ def initialize
36
+ super
37
+ @_counter_client = nil
38
+ end
39
+
40
+ def stop
41
+ super
42
+ @_counter_client.stop
43
+ end
44
+
45
+ def terminate
46
+ @_counter_client = nil
47
+ super
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,93 @@
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 'fluent/time'
18
+
19
+ module Fluent
20
+ module PluginHelper
21
+ module EventEmitter
22
+ # stop : [-]
23
+ # shutdown : disable @router
24
+ # close : [-]
25
+ # terminate: [-]
26
+
27
+ def router
28
+ @_event_emitter_used_actually = true
29
+ if @_event_emitter_lazy_init
30
+ @router = @primary_instance.router
31
+ end
32
+ @router
33
+ end
34
+
35
+ def router=(r)
36
+ # not recommended now...
37
+ @router = r
38
+ end
39
+
40
+ def has_router?
41
+ true
42
+ end
43
+
44
+ def event_emitter_used_actually?
45
+ @_event_emitter_used_actually
46
+ end
47
+
48
+ def event_emitter_router(label_name)
49
+ if label_name
50
+ Engine.root_agent.find_label(label_name).event_router
51
+ elsif self.respond_to?(:as_secondary) && self.as_secondary
52
+ if @primary_instance.has_router?
53
+ @_event_emitter_lazy_init = true
54
+ nil # primary plugin's event router is not initialized yet, here.
55
+ else
56
+ @primary_instance.context_router
57
+ end
58
+ else
59
+ # `Engine.root_agent.event_router` is for testing
60
+ self.context_router || Engine.root_agent.event_router
61
+ end
62
+ end
63
+
64
+ def initialize
65
+ super
66
+ @_event_emitter_used_actually = false
67
+ @_event_emitter_lazy_init = false
68
+ @router = nil
69
+ end
70
+
71
+ def configure(conf)
72
+ require 'fluent/engine'
73
+ super
74
+ @router = event_emitter_router(conf['@label'])
75
+ end
76
+
77
+ def after_shutdown
78
+ @router = nil
79
+ super
80
+ end
81
+
82
+ def close # unset router many times to reduce test cost
83
+ @router = nil
84
+ super
85
+ end
86
+
87
+ def terminate
88
+ @router = nil
89
+ super
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,170 @@
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 'cool.io'
18
+ require 'fluent/plugin_helper/thread'
19
+ require 'fluent/clock'
20
+
21
+ module Fluent
22
+ module PluginHelper
23
+ module EventLoop
24
+ # Currently this plugin helper is only for other helpers, not plugins.
25
+ # there's no way to create customized watchers to attach event loops.
26
+ include Fluent::PluginHelper::Thread
27
+
28
+ # stop : [-]
29
+ # shutdown : detach all event watchers on event loop
30
+ # close : stop event loop
31
+ # terminate: initialize internal state
32
+
33
+ EVENT_LOOP_RUN_DEFAULT_TIMEOUT = 0.5
34
+ EVENT_LOOP_SHUTDOWN_TIMEOUT = 5
35
+
36
+ attr_reader :_event_loop # for tests
37
+
38
+ def event_loop_attach(watcher)
39
+ @_event_loop_mutex.synchronize do
40
+ @_event_loop.attach(watcher)
41
+ @_event_loop_attached_watchers << watcher
42
+ watcher
43
+ end
44
+ end
45
+
46
+ def event_loop_detach(watcher)
47
+ if watcher.attached?
48
+ watcher.detach
49
+ end
50
+ @_event_loop_mutex.synchronize do
51
+ @_event_loop_attached_watchers.delete(watcher)
52
+ end
53
+ end
54
+
55
+ def event_loop_wait_until_start
56
+ sleep(0.1) until event_loop_running?
57
+ end
58
+
59
+ def event_loop_wait_until_stop
60
+ timeout_at = Fluent::Clock.now + EVENT_LOOP_SHUTDOWN_TIMEOUT
61
+ sleep(0.1) while event_loop_running? && Fluent::Clock.now < timeout_at
62
+ if @_event_loop_running
63
+ puts "terminating event_loop forcedly"
64
+ caller.each{|bt| puts "\t#{bt}" }
65
+ @_event_loop.stop rescue nil
66
+ @_event_loop_running = true
67
+ end
68
+ end
69
+
70
+ def event_loop_running?
71
+ @_event_loop_running
72
+ end
73
+
74
+ def initialize
75
+ super
76
+ @_event_loop = Coolio::Loop.new
77
+ @_event_loop_running = false
78
+ @_event_loop_mutex = Mutex.new
79
+ # plugin MAY configure loop run timeout in #configure
80
+ @_event_loop_run_timeout = EVENT_LOOP_RUN_DEFAULT_TIMEOUT
81
+ @_event_loop_attached_watchers = []
82
+ end
83
+
84
+ def start
85
+ super
86
+
87
+ # event loop does not run here, so mutex lock is not required
88
+ thread_create :event_loop do
89
+ begin
90
+ default_watcher = DefaultWatcher.new
91
+ event_loop_attach(default_watcher)
92
+ @_event_loop_running = true
93
+ @_event_loop.run(@_event_loop_run_timeout) # this method blocks
94
+ ensure
95
+ @_event_loop_running = false
96
+ end
97
+ end
98
+ end
99
+
100
+ def shutdown
101
+ @_event_loop_mutex.synchronize do
102
+ @_event_loop_attached_watchers.reverse.each do |w|
103
+ if w.attached?
104
+ begin
105
+ w.detach
106
+ rescue => e
107
+ log.warn "unexpected error while detaching event loop watcher", error: e
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+ super
114
+ end
115
+
116
+ def after_shutdown
117
+ timeout_at = Fluent::Clock.now + EVENT_LOOP_SHUTDOWN_TIMEOUT
118
+ @_event_loop_mutex.synchronize do
119
+ @_event_loop.watchers.reverse.each do |w|
120
+ begin
121
+ w.detach
122
+ rescue => e
123
+ log.warn "unexpected error while detaching event loop watcher", error: e
124
+ end
125
+ end
126
+ end
127
+ while @_event_loop_running
128
+ if Fluent::Clock.now >= timeout_at
129
+ log.warn "event loop does NOT exit until hard timeout."
130
+ raise "event loop does NOT exit until hard timeout." if @under_plugin_development
131
+ break
132
+ end
133
+ sleep 0.1
134
+ end
135
+
136
+ super
137
+ end
138
+
139
+ def close
140
+ if @_event_loop_running
141
+ begin
142
+ @_event_loop.stop # we cannot check loop is running or not
143
+ rescue RuntimeError => e
144
+ raise unless e.message == 'loop not running'
145
+ end
146
+ end
147
+
148
+ super
149
+ end
150
+
151
+ def terminate
152
+ @_event_loop = nil
153
+ @_event_loop_running = false
154
+ @_event_loop_mutex = nil
155
+ @_event_loop_run_timeout = nil
156
+
157
+ super
158
+ end
159
+
160
+ # watcher to block to run event loop until shutdown
161
+ class DefaultWatcher < Coolio::TimerWatcher
162
+ def initialize
163
+ super(1, true) # interval: 1, repeat: true
164
+ end
165
+ # do nothing
166
+ def on_timer; end
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,104 @@
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 'fluent/event'
18
+ require 'fluent/time'
19
+ require 'fluent/configurable'
20
+
21
+ module Fluent
22
+ module PluginHelper
23
+ module Extract
24
+ def extract_tag_from_record(record)
25
+ return nil unless @_extract_enabled
26
+
27
+ if @_extract_tag_key && record.has_key?(@_extract_tag_key)
28
+ v = @_extract_keep_tag_key ? record[@_extract_tag_key] : record.delete(@_extract_tag_key)
29
+ return v.to_s
30
+ end
31
+
32
+ nil
33
+ end
34
+
35
+ def extract_time_from_record(record)
36
+ return nil unless @_extract_enabled
37
+
38
+ if @_extract_time_key && record.has_key?(@_extract_time_key)
39
+ v = @_extract_keep_time_key ? record[@_extract_time_key] : record.delete(@_extract_time_key)
40
+ return @_extract_time_parser.call(v)
41
+ end
42
+
43
+ nil
44
+ end
45
+
46
+ module ExtractParams
47
+ include Fluent::Configurable
48
+ config_section :extract, required: false, multi: false, param_name: :extract_config do
49
+ config_param :tag_key, :string, default: nil
50
+ config_param :keep_tag_key, :bool, default: false
51
+ config_param :time_key, :string, default: nil
52
+ config_param :keep_time_key, :bool, default: false
53
+
54
+ # To avoid defining :time_type twice
55
+ config_param :time_type, :enum, list: [:float, :unixtime, :string], default: :float
56
+
57
+ Fluent::TimeMixin::TIME_PARAMETERS.each do |name, type, opts|
58
+ config_param name, type, opts
59
+ end
60
+ end
61
+ end
62
+
63
+ def self.included(mod)
64
+ mod.include ExtractParams
65
+ end
66
+
67
+ def initialize
68
+ super
69
+ @_extract_enabled = false
70
+ @_extract_tag_key = nil
71
+ @_extract_keep_tag_key = nil
72
+ @_extract_time_key = nil
73
+ @_extract_keep_time_key = nil
74
+ @_extract_time_parser = nil
75
+ end
76
+
77
+ def configure(conf)
78
+ super
79
+
80
+ if @extract_config
81
+ @_extract_tag_key = @extract_config.tag_key
82
+ @_extract_keep_tag_key = @extract_config.keep_tag_key
83
+ @_extract_time_key = @extract_config.time_key
84
+ if @_extract_time_key
85
+ @_extract_keep_time_key = @extract_config.keep_time_key
86
+ @_extract_time_parser = case @extract_config.time_type
87
+ when :float then Fluent::NumericTimeParser.new(:float)
88
+ when :unixtime then Fluent::NumericTimeParser.new(:unixtime)
89
+ else
90
+ localtime = @extract_config.localtime && !@extract_config.utc
91
+ Fluent::TimeParser.new(@extract_config.time_format, localtime, @extract_config.timezone)
92
+ end
93
+ else
94
+ if @extract_config.time_format
95
+ log.warn "'time_format' specified without 'time_key', will be ignored"
96
+ end
97
+ end
98
+
99
+ @_extract_enabled = @_extract_tag_key || @_extract_time_key
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,147 @@
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 'fluent/plugin'
18
+ require 'fluent/plugin/formatter'
19
+ require 'fluent/config/element'
20
+ require 'fluent/configurable'
21
+
22
+ module Fluent
23
+ module PluginHelper
24
+ module Formatter
25
+ def formatter_create(usage: '', type: nil, conf: nil, default_type: nil)
26
+ formatter = @_formatters[usage]
27
+ return formatter if formatter && !type && !conf
28
+
29
+ type = if type
30
+ type
31
+ elsif conf && conf.respond_to?(:[])
32
+ raise Fluent::ConfigError, "@type is required in <format>" unless conf['@type']
33
+ conf['@type']
34
+ elsif default_type
35
+ default_type
36
+ else
37
+ raise ArgumentError, "BUG: both type and conf are not specified"
38
+ end
39
+ formatter = Fluent::Plugin.new_formatter(type, parent: self)
40
+ config = case conf
41
+ when Fluent::Config::Element
42
+ conf
43
+ when Hash
44
+ # in code, programmer may use symbols as keys, but Element needs strings
45
+ conf = Hash[conf.map{|k,v| [k.to_s, v]}]
46
+ Fluent::Config::Element.new('format', usage, conf, [])
47
+ when nil
48
+ Fluent::Config::Element.new('format', usage, {}, [])
49
+ else
50
+ raise ArgumentError, "BUG: conf must be a Element, Hash (or unspecified), but '#{conf.class}'"
51
+ end
52
+ formatter.configure(config)
53
+ if @_formatters_started
54
+ formatter.start
55
+ end
56
+
57
+ @_formatters[usage] = formatter
58
+ formatter
59
+ end
60
+
61
+ module FormatterParams
62
+ include Fluent::Configurable
63
+ # minimum section definition to instantiate formatter plugin instances
64
+ config_section :format, required: false, multi: true, init: true, param_name: :formatter_configs do
65
+ config_argument :usage, :string, default: ''
66
+ config_param :@type, :string # config_set_default required for :@type
67
+ end
68
+ end
69
+
70
+ def self.included(mod)
71
+ mod.include FormatterParams
72
+ end
73
+
74
+ attr_reader :_formatters # for tests
75
+
76
+ def initialize
77
+ super
78
+ @_formatters_started = false
79
+ @_formatters = {} # usage => formatter
80
+ end
81
+
82
+ def configure(conf)
83
+ super
84
+
85
+ @formatter_configs.each do |section|
86
+ if @_formatters[section.usage]
87
+ raise Fluent::ConfigError, "duplicated formatter configured: #{section.usage}"
88
+ end
89
+ formatter = Plugin.new_formatter(section[:@type], parent: self)
90
+ formatter.configure(section.corresponding_config_element)
91
+ @_formatters[section.usage] = formatter
92
+ end
93
+ end
94
+
95
+ def start
96
+ super
97
+ @_formatters_started = true
98
+ @_formatters.each_pair do |usage, formatter|
99
+ formatter.start
100
+ end
101
+ end
102
+
103
+ def formatter_operate(method_name, &block)
104
+ @_formatters.each_pair do |usage, formatter|
105
+ begin
106
+ formatter.send(method_name)
107
+ block.call(formatter) if block_given?
108
+ rescue => e
109
+ log.error "unexpected error while #{method_name}", usage: usage, formatter: formatter, error: e
110
+ end
111
+ end
112
+ end
113
+
114
+ def stop
115
+ super
116
+ formatter_operate(:stop)
117
+ end
118
+
119
+ def before_shutdown
120
+ formatter_operate(:before_shutdown)
121
+ super
122
+ end
123
+
124
+ def shutdown
125
+ formatter_operate(:shutdown)
126
+ super
127
+ end
128
+
129
+ def after_shutdown
130
+ formatter_operate(:after_shutdown)
131
+ super
132
+ end
133
+
134
+ def close
135
+ formatter_operate(:close)
136
+ super
137
+ end
138
+
139
+ def terminate
140
+ formatter_operate(:terminate)
141
+ @_formatters_started = false
142
+ @_formatters = {}
143
+ super
144
+ end
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,79 @@
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 'async/http/protocol'
18
+ require 'fluent/plugin_helper/http_server/methods'
19
+ require 'fluent/plugin_helper/http_server/request'
20
+
21
+ module Fluent
22
+ module PluginHelper
23
+ module HttpServer
24
+ class App
25
+ def initialize(router, logger)
26
+ @logger = logger
27
+ @router = router
28
+ end
29
+
30
+ # Required method by async-http
31
+ def call(request)
32
+ method = request.method
33
+ resp =
34
+ case method
35
+ when HttpServer::Methods::GET
36
+ get(request)
37
+ when HttpServer::Methods::HEAD
38
+ head(request)
39
+ when HttpServer::Methods::POST
40
+ post(request)
41
+ when HttpServer::Methods::PATCH
42
+ patch(request)
43
+ when HttpServer::Methods::PUT
44
+ put(request)
45
+ when HttpServer::Methods::DELETE
46
+ delete(request)
47
+ when HttpServer::Methods::OPTIONS
48
+ options(request)
49
+ when HttpServer::Methods::CONNECT
50
+ connect(request)
51
+ when HttpServer::Methods::TRACE
52
+ trace(request)
53
+ else
54
+ raise "Unknown method #{method}"
55
+ end
56
+ Protocol::HTTP::Response[*resp]
57
+ rescue => e
58
+ @logger.error(e)
59
+ Protocol::HTTP::Response[500, { 'Content-Type' => 'text/plain' }, 'Internal Server Error']
60
+ end
61
+
62
+ HttpServer::Methods::ALL.map { |e| e.downcase.to_sym }.each do |name|
63
+ define_method(name) do |request|
64
+ req = Request.new(request)
65
+
66
+ path = req.path
67
+ canonical_path =
68
+ if path.size >= 2 && !path.end_with?('/')
69
+ "#{path}/"
70
+ else
71
+ path
72
+ end
73
+ @router.route!(name, canonical_path, req)
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end