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
@@ -18,39 +18,63 @@ require 'fluent/configurable'
18
18
  require 'fluent/config/element'
19
19
 
20
20
  module Fluent
21
- module SystemConfigMixin
22
- def system_config
23
- @_system_config || Fluent::Engine.system_config
24
- end
25
-
26
- def system_config_override(opts={})
27
- unless @_system_config
28
- @_system_config = Fluent::Engine.system_config.dup
29
- end
30
- opts.each_pair do |key, value|
31
- @_system_config.send(:"#{key.to_s}=", value)
32
- end
33
- end
34
- end
35
-
36
21
  class SystemConfig
37
22
  include Configurable
38
23
 
39
- config_param :log_level, default: nil do |level|
40
- Log.str_to_level(level)
41
- end
24
+ SYSTEM_CONFIG_PARAMETERS = [
25
+ :workers, :root_dir, :log_level,
26
+ :suppress_repeated_stacktrace, :emit_error_log_interval, :suppress_config_dump,
27
+ :log_event_verbose,
28
+ :without_source, :rpc_endpoint, :enable_get_dump, :process_name,
29
+ :file_permission, :dir_permission, :counter_server, :counter_client,
30
+ ]
31
+
32
+ config_param :workers, :integer, default: 1
33
+ config_param :root_dir, :string, default: nil
34
+ config_param :log_level, :enum, list: [:trace, :debug, :info, :warn, :error, :fatal], default: nil
42
35
  config_param :suppress_repeated_stacktrace, :bool, default: nil
43
- config_param :emit_error_log_interval, :time, default: nil
36
+ config_param :emit_error_log_interval, :time, default: nil
44
37
  config_param :suppress_config_dump, :bool, default: nil
45
- config_param :without_source, :bool, default: nil
46
- config_param :rpc_endpoint, :string, default: nil
38
+ config_param :log_event_verbose, :bool, default: nil
39
+ config_param :without_source, :bool, default: nil
40
+ config_param :rpc_endpoint, :string, default: nil
47
41
  config_param :enable_get_dump, :bool, default: nil
48
- config_param :process_name, default: nil
42
+ config_param :process_name, :string, default: nil
43
+ config_param :file_permission, default: nil do |v|
44
+ v.to_i(8)
45
+ end
46
+ config_param :dir_permission, default: nil do |v|
47
+ v.to_i(8)
48
+ end
49
+ config_section :log, required: false, init: true, multi: false do
50
+ config_param :format, :enum, list: [:text, :json], default: :text
51
+ config_param :time_format, :string, default: '%Y-%m-%d %H:%M:%S %z'
52
+ end
53
+
54
+ config_section :counter_server, multi: false do
55
+ desc 'scope name of counter server'
56
+ config_param :scope, :string
57
+
58
+ desc 'the port of counter server to listen to'
59
+ config_param :port, :integer, default: nil
60
+ desc 'the bind address of counter server to listen to'
61
+ config_param :bind, :string, default: nil
62
+
63
+ desc 'backup file path of counter values'
64
+ config_param :backup_path, :string
65
+ end
66
+
67
+ config_section :counter_client, multi: false do
68
+ desc 'the port of counter server'
69
+ config_param :port, :integer, default: nil
70
+ desc 'the IP address or hostname of counter server'
71
+ config_param :host, :string
72
+ desc 'the timeout of each operation'
73
+ config_param :timeout, :time, default: nil
74
+ end
49
75
 
50
76
  def self.create(conf)
51
- systems = conf.elements.select { |e|
52
- e.name == 'system'
53
- }
77
+ systems = conf.elements(name: 'system')
54
78
  return SystemConfig.new if systems.empty?
55
79
  raise Fluent::ConfigError, "<system> is duplicated. <system> should be only one" if systems.size > 1
56
80
 
@@ -61,38 +85,103 @@ module Fluent
61
85
  Fluent::Config::Element.new('<SYSTEM>', '', {}, [])
62
86
  end
63
87
 
