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
@@ -15,22 +15,22 @@
15
15
  #
16
16
 
17
17
  require 'fluent/config/element'
18
- require 'time'
18
+ require 'fluent/msgpack_factory'
19
19
  require 'fluent/time'
20
20
 
21
21
  module Fluent
22
22
  module Test
23
23
  module Helpers
24
- # See "Example Custom Assertion: http://test-unit.github.io/test-unit/en/Test/Unit/Assertions.html
24
+ # See "Example Custom Assertion: https://test-unit.github.io/test-unit/en/Test/Unit/Assertions.html
25
25
  def assert_equal_event_time(expected, actual, message = nil)
26
- expected_s = "#{expected}"
27
- actual_s = "#{actual}"
26
+ expected_s = "#{Time.at(expected.sec)} (nsec #{expected.nsec})"
27
+ actual_s = "#{Time.at(actual.sec) } (nsec #{actual.nsec})"
28
28
  message = build_message(message, <<EOT, expected_s, actual_s)
29
- <?> time expected but was
29
+ <?> expected but was
30
30
  <?>.
31
31
  EOT
32
32
  assert_block(message) do
33
- expected.is_a?(Integer) && actual.is_a?(Integer) && expected == actual
33
+ expected.is_a?(Fluent::EventTime) && actual.is_a?(Fluent::EventTime) && expected.sec == actual.sec && expected.nsec == actual.nsec
34
34
  end
35
35
  end
36
36
 
@@ -38,15 +38,15 @@ EOT
38
38
  Fluent::Config::Element.new(name, argument, params, elements)
39
39
  end
40
40
 
41
- def event_time(str = nil, format: nil)
41
+ def event_time(str=nil, format: nil)
42
42
  if str
43
43
  if format
44
- Time.strptime(str, format).to_i
44
+ Fluent::EventTime.from_time(Time.strptime(str, format))
45
45
  else
46
- Time.parse(str).to_i
46
+ Fluent::EventTime.parse(str)
47
47
  end
48
48
  else
49
- Time.now.to_i
49
+ Fluent::EventTime.now
50
50
  end
51
51
  end
52
52
 
@@ -57,6 +57,27 @@ EOT
57
57
  ENV['TZ'] = oldtz
58
58
  end
59
59
 
60
+ def with_worker_config(root_dir: nil, workers: nil, worker_id: nil, &block)
61
+ if workers
62
+ if worker_id
63
+ if worker_id >= workers
64
+ raise "worker_id must be between 0 and (workers - 1)"
65
+ end
66
+ else
67
+ worker_id = 0
68
+ end
69
+ end
70
+
71
+ opts = {}
72
+ opts['root_dir'] = root_dir if root_dir
73
+ opts['workers'] = workers if workers
74
+
75
+ ENV['SERVERENGINE_WORKER_ID'] = worker_id.to_s
76
+ Fluent::SystemConfig.overwrite_system_config(opts, &block)
77
+ ensure
78
+ ENV.delete('SERVERENGINE_WORKER_ID')
79
+ end
80
+
60
81
  def time2str(time, localtime: false, format: nil)
61
82
  if format
62
83
  if localtime
@@ -73,6 +94,24 @@ EOT
73
94
  end
74
95
  end
75
96
 
97
+ def msgpack(type)
98
+ case type
99
+ when :factory
100
+ Fluent::MessagePackFactory.factory
101
+ when :packer
102
+ Fluent::MessagePackFactory.packer
103
+ when :unpacker
104
+ Fluent::MessagePackFactory.unpacker
105
+ else
106
+ raise ArgumentError, "unknown msgpack object type '#{type}'"
107
+ end
108
+ end
109
+
110
+ #
111
+ # Use this method with v0.12 compatibility layer.
112
+ #
113
+ # For v0.14 API, use `driver.logs` instead.
114
+ #
76
115
  def capture_log(driver)
77
116
  tmp = driver.instance.log.out
78
117
  driver.instance.log.out = StringIO.new
@@ -81,6 +120,15 @@ EOT
81
120
  ensure
82
121
  driver.instance.log.out = tmp
83
122
  end
123
+
124
+ def capture_stdout
125
+ out = StringIO.new
126
+ $stdout = out
127
+ yield
128
+ out.string.force_encoding('utf-8')
129
+ ensure
130
+ $stdout = STDOUT
131
+ end
84
132
  end
85
133
  end
86
134
  end
@@ -14,29 +14,22 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
- require 'fluent/input'
18
- require 'fluent/buffer'
19
17
  require 'fluent/engine'
