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,442 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin_helper/retry_state'
3
+ require 'fluent/plugin/base'
4
+
5
+ require 'time'
6
+
7
+ class RetryStateHelperTest < Test::Unit::TestCase
8
+ def override_current_time(state, time)
9
+ mojule = Module.new do
10
+ define_method(:current_time){ time }
11
+ end
12
+ state.singleton_class.module_eval do
13
+ prepend mojule
14
+ end
15
+ end
16
+
17
+ class Dummy < Fluent::Plugin::TestBase
18
+ helpers :retry_state
19
+ end
20
+
21
+ setup do
22
+ @d = Dummy.new
23
+ end
24
+
25
+ test 'randomize can generate value within specified +/- range' do
26
+ s = @d.retry_state_create(:t1, :exponential_backoff, 0.1, 30) # default enabled w/ 0.125
27
+ 500.times do
28
+ r = s.randomize(1000)
29
+ assert{ r >= 875 && r < 1125 }
30
+ end
31
+
32
+ s = @d.retry_state_create(:t1, :exponential_backoff, 0.1, 30, randomize_width: 0.25)
33
+ 500.times do
34
+ r = s.randomize(1000)
35
+ assert{ r >= 750 && r < 1250 }
36
+ end
37
+ end
38
+
39
+ test 'plugin can create retry_state machine' do
40
+ s = @d.retry_state_create(:t1, :exponential_backoff, 0.1, 30)
41
+ # attr_reader :title, :start, :steps, :next_time, :timeout_at, :current, :secondary_transition_at, :secondary_transition_times
42
+
43
+ assert_equal :t1, s.title
44
+ start_time = s.start
45
+
46
+ assert_equal 0, s.steps
47
+ assert_equal (start_time + 0.1).to_i, s.next_time.to_i
48
+ assert_equal (start_time + 0.1).nsec, s.next_time.nsec
49
+ assert_equal (start_time + 30), s.timeout_at
50
+
51
+ assert_equal :primary, s.current
52
+ assert{ s.is_a? Fluent::PluginHelper::RetryState::ExponentialBackOffRetry }
53
+ end
54
+
55
+ test 'periodic retries' do
56
+ s = @d.retry_state_create(:t2, :periodic, 3, 29, randomize: false)
57
+ dummy_current_time = s.start
58
+ override_current_time(s, dummy_current_time)
59
+
60
+ assert_equal dummy_current_time, s.current_time
61
+ assert_equal (dummy_current_time + 29), s.timeout_at
62
+ assert_equal (dummy_current_time + 3), s.next_time
63
+
64
+ i = 1
65
+ while i < 9
66
+ override_current_time(s, s.next_time)
67
+ s.step
68
+ assert_equal i, s.steps
69
+ assert_equal (s.current_time + 3), s.next_time
70
+ assert !s.limit?
71
+ i += 1
72
+ end
73
+
74
+ assert_equal 9, i
75
+ override_current_time(s, s.next_time)
76
+ s.step
77
+ assert_equal s.timeout_at, s.next_time
78
+ assert s.limit?
79
+ end
80
+
81
+ test 'periodic retries with max_steps' do
82
+ s = @d.retry_state_create(:t2, :periodic, 3, 29, randomize: false, max_steps: 5)
83
+ dummy_current_time = s.start
84
+ override_current_time(s, dummy_current_time)
85
+
86
+ assert_equal dummy_current_time, s.current_time
87
+ assert_equal (dummy_current_time + 29), s.timeout_at
88
+ assert_equal (dummy_current_time + 3), s.next_time
89
+
90
+ i = 1
91
+ while i < 5
92
+ override_current_time(s, s.next_time)
93
+ s.step
94
+ assert_equal i, s.steps
95
+ assert_equal (s.current_time + 3), s.next_time
96
+ assert !s.limit?
97
+ i += 1
98
+ end
99
+
100
+ assert_equal 5, i
101
+ override_current_time(s, s.next_time)
102
+ s.step
103
+ assert_equal (s.current_time + 3), s.next_time
104
+ assert s.limit?
105
+ end
106
+
107
+ test 'periodic retries with secondary' do
108
+ s = @d.retry_state_create(:t3, :periodic, 3, 100, randomize: false, secondary: true) # threshold 0.8
109
+ dummy_current_time = s.start
110
+ override_current_time(s, dummy_current_time)
111
+
112
+ assert_equal dummy_current_time, s.current_time
113
+ assert_equal (dummy_current_time + 100), s.timeout_at
114
+ assert_equal (dummy_current_time + 100 * 0.8), s.secondary_transition_at
115
+
116
+ assert_equal (dummy_current_time + 3), s.next_time
117
+ assert !s.secondary?
118
+
119
+ i = 1
120
+ while i < 26
121
+ override_current_time(s, s.next_time)
122
+ assert !s.secondary?
123
+
124
+ s.step
125
+ assert_equal i, s.steps
126
+ assert_equal (s.current_time + 3), s.next_time
127
+ assert !s.limit?
128
+ i += 1
129
+ end
130
+
131
+ assert_equal 26, i
132
+ override_current_time(s, s.next_time) # 78
133
+ assert !s.secondary?
134
+
135
+ s.step
136
+ assert_equal 26, s.steps
137
+ assert_equal s.secondary_transition_at, s.next_time
138
+ assert !s.limit?
139
+
140
+ i += 1
141
+ assert_equal 27, i
142
+ override_current_time(s, s.next_time) # 80
143
+ assert s.secondary?
144
+
145
+ s.step
146
+ assert_equal (s.current_time + 3), s.next_time
147
+ assert_equal s.steps, s.secondary_transition_steps
148
+ assert !s.limit?
149
+
150
+ i += 1
151
+
152
+ while i < 33
153
+ override_current_time(s, s.next_time)
154
+ assert s.secondary?
155
+
156
+ s.step
157
+ assert_equal (s.current_time + 3), s.next_time
158
+ assert !s.limit?
159
+ i += 1
160
+ end
161
+
162
+ assert_equal 33, i
163
+ override_current_time(s, s.next_time) # 98
164
+ assert s.secondary?
165
+
166
+ s.step
167
+ assert_equal s.timeout_at, s.next_time
168
+ assert s.limit?
169
+ end
170
+
171
+ test 'periodic retries with secondary and specified threshold' do
172
+ s = @d.retry_state_create(:t3, :periodic, 3, 100, randomize: false, secondary: true, secondary_threshold: 0.75)
173
+ dummy_current_time = s.start
174
+ override_current_time(s, dummy_current_time)
175
+
176
+ assert_equal dummy_current_time, s.current_time
177
+ assert_equal (dummy_current_time + 100), s.timeout_at
178
+ assert_equal (dummy_current_time + 100 * 0.75), s.secondary_transition_at
179
+ end
180
+
181
+ test 'periodic retries with secondary and max_steps' do
182
+ s = @d.retry_state_create(:t3, :periodic, 3, 100, max_steps: 5, randomize: false, secondary: true)
183
+ dummy_current_time = s.start
184
+ override_current_time(s, dummy_current_time)
185
+
186
+ assert_equal dummy_current_time, s.current_time
187
+ assert_equal (dummy_current_time + 100), s.timeout_at
188
+ assert_equal (dummy_current_time + 3 * 5 * 0.8), s.secondary_transition_at
189
+ end
190
+
191
+ test 'exponential backoff forever without randomization' do
192
+ s = @d.retry_state_create(:t11, :exponential_backoff, 0.1, 300, randomize: false, forever: true, backoff_base: 2)
193
+ dummy_current_time = s.start
194
+ override_current_time(s, dummy_current_time)
195
+
196
+ assert_equal dummy_current_time, s.current_time
197
+
198
+ assert_equal 0, s.steps
199
+ assert_equal (dummy_current_time + 0.1), s.next_time
200
+
201
+ i = 1
202
+ while i < 300
203
+ s.step
204
+ assert_equal i, s.steps
205
+ assert_equal (dummy_current_time + 0.1 * (2 ** (i - 1))), s.next_time
206
+ assert !s.limit?
207
+ i += 1
208
+ end
209
+ end
210
+
211
+ test 'exponential backoff with max_interval' do
212
+ s = @d.retry_state_create(:t12, :exponential_backoff, 0.1, 300, randomize: false, forever: true, backoff_base: 2, max_interval: 100)
213
+ dummy_current_time = s.start
214
+ override_current_time(s, dummy_current_time)
215
+
216
+ assert_equal dummy_current_time, s.current_time
217
+
218
+ assert_equal 0, s.steps
219
+ assert_equal (dummy_current_time + 0.1), s.next_time
220
+
221
+ # 0.1 * (2 ** (10 - 1)) == 0.1 * 2 ** 9 == 51.2
222
+ # 0.1 * (2 ** (11 - 1)) == 0.1 * 2 ** 10 == 102.4
223
+ i = 1
224
+ while i < 11
225
+ s.step
226
+ assert_equal i, s.steps
227
+ assert_equal (dummy_current_time + 0.1 * (2 ** (i - 1))), s.next_time, "start:#{dummy_current_time}, i:#{i}"
228
+ i += 1
229
+ end
230
+
231
+ s.step
232
+ assert_equal 11, s.steps
233
+ assert_equal (dummy_current_time + 100), s.next_time
234
+
235
+ s.step
236
+ assert_equal 12, s.steps
237
+ assert_equal (dummy_current_time + 100), s.next_time
238
+ end
239
+
240
+ test 'exponential backoff with shorter timeout' do
241
+ s = @d.retry_state_create(:t13, :exponential_backoff, 1, 12, randomize: false, backoff_base: 2, max_interval: 10)
242
+ dummy_current_time = s.start
243
+ override_current_time(s, dummy_current_time)
244
+
245
+ assert_equal dummy_current_time, s.current_time
246
+
247
+ assert_equal (dummy_current_time + 12), s.timeout_at
248
+
249
+ assert_equal 0, s.steps
250
+ assert_equal (dummy_current_time + 1), s.next_time
251
+
252
+ # 1 + 1 + 2 + 4 (=8)
253
+
254
+ override_current_time(s, s.next_time)
255
+ s.step
256
+ assert_equal 1, s.steps
257
+ assert_equal (s.current_time + 1), s.next_time
258
+
259
+ override_current_time(s, s.next_time)
260
+ s.step
261
+ assert_equal 2, s.steps
262
+ assert_equal (s.current_time + 2), s.next_time
263
+
264
+ override_current_time(s, s.next_time)
265
+ s.step
266
+ assert_equal 3, s.steps
267
+ assert_equal (s.current_time + 4), s.next_time
268
+
269
+ assert !s.limit?
270
+
271
+ # + 8 (=16) > 12
272
+
273
+ override_current_time(s, s.next_time)
274
+ s.step
275
+ assert_equal 4, s.steps
276
+ assert_equal s.timeout_at, s.next_time
277
+
278
+ assert s.limit?
279
+ end
280
+
281
+ test 'exponential backoff with max_steps' do
282
+ s = @d.retry_state_create(:t14, :exponential_backoff, 1, 120, randomize: false, backoff_base: 2, max_interval: 10, max_steps: 6)
283
+ dummy_current_time = s.start
284
+ override_current_time(s, dummy_current_time)
285
+
286
+ assert_equal dummy_current_time, s.current_time
287
+
288
+ assert_equal (dummy_current_time + 120), s.timeout_at
289
+
290
+ assert_equal 0, s.steps
291
+ assert_equal (dummy_current_time + 1), s.next_time
292
+
293
+ override_current_time(s, s.next_time)
294
+ s.step
295
+ assert_equal 1, s.steps
296
+ assert_equal (s.current_time + 1), s.next_time
297
+
298
+ override_current_time(s, s.next_time)
299
+ s.step
300
+ assert_equal 2, s.steps
301
+ assert_equal (s.current_time + 2), s.next_time
302
+
303
+ override_current_time(s, s.next_time)
304
+ s.step
305
+ assert_equal 3, s.steps
306
+ assert_equal (s.current_time + 4), s.next_time
307
+
308
+ assert !s.limit?
309
+
310
+ override_current_time(s, s.next_time)
311
+ s.step
312
+ assert_equal 4, s.steps
313
+ assert_equal (s.current_time + 8), s.next_time
314
+
315
+ assert !s.limit?
316
+
317
+ override_current_time(s, s.next_time)
318
+ s.step
319
+ assert_equal 5, s.steps
320
+ assert_equal (s.current_time + 10), s.next_time
321
+
322
+ assert !s.limit?
323
+
324
+ override_current_time(s, s.next_time)
325
+ s.step
326
+ assert_equal 6, s.steps
327
+ assert_equal (s.current_time + 10), s.next_time
328
+
329
+ assert s.limit?
330
+ end
331
+
332
+ test 'exponential backoff retries with secondary' do
333
+ s = @d.retry_state_create(:t15, :exponential_backoff, 1, 100, randomize: false, backoff_base: 2, secondary: true) # threshold 0.8
334
+ dummy_current_time = s.start
335
+ override_current_time(s, dummy_current_time)
336
+
337
+ assert_equal dummy_current_time, s.current_time
338
+ assert_equal (dummy_current_time + 100), s.timeout_at
339
+ assert_equal (dummy_current_time + 100 * 0.8), s.secondary_transition_at
340
+
341
+ assert_equal (dummy_current_time + 1), s.next_time
342
+ assert !s.secondary?
343
+
344
+ # 1, 1(2), 2(4), 4(8), 8(16), 16(32), 32(64), (80), (81), (83), (87), (95), (100)
345
+ i = 1
346
+ while i < 7
347
+ override_current_time(s, s.next_time)
348
+ assert !s.secondary?
349
+
350
+ s.step
351
+ assert_equal i, s.steps
352
+ assert_equal (s.current_time + 1 * (2 ** (i - 1))), s.next_time
353
+ assert !s.limit?
354
+ i += 1
355
+ end
356
+
357
+ assert_equal 7, i
358
+ override_current_time(s, s.next_time) # 64
359
+ assert !s.secondary?
360
+
361
+ s.step
362
+ assert_equal 7, s.steps
363
+ assert_equal s.secondary_transition_at, s.next_time
364
+ assert !s.limit?
365
+
366
+ i += 1
367
+ assert_equal 8, i
368
+ override_current_time(s, s.next_time) # 80
369
+ assert s.secondary?
370
+
371
+ s.step
372
+ assert_equal 8, s.steps
373
+ assert_equal s.steps, s.secondary_transition_steps
374
+ assert_equal (s.secondary_transition_at + 1.0), s.next_time
375
+ assert !s.limit?
376
+
377
+ # 81, 82, 84, 88, 96, 100
378
+ j = 1
379
+ while j < 4
380
+ override_current_time(s, s.next_time)
381
+ assert s.secondary?
382
+ assert_equal :secondary, s.current
383
+
384
+ s.step
385
+ assert_equal (8 + j), s.steps
386
+ assert_equal (s.current_time + (1 * (2 ** j))), s.next_time
387
+ assert !s.limit?, "j:#{j}"
388
+ j += 1
389
+ end
390
+
391
+ assert_equal 4, j
392
+ override_current_time(s, s.next_time) # 96
393
+ assert s.secondary?
394
+
395
+ s.step
396
+ assert_equal s.timeout_at, s.next_time
397
+ assert s.limit?
398
+ end
399
+
400
+ test 'exponential backoff retries with secondary and specified threshold' do
401
+ s = @d.retry_state_create(:t16, :exponential_backoff, 1, 100, randomize: false, secondary: true, backoff_base: 2, secondary_threshold: 0.75)
402
+ dummy_current_time = s.start
403
+ override_current_time(s, dummy_current_time)
404
+
405
+ assert_equal dummy_current_time, s.current_time
406
+ assert_equal (dummy_current_time + 100), s.timeout_at
407
+ assert_equal (dummy_current_time + 100 * 0.75), s.secondary_transition_at
408
+ end
409
+
410
+ test 'exponential backoff retries with secondary and max_steps' do
411
+ s = @d.retry_state_create(:t15, :exponential_backoff, 1, 100, randomize: false, max_steps: 5, backoff_base: 2, secondary: true) # threshold 0.8
412
+ dummy_current_time = s.start
413
+ override_current_time(s, dummy_current_time)
414
+
415
+ timeout = 0
416
+ 5.times { |i| timeout += 1.0 * (2 ** (i - 1)) }
417
+
418
+ assert_equal dummy_current_time, s.current_time
419
+ assert_equal (dummy_current_time + 100), s.timeout_at
420
+ assert_equal (dummy_current_time + timeout * 0.8), s.secondary_transition_at
421
+ end
422
+
423
+ sub_test_case 'exponential backoff' do
424
+ test 'too big steps(check inf handling)' do
425
+ s = @d.retry_state_create(:t11, :exponential_backoff, 1, 300, randomize: false, forever: true, backoff_base: 2)
426
+ dummy_current_time = s.start
427
+ override_current_time(s, dummy_current_time)
428
+
429
+ i = 1
430
+ while i < 1027
431
+ if i >= 1025
432
+ # With this setting, 1025+ number causes inf in `calc_interval`, so 1024 value is used for next_time
433
+ assert_nothing_raised(FloatDomainError) { s.step }
434
+ assert_equal (dummy_current_time + (2 ** (1024 - 1))), s.next_time
435
+ else
436
+ s.step
437
+ end
438
+ i += 1
439
+ end
440
+ end
441
+ end
442
+ end