88
+ def self.overwrite_system_config(hash)
89
+ older = defined?($_system_config) ? $_system_config : nil
90
+ begin
91
+ $_system_config = SystemConfig.new(Fluent::Config::Element.new('system', '', hash, []))
92
+ yield
93
+ ensure
94
+ $_system_config = older
95
+ end
96
+ end
97
+
64
98
  def initialize(conf=nil)
65
99
  super()
66
100
  conf ||= SystemConfig.blank_system_config
67
101
  configure(conf)
68
102
  end
69
103
 
104
+ def configure(conf)
105
+ super
106
+
107
+ @log_level = Log.str_to_level(@log_level.to_s) if @log_level
108
+ end
109
+
70
110
  def dup
71
111
  s = SystemConfig.new
72
- s.log_level = @log_level
73
- s.suppress_repeated_stacktrace = @suppress_repeated_stacktrace
74
- s.emit_error_log_interval = @emit_error_log_interval
75
- s.suppress_config_dump = @suppress_config_dump
76
- s.without_source = @without_source
77
- s.rpc_endpoint = @rpc_endpoint
78
- s.enable_get_dump = @enable_get_dump
79
- s.process_name = @process_name
80
-
112
+ SYSTEM_CONFIG_PARAMETERS.each do |param|
113
+ s.__send__("#{param}=", instance_variable_get("@#{param}"))
114
+ end
81
115
  s
82
116
  end
83
117
 
118
+ def attach(supervisor)
119
+ system = self
120
+ supervisor.instance_eval {
121
+ SYSTEM_CONFIG_PARAMETERS.each do |param|
122
+ case param
123
+ when :rpc_endpoint, :enable_get_dump, :process_name, :file_permission, :dir_permission, :counter_server, :counter_client
124
+ next # doesn't exist in command line options
125
+ when :emit_error_log_interval
126
+ system.emit_error_log_interval = @suppress_interval if @suppress_interval
127
+ when :log_level
128
+ ll_value = instance_variable_get("@log_level")
129
+ # info level can't be specified via command line option.
130
+ # log_level is info here, it is default value and <system>'s log_level should be applied if exists.
131
+ if ll_value != Fluent::Log::LEVEL_INFO
132
+ system.log_level = ll_value
133
+ end
134
+ else
135
+ next unless instance_variable_defined?("@#{param}")
136
+ supervisor_value = instance_variable_get("@#{param}")
137
+ next if supervisor_value.nil? # it's not configured by command line options
138
+
139
+ system.send("#{param}=", supervisor_value)
140
+ end
141
+ end
142
+ }
143
+ end
144
+
84
145
  def apply(supervisor)
85
146
  system = self
86
147
  supervisor.instance_eval {
87
- @log.level = @log_level = system.log_level unless system.log_level.nil?
88
- @suppress_interval = system.emit_error_log_interval unless system.emit_error_log_interval.nil?
89
- @suppress_config_dump = system.suppress_config_dump unless system.suppress_config_dump.nil?
90
- @suppress_repeated_stacktrace = system.suppress_repeated_stacktrace unless system.suppress_repeated_stacktrace.nil?
91
- @without_source = system.without_source unless system.without_source.nil?
92
- @rpc_endpoint = system.rpc_endpoint unless system.rpc_endpoint.nil?
93
- @enable_get_dump = system.enable_get_dump unless system.enable_get_dump.nil?
94
- @process_name = system.process_name unless system.process_name.nil?
148
+ SYSTEM_CONFIG_PARAMETERS.each do |param|
149
+ param_value = system.__send__(param)
150
+ next if param_value.nil?
151
+
152
+ case param
153
+ when :log_level
154
+ @log.level = @log_level = param_value
155
+ when :emit_error_log_interval
156
+ @suppress_interval = param_value
157
+ else
158
+ instance_variable_set("@#{param}", param_value)
159
+ end
160
+ end
161
+ #@counter_server = system.counter_server unless system.counter_server.nil?
162
+ #@counter_client = system.counter_client unless system.counter_client.nil?
95
163
  }
96
164
  end