20
18
  require 'fluent/time'
21
19
  require 'fluent/test/base'
22
20
 
23
21
  module Fluent
24
- class FileBuffer < BasicBuffer
25
- def self.clear_buffer_paths
26
- @@buffer_paths = {}
27
- end
28
- end
29
-
30
22
  module Test
31
23
  class InputTestDriver < TestDriver
32
24
  def initialize(klass, &block)
33
- FileBuffer.clear_buffer_paths
34
25
  super(klass, &block)
35
26
  @emit_streams = []
27
+ @event_streams = []
36
28
  @expects = nil
37
29
  # for checking only the number of emitted records during run
38
30
  @expected_emits_length = nil
39
31
  @run_timeout = 5
32
+ @run_post_conditions = []
40
33
  end
41
34
 
42
35
  def expect_emit(tag, time, record)
@@ -50,7 +43,7 @@ module Fluent
50
43
 
51
44
  attr_accessor :expected_emits_length
52
45
  attr_accessor :run_timeout
53
- attr_reader :emit_streams
46
+ attr_reader :emit_streams, :event_streams
54
47
 
55
48
  def emits
56
49
  all = []
@@ -82,7 +75,6 @@ module Fluent
82
75
 
83
76
  def register_run_post_condition(&block)
84
77
  if block
85
- @run_post_conditions ||= []
86
78
  @run_post_conditions << block
87
79
  end
88
80
  end
@@ -108,14 +100,26 @@ module Fluent
108
100
  false
109
101
  end
110
102
 
103
+ module EmitStreamWrapper
104
+ def emit_stream_callee=(method)
105
+ @emit_stream_callee = method
106
+ end
107
+ def emit_stream(tag, es)
108
+ @emit_stream_callee.call(tag, es)
109
+ end
110
+ end
111
+
111
112
  def run(num_waits = 10, &block)
112
113
  m = method(:emit_stream)
113
- Engine.define_singleton_method(:emit_stream) {|tag,es|
114
- m.call(tag, es)
115
- }
116
- instance.router.define_singleton_method(:emit_stream) {|tag,es|
117
- m.call(tag, es)
118
- }
114
+ unless Engine.singleton_class.ancestors.include?(EmitStreamWrapper)
115
+ Engine.singleton_class.prepend EmitStreamWrapper
116
+ end
117
+ Engine.emit_stream_callee = m
118
+ unless instance.router.singleton_class.ancestors.include?(EmitStreamWrapper)
119
+ instance.router.singleton_class.prepend EmitStreamWrapper
120
+ end
121
+ instance.router.emit_stream_callee = m
122
+
119
123
  super(num_waits) {
120
124
  block.call if block
121
125
 
@@ -132,7 +136,7 @@ module Fluent
132
136
  end
133
137
  end
134
138
 
135
- # Set runnning timeout to avoid infinite loop caused by some errors.
139
+ # Set running timeout to avoid infinite loop caused by some errors.
136
140
  started_at = Time.now
137
141
  register_run_breaking_condition do
138
142
  Time.now >= started_at + @run_timeout
@@ -146,7 +150,10 @@ module Fluent
146
150
 
147
151
  tag, events = @emit_streams[j]
148
152
  events.each do |time, record|
149
- assert_equal(@expects[i], [tag, time, record]) if @expects
153
+ if @expects
154
+ assert_equal(@expects[i], [tag, time, record])
155
+ assert_equal_event_time(@expects[i][1], time) if @expects[i][1].is_a?(Fluent::EventTime)
156
+ end
150
157
  i += 1
151
158
  end
152
159
  j += 1
@@ -159,6 +166,7 @@ module Fluent
159
166
 
160
167
  private
161
168
  def emit_stream(tag, es)
169
+ @event_streams << es
162
170
  @emit_streams << [tag, es.to_a]
163
171
  end
164
172
  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 'serverengine'
18
+ require 'fluent/log'
19
+
20
+ module Fluent
21
+ module Test
22
+ class DummyLogDevice
23
+ attr_reader :logs
24
+ attr_accessor :flush_logs
25
+
26
+ def initialize
27
+ @logs = []
28
+ @flush_logs = true
29
+ @use_stderr = false
30
+ end
31
+
32
+ def reset
33
+ @logs = [] if @flush_logs
34
+ end
35
+
36
+ def tty?
37
+ false
38
+ end
39
+
40
+ def puts(*args)
41
+ args.each{ |arg| write(arg + "\n") }
42
+ end
43
+
44
+ def write(message)
45
+ if @use_stderr
46
+ STDERR.write message
47
+ end
48
+ @logs.push message
49
+ end
50
+
51
+ def flush
52
+ true
53
+ end
54
+
55
+ def close
56
+ true
57
+ end
58
+ end
59
+
60
+ class TestLogger < Fluent::PluginLogger
61
+ def initialize
62
+ @logdev = DummyLogDevice.new
63
+ dl_opts = {}
64
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::INFO
65
+ logger = ServerEngine::DaemonLogger.new(@logdev, dl_opts)
66
+ log = Fluent::Log.new(logger)
67
+ super(log)
68
+ end
69
+
70
+ def reset
71
+ @logdev.reset
72
+ end
73
+
74
+ def logs
75
+ @logdev.logs
76
+ end
77
+ end
78
+ end
79
+ end
@@ -41,11 +41,9 @@ module Fluent
41
41
 
42
42
  attr_accessor :tag
43
43
 
44
- def emit(record, time=Time.now)
45
- es = OneEventStream.new(time.to_i, record)
46
- chain = TestOutputChain.new
47
- @instance.emit(@tag, es, chain)
48
- assert_equal 1, chain.called
44
+ def emit(record, time=Engine.now)
45
+ es = OneEventStream.new(time, record)
46
+ @instance.emit_events(@tag, es)
49
47
  end
50
48
  end
51
49
 
@@ -64,8 +62,8 @@ module Fluent
64
62
 
65
63
  attr_accessor :tag
66
64
 
67
- def emit(record, time=Time.now)
68
- @entries << [time.to_i, record]
65
+ def emit(record, time=Engine.now)
66
+ @entries << [time, record]
69
67
  self
70
68
  end
71
69
 
@@ -85,18 +83,13 @@ module Fluent
85
83
  assert_equal(@expected_buffer, buffer)
86
84
  end
87
85
 
88
- case
89
- when @instance.is_a?(Fluent::ObjectBufferedOutput)
90
- key = @tag
91
- when @instance.respond_to?(:time_slicer)
92
- # this block is only for test_out_file
93
- time, _record = @entries.first
94
- key = @instance.time_slicer.call(time)
95
- else
96
- key = ''
97
- end
98
- chunk = @instance.buffer.new_chunk(key)
99
- chunk << buffer
86
+ chunk = if @instance.instance_eval{ @chunk_key_tag }
87
+ @instance.buffer.generate_chunk(@instance.metadata(@tag, nil, nil)).staged!
88
+ else
89
+ @instance.buffer.generate_chunk(@instance.metadata(nil, nil, nil)).staged!
90
+ end
91
+ chunk.concat(buffer, es.size)
92
+
100
93
  begin
101
94
  result = @instance.write(chunk)
102
95
  ensure
@@ -110,18 +103,15 @@ module Fluent
110
103
  class TimeSlicedOutputTestDriver < InputTestDriver
111
104
  def initialize(klass, tag='test', &block)
112
105
  super(klass, &block)
113
- @entries = {}
106
+ @entries = []
114
107
  @expected_buffer = nil
115
108
  @tag = tag
116
109
  end
117
110
 
118
111
  attr_accessor :tag
119
112
 
120
- def emit(record, time=Time.now)
121
- slicer = @instance.instance_eval{@time_slicer}
122
- key = slicer.call(time.to_i)
123
- @entries[key] = [] unless @entries.has_key?(key)
124
- @entries[key] << [time.to_i, record]
113
+ def emit(record, time=Engine.now)
114
+ @entries << [time, record]
125
115
  self
126
116
  end
127
117
 
@@ -135,30 +125,29 @@ module Fluent
135
125
  block.call if block
136
126
 
137
127
  buffer = ''
138
- @entries.keys.each {|key|
139
- es = ArrayEventStream.new(@entries[key])
140
- @instance.emit(@tag, es, NullOutputChain.instance)
141
- buffer << @instance.format_stream(@tag, es)
142
- }
128
+ lines = {}
129
+ # v0.12 TimeSlicedOutput doesn't call #format_stream
130
+ @entries.each do |time, record|
131
+ meta = @instance.metadata(@tag, time, record)
132
+ line = @instance.format(@tag, time, record)
133
+ buffer << line
134
+ lines[meta] ||= []
135
+ lines[meta] << line
136
+ end
143
137
 
144
138
  if @expected_buffer
145
139
  assert_equal(@expected_buffer, buffer)
146
140
  end
147
141
 
148
- chunks = []
149
- @instance.instance_eval do
150
- @buffer.instance_eval{ @map.keys }.each do |key|
151
- @buffer.push(key)
152
- chunks << @buffer.instance_eval{ @queue.pop }
153
- end
154
- end
155
- chunks.each { |chunk|
142
+ lines.keys.each do |meta|
143
+ chunk = @instance.buffer.generate_chunk(meta).staged!
144
+ chunk.append(lines[meta])
156
145
  begin
157
146
  result.push(@instance.write(chunk))
158
147
  ensure
159
148
  chunk.purge
160
149
  end
161
- }
150
+ end
162
151
  }