165
+
166
+ module Mixin
167
+ def system_config
168
+ require 'fluent/engine'
169
+ unless defined?($_system_config)
170
+ $_system_config = nil
171
+ end
172
+ (instance_variable_defined?("@_system_config") && @_system_config) ||
173
+ $_system_config || Fluent::Engine.system_config
174
+ end
175
+
176
+ def system_config_override(opts={})
177
+ require 'fluent/engine'
178
+ if !instance_variable_defined?("@_system_config") || @_system_config.nil?
179
+ @_system_config = (defined?($_system_config) && $_system_config ? $_system_config : Fluent::Engine.system_config).dup
180
+ end
181
+ opts.each_pair do |key, value|
182
+ @_system_config.send(:"#{key.to_s}=", value)
183
+ end
184
+ end
185
+ end
97
186
  end
98
187
  end
@@ -14,26 +14,14 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
+ require 'fluent/config'
17
18
  require 'fluent/engine'
18
19
  require 'fluent/system_config'
19
- require 'fluent/config'
20
+ require 'fluent/test/log'
21
+ require 'serverengine'
20
22
 
21
23
  module Fluent
22
24
  module Test
23
- def self.setup
24
- Fluent.__send__(:remove_const, :Engine)
25
- engine = Fluent.const_set(:Engine, EngineClass.new).init(SystemConfig.new)
26
-
27
- engine.define_singleton_method(:now=) {|n|
28
- @now = n.to_i
29
- }
30
- engine.define_singleton_method(:now) {
31
- @now || super()
32
- }
33
-
34
- nil
35
- end
36
-
37
25
  class TestDriver
38
26
  include ::Test::Unit::Assertions
39
27
 
@@ -42,7 +30,9 @@ module Fluent
42
30
  if block
43
31
  # Create new class for test w/ overwritten methods
44
32
  # klass.dup is worse because its ancestors does NOT include original class name
33
+ klass_name = klass.name
45
34
  klass = Class.new(klass)
35
+ klass.define_singleton_method("name") { klass_name }
46
36
  klass.module_eval(&block)
47
37
  end
48
38
  @instance = klass.new
@@ -74,6 +64,7 @@ module Fluent
74
64
  # num_waits is for checking thread status. This will be removed after improved plugin API
75
65
  def run(num_waits = 10, &block)
76
66
  @instance.start
67
+ @instance.after_start
77
68
  begin
78
69
  # wait until thread starts
79
70
  num_waits.times { sleep 0.05 }
@@ -83,44 +74,5 @@ module Fluent
83
74
  end
84
75
  end
85
76
  end
86
-
87
- class DummyLogDevice
88
- attr_reader :logs
89
-
90
- def initialize
91
- @logs = []
92
- end
93
-
94
- def tty?
95
- false
96
- end
97
-
98
- def puts(*args)
99
- args.each{ |arg| write(arg + "\n") }
100
- end
101
-
102
- def write(message)
103
- @logs.push message
104
- end
105
-
106
- def flush
107
- true
108
- end
109
-
110
- def close
111
- true
112
- end
113
- end
114
-
115
- class TestLogger < Fluent::PluginLogger
116
- def initialize
117
- @logdev = DummyLogDevice.new
118
- super(Fluent::Log.new(@logdev))
119
- end
120
-
121
- def logs
122
- @logdev.logs
123
- end
124
- end
125
77
  end
126
78
  end