163
152
  result
164
153
  end
@@ -25,7 +25,9 @@ module Fluent
25
25
  if block
26
26
  # Create new class for test w/ overwritten methods
27
27
  # klass.dup is worse because its ancestors does NOT include original class name
28
+ klass_name = klass_or_str.name
28
29
  klass_or_str = Class.new(klass_or_str)
30
+ klass_or_str.define_singleton_method("name") { klass_name }
29
31
  klass_or_str.module_eval(&block)
30
32
  end
31
33
  case klass_or_str.instance_method(:initialize).arity
@@ -36,7 +38,7 @@ module Fluent
36
38
  @instance = klass_or_str.new(format, conf)
37
39
  end
38
40
  elsif klass_or_str.is_a?(String)
39
- @instance = TextParser::TEMPLATE_REGISTRY.lookup(klass_or_str).call
41
+ @instance = Fluent::Plugin.new_parser(klass_or_str)
40
42
  else
41
43
  @instance = klass_or_str
42
44
  end
@@ -0,0 +1,46 @@
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 'serverengine'
18
+ require 'fileutils'
19
+
20
+ module Fluent
21
+ module Test
22
+ module StartupShutdown
23
+ def startup
24
+ socket_manager_path = ServerEngine::SocketManager::Server.generate_path
25
+ @server = ServerEngine::SocketManager::Server.open(socket_manager_path)
26
+ ENV['SERVERENGINE_SOCKETMANAGER_PATH'] = socket_manager_path.to_s
27
+ end
28
+
29
+ def shutdown
30
+ @server.close
31
+ end
32
+
33
+ def self.setup
34
+ @socket_manager_path = ServerEngine::SocketManager::Server.generate_path
35
+ @server = ServerEngine::SocketManager::Server.open(@socket_manager_path)
36
+ ENV['SERVERENGINE_SOCKETMANAGER_PATH'] = @socket_manager_path.to_s
37
+ end
38
+
39
+ def self.teardown
40
+ @server.close
41
+ # on Windows, socket_manager_path is a TCP port number
42
+ FileUtils.rm_f @socket_manager_path unless Fluent.windows?
43
+ end
44
+ end
45
+ end
46
+ end
data/lib/fluent/test.rb CHANGED
@@ -16,11 +16,43 @@
16
16
 
17
17
  require 'test/unit'
18
18
  require 'fluent/env' # for Fluent.windows?
19
+ require 'fluent/test/log'
19
20
  require 'fluent/test/base'
20
21
  require 'fluent/test/input_test'
21
22
  require 'fluent/test/output_test'
22
23
  require 'fluent/test/filter_test'
23
24
  require 'fluent/test/parser_test'
24
25
  require 'fluent/test/formatter_test'
26
+ require 'serverengine'
25
27
 
26
- $log ||= Fluent::Log.new(Fluent::Test::DummyLogDevice.new)
28
+
29
+ module Fluent
30
+ module Test
31
+ def self.dummy_logger
32
+ dl_opts = {log_level: ServerEngine::DaemonLogger::INFO}
33
+ logdev = Fluent::Test::DummyLogDevice.new
34
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
35
+ Fluent::Log.new(logger)
36
+ end
37
+
38
+ def self.setup
39
+ ENV['SERVERENGINE_WORKER_ID'] = '0'
40
+
41
+ $log = dummy_logger
42
+
43
+ Fluent.__send__(:remove_const, :Engine)
44
+ engine = Fluent.const_set(:Engine, EngineClass.new).init(SystemConfig.new)
45
+
46
+ engine.define_singleton_method(:now=) {|n|
47
+ @now = n
48
+ }
49
+ engine.define_singleton_method(:now) {
50
+ @now ||= super()
51
+ }
52
+
53
+ nil
54
+ end
55
+ end
56
+ end
57
+
58
+ $log ||= Fluent::Test.dummy_logger