@@ -0,0 +1,224 @@
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/config'
18
+ require 'fluent/config/element'
19
+ require 'fluent/log'
20
+ require 'fluent/clock'
21
+
22
+ require 'serverengine/socket_manager'
23
+ require 'fileutils'
24
+ require 'timeout'
25
+
26
+ module Fluent
27
+ module Test
28
+ module Driver
29
+ class TestTimedOut < RuntimeError; end
30
+
31
+ class Base
32
+ attr_reader :instance, :logs
33
+
34
+ DEFAULT_TIMEOUT = 300
35
+
36
+ def initialize(klass, opts: {}, &block)
37
+ if klass.is_a?(Class)
38
+ @instance = klass.new
39
+ if block
40
+ @instance.singleton_class.module_eval(&block)
41
+ @instance.send(:initialize)
42
+ end
43
+ else
44
+ @instance = klass
45
+ end
46
+ @instance.under_plugin_development = true
47
+
48
+ @socket_manager_server = nil
49
+
50
+ @logs = []
51
+
52
+ @run_post_conditions = []
53
+ @run_breaking_conditions = []
54
+ @broken = false
55
+ end
56
+
57
+ def configure(conf, syntax: :v1)
58
+ raise NotImplementedError
59
+ end
60
+
61
+ def end_if(&block)
62
+ raise ArgumentError, "block is not given" unless block_given?
63
+ @run_post_conditions << block
64
+ end
65
+
66
+ def break_if(&block)
67
+ raise ArgumentError, "block is not given" unless block_given?
68
+ @run_breaking_conditions << block
69
+ end
70
+
71
+ def broken?
72
+ @broken
73
+ end
74
+
75
+ def run(timeout: nil, start: true, shutdown: true, &block)
76
+ instance_start if start
77
+
78
+ timeout ||= DEFAULT_TIMEOUT
79
+ stop_at = Fluent::Clock.now + timeout
80
+ @run_breaking_conditions << ->(){ Fluent::Clock.now >= stop_at }
81
+
82
+ if !block_given? && @run_post_conditions.empty? && @run_breaking_conditions.empty?
83
+ raise ArgumentError, "no stop conditions nor block specified"
84
+ end
85
+
86
+ sleep_with_watching_threads = ->(){
87
+ if @instance.respond_to?(:_threads)
88
+ @instance._threads.values.each{|t| t.join(0) }
89
+ end
90
+ sleep 0.1
91
+ }
92
+
93
+ begin
94
+ retval = run_actual(timeout: timeout, &block)
95
+ sleep_with_watching_threads.call until stop?
96
+ retval
97
+ ensure
98
+ instance_shutdown if shutdown
99
+ end
100
+ end
101
+
102
+ def instance_start
103
+ if @instance.respond_to?(:server_wait_until_start)
104
+ @socket_manager_path = ServerEngine::SocketManager::Server.generate_path
105
+ if @socket_manager_path.is_a?(String) && File.exist?(@socket_manager_path)
106
+ FileUtils.rm_f @socket_manager_path
107
+ end
108
+ @socket_manager_server = ServerEngine::SocketManager::Server.open(@socket_manager_path)
109
+ ENV['SERVERENGINE_SOCKETMANAGER_PATH'] = @socket_manager_path.to_s
110
+ end
111
+
112
+ unless @instance.started?
113
+ @instance.start
114
+ end
115
+ unless @instance.after_started?
116
+ @instance.after_start
117
+ end
118
+
119
+ if @instance.respond_to?(:thread_wait_until_start)
120
+ @instance.thread_wait_until_start
121
+ end
122
+
123
+ if @instance.respond_to?(:event_loop_wait_until_start)
124
+ @instance.event_loop_wait_until_start
125
+ end
126
+
127
+ instance_hook_after_started
128
+ end
129
+
130
+ def instance_hook_after_started
131
+ # insert hooks for tests available after instance.start
132
+ end
133
+
134
+ def instance_hook_before_stopped
135
+ # same with above
136
+ end
137
+
138
+ def instance_shutdown
139
+ instance_hook_before_stopped
140
+
141
+ show_errors_if_exists = ->(label, block){
142
+ begin
143
+ block.call
144
+ rescue => e
145
+ puts "unexpected error while #{label}, #{e.class}:#{e.message}"
146
+ e.backtrace.each do |bt|
147
+ puts "\t#{bt}"
148
+ end
149
+ end
150
+ }
151
+
152
+ show_errors_if_exists.call(:stop, ->(){ @instance.stop unless @instance.stopped? })
153
+ show_errors_if_exists.call(:before_shutdown, ->(){ @instance.before_shutdown unless @instance.before_shutdown? })
154
+ show_errors_if_exists.call(:shutdown, ->(){ @instance.shutdown unless @instance.shutdown? })
155
+ show_errors_if_exists.call(:after_shutdown, ->(){ @instance.after_shutdown unless @instance.after_shutdown? })
156
+
157
+ if @instance.respond_to?(:server_wait_until_stop)
158
+ @instance.server_wait_until_stop
159
+ end
160
+
161
+ if @instance.respond_to?(:event_loop_wait_until_stop)
162
+ @instance.event_loop_wait_until_stop
163
+ end
164
+
165
+ show_errors_if_exists.call(:close, ->(){ @instance.close unless @instance.closed? })
166
+
167
+ if @instance.respond_to?(:thread_wait_until_stop)
168
+ @instance.thread_wait_until_stop
169
+ end
170
+
171
+ show_errors_if_exists.call(:terminate, ->(){ @instance.terminate unless @instance.terminated? })
172
+
173
+ if @socket_manager_server
174
+ @socket_manager_server.close
175
+ if @socket_manager_server.is_a?(String) && File.exist?(@socket_manager_path)
176
+ FileUtils.rm_f @socket_manager_path
177
+ end
178
+ end
179
+ end
180
+
181
+ def run_actual(timeout: DEFAULT_TIMEOUT, &block)
182
+ if @instance.respond_to?(:_threads)
183
+ sleep 0.1 until @instance._threads.values.all?(&:alive?)
184
+ end
185
+
186
+ if @instance.respond_to?(:event_loop_running?)
187
+ sleep 0.1 until @instance.event_loop_running?
188
+ end
189
+
190
+ if @instance.respond_to?(:_child_process_processes)
191
+ sleep 0.1 until @instance._child_process_processes.values.all?{|pinfo| pinfo.alive }
192
+ end
193
+
194
+ return_value = nil
195
+ begin
196
+ Timeout.timeout(timeout * 2) do |sec|
197
+ return_value = block.call if block_given?
198
+ end
199
+ rescue Timeout::Error
200
+ raise TestTimedOut, "Test case timed out with hard limit."
201
+ end
202
+ return_value
203
+ end
204
+
205
+ def stop?
206
+ # Should stop running if post conditions are not registered.
207
+ return true unless @run_post_conditions || @run_post_conditions.empty?
208
+
209
+ # Should stop running if all of the post conditions are true.
210
+ return true if @run_post_conditions.all? {|proc| proc.call }
211
+
212
+ # Should stop running if some of the breaking conditions is true.
213
+ # In this case, some post conditions may be not true.
214
+ if @run_breaking_conditions.any? {|proc| proc.call }
215
+ @broken = true
216
+ return true
217
+ end
218
+
219
+ false
220
+ end
221
+ end
222
+ end
223
+ end
224
+ end
@@ -0,0 +1,70 @@
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/test/driver/base'
18
+
19
+ require 'fluent/plugin/base'
20
+ require 'fluent/plugin_id'
21
+ require 'fluent/log'
22
+ require 'fluent/plugin_helper'
23
+
24
+ module Fluent
25
+ module Test
26
+ module Driver
27
+ class OwnerDummy < Fluent::Plugin::Base
28
+ include PluginId
29
+ include PluginLoggerMixin
30
+ include PluginHelper::Mixin
31
+ end
32
+
33
+ class BaseOwned < Base
34
+ attr_accessor :section_name
35
+
36
+ def initialize(klass, opts: {}, &block)
37
+ super
38
+
39
+ owner = OwnerDummy.new
40
+ if opts
41
+ owner.system_config_override(opts)
42
+ end
43
+ owner.log = TestLogger.new
44
+
45
+ if @instance.respond_to?(:owner=)
46
+ @instance.owner = owner
47
+ if opts
48
+ @instance.system_config_override(opts)
49
+ end
50
+ end
51
+
52
+ @logs = owner.log.out.logs
53
+ @section_name = ''
54
+ end
55
+
56
+ def configure(conf, syntax: :v1)
57
+ if conf.is_a?(Fluent::Config::Element)
58
+ @config = conf
59
+ elsif conf.is_a?(Hash)
60
+ @config = Fluent::Config::Element.new(@section_name, "", Hash[conf.map{|k,v| [k.to_s, v]}], [])
61
+ else
62
+ @config = Fluent::Config.parse(conf, @section_name, "", syntax: syntax)
63
+ end
64
+ @instance.configure(@config)
65
+ self
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end