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,132 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin_helper/timer'
3
+ require 'fluent/plugin/base'
4
+
5
+ class TimerTest < Test::Unit::TestCase
6
+ class Dummy < Fluent::Plugin::TestBase
7
+ helpers :timer
8
+ end
9
+
10
+ test 'can be instantiated under state that timer is not running' do
11
+ d1 = Dummy.new
12
+ assert d1.respond_to?(:timer_running?)
13
+ assert !d1.timer_running?
14
+ end
15
+
16
+ test 'can be configured' do
17
+ d1 = Dummy.new
18
+ assert_nothing_raised do
19
+ d1.configure(config_element())
20
+ end
21
+ assert d1.plugin_id
22
+ assert d1.log
23
+ end
24
+
25
+ test 'can start timers by start' do
26
+ d1 = Dummy.new
27
+ d1.configure(config_element())
28
+ assert !d1.timer_running?
29
+ d1.start
30
+ assert d1.timer_running?
31
+
32
+ counter = 0
33
+ d1.timer_execute(:test, 1) do
34
+ counter += 1
35
+ end
36
+
37
+ sleep 5
38
+
39
+ d1.stop
40
+ assert !d1.timer_running?
41
+
42
+ assert{ counter >= 3 && counter <= 6 }
43
+
44
+ d1.shutdown; d1.close; d1.terminate
45
+ end
46
+
47
+ test 'can run many timers' do
48
+ d1 = Dummy.new
49
+ d1.configure(config_element())
50
+ d1.start
51
+
52
+ counter1 = 0
53
+ counter2 = 0
54
+
55
+ d1.timer_execute(:t1, 1) do
56
+ counter1 += 1
57
+ end
58
+ d1.timer_execute(:t2, 2) do
59
+ counter2 += 1
60
+ end
61
+
62
+ sleep 6
63
+
64
+ d1.stop
65
+
66
+ assert{ counter1 >= 4 && counter1 <= 7 }
67
+ assert{ counter2 >= 2 && counter2 <= 4 }
68
+
69
+ d1.shutdown; d1.close; d1.terminate
70
+ end
71
+
72
+ test 'aborts timer which raises exceptions' do
73
+ d1 = Dummy.new
74
+ d1.configure(config_element())
75
+ d1.start
76
+
77
+ counter1 = 0
78
+ counter2 = 0
79
+
80
+ d1.timer_execute(:t1, 1) do
81
+ counter1 += 1
82
+ end
83
+ d1.timer_execute(:t2, 1) do
84
+ raise "abort!!!!!!" if counter2 > 1
85
+ counter2 += 1
86
+ end
87
+
88
+ sleep 5
89
+
90
+ d1.stop
91
+
92
+ assert{ counter1 >= 3 && counter1 <= 6 }
93
+ assert{ counter2 == 2 }
94
+ msg = "Unexpected error raised. Stopping the timer. title=:t2"
95
+ assert{ d1.log.out.logs.any?{|line| line.include?("[error]:") && line.include?(msg) && line.include?("abort!!!!!!") } }
96
+ assert{ d1.log.out.logs.any?{|line| line.include?("[error]:") && line.include?("Timer detached. title=:t2") } }
97
+
98
+ d1.shutdown; d1.close; d1.terminate
99
+ end
100
+
101
+ test 'can run at once' do
102
+ d1 = Dummy.new
103
+ d1.configure(config_element())
104
+ assert !d1.timer_running?
105
+ d1.start
106
+ assert d1.timer_running?
107
+
108
+ waiting_assertion = true
109
+ waiting_timer = true
110
+ counter = 0
111
+ d1.timer_execute(:test, 1, repeat: false) do
112
+ sleep(0.1) while waiting_assertion
113
+ counter += 1
114
+ waiting_timer = false
115
+ end
116
+
117
+ watchers = d1._event_loop.watchers.reject {|w| w.is_a?(Fluent::PluginHelper::EventLoop::DefaultWatcher) }
118
+ assert_equal(1, watchers.size)
119
+ assert(watchers.first.attached?)
120
+
121
+ waiting_assertion = false
122
+ sleep(0.1) while waiting_timer
123
+
124
+ assert_equal(1, counter)
125
+ waiting(4){ sleep 0.1 while watchers.first.attached? }
126
+ assert_false(watchers.first.attached?)
127
+ watchers = d1._event_loop.watchers.reject {|w| w.is_a?(Fluent::PluginHelper::EventLoop::DefaultWatcher) }
128
+ assert_equal(0, watchers.size)
129
+
130
+ d1.shutdown; d1.close; d1.terminate
131
+ end
132
+ end
@@ -17,10 +17,6 @@ def gen_raw_string(time)
17
17
  "#{time} hello"
18
18
  end
19
19
 
20
- def gen_invalid_json(time)
21
- %({"tag": "tag1", "time": #{time}, "k1": "ok", })
22
- end
23
-
24
20
  time = ARGV.first
25
21
  time = Integer(time) rescue time
26
22
 
@@ -33,6 +29,4 @@ when 2
33
29
  print gen_msgpack(time)
34
30
  when 3
35
31
  print gen_raw_string(time)
36
- when 4
37
- print gen_invalid_json(time)
38
32
  end
@@ -0,0 +1,7 @@
1
+ module Fluent
2
+ Plugin.register_formatter(
3
+ 'test1',
4
+ Proc.new { |tag, time, record|
5
+ "#{tag}:#{time}:#{record.size}"
6
+ })
7
+ end
@@ -0,0 +1,7 @@
1
+ module Fluent
2
+ Plugin.register_formatter(
3
+ 'test2',
4
+ Proc.new { |tag, time, record|
5
+ "#{tag}:#{time}:#{record.size}"
6
+ })
7
+ end
@@ -14,16 +14,25 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
- module Fluent
17
+ require 'fluent/plugin/output'
18
+ require 'fluent/event'
19
+
20
+ module Fluent::Plugin
18
21
  class TestOutput < Output
19
- Plugin.register_output('test', self)
22
+ Fluent::Plugin.register_output('test', self)
23
+
24
+ config_param :name, :string
25
+
26
+ config_section :buffer do
27
+ config_set_default :chunk_keys, ['tag']
28
+ end
20
29
 
21
30
  def initialize
31
+ super
22
32
  @emit_streams = []
23
- @name = nil
24
33
  end
25
34
 
26
- attr_reader :emit_streams, :name
35
+ attr_reader :emit_streams
27
36
 
28
37
  def emits
29
38
  all = []
@@ -53,21 +62,20 @@ module Fluent
53
62
  all
54
63
  end
55
64
 
56
- def configure(conf)
57
- if name = conf['name']
58
- @name = name
59
- end
60
- end
61
-
62
- def start
65
+ def prefer_buffered_processing
66
+ false
63
67
  end
64
68
 
65
- def shutdown
69
+ def process(tag, es)
70
+ @emit_streams << [tag, es.to_a]
66
71
  end
67
72
 
68
- def emit(tag, es, chain)
69
- chain.next
70
- @emit_streams << [tag, es.to_a]
73
+ def write(chunk)
74
+ es = Fluent::ArrayEventStream.new
75
+ chunk.each do |time, record|
76
+ es.add(time, record)
77
+ end
78
+ @emit_streams << [tag, es]
71
79
  end
72
80
  end
73
81
  end
@@ -0,0 +1,80 @@
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
+ module Fluent::Plugin
18
+ class Test2Output < Output
19
+ Fluent::Plugin.register_output('test2', self)
20
+
21
+ helpers :event_emitter
22
+
23
+ config_param :name, :string
24
+
25
+ config_section :buffer do
26
+ config_set_default :chunk_keys, ['tag']
27
+ end
28
+
29
+ def initialize
30
+ super
31
+ @emit_streams = []
32
+ end
33
+
34
+ attr_reader :emit_streams
35
+
36
+ def emits
37
+ all = []
38
+ @emit_streams.each {|tag,events|
39
+ events.each {|time,record|
40
+ all << [tag, time, record]
41
+ }
42
+ }
43
+ all
44
+ end
45
+
46
+ def events
47
+ all = []
48
+ @emit_streams.each {|tag,events|
49
+ all.concat events
50
+ }
51
+ all
52
+ end
53
+
54
+ def records
55
+ all = []
56
+ @emit_streams.each {|tag,events|
57
+ events.each {|time,record|
58
+ all << record
59
+ }
60
+ }
61
+ all
62
+ end
63
+
64
+ def prefer_buffered_processing
65
+ false
66
+ end
67
+
68
+ def process(tag, es)
69
+ @emit_streams << [tag, es.to_a]
70
+ end
71
+
72
+ def write(chunk)
73
+ es = Fluent::ArrayEventStream.new
74
+ chunk.each do |time, record|
75
+ es.add(time, record)
76
+ end
77
+ @emit_streams << [tag, es]
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,164 @@
1
+ require_relative 'helper'
2
+ require 'fluent/clock'
3
+
4
+ require 'timecop'
5
+
6
+ class ClockTest < ::Test::Unit::TestCase
7
+ teardown do
8
+ Fluent::Clock.return # call it always not to affect other tests
9
+ end
10
+
11
+ sub_test_case 'without any pre-operation' do
12
+ test 'clock can provides incremental floating point number based on second' do
13
+ c1 = Fluent::Clock.now
14
+ assert_kind_of Float, c1
15
+ sleep 1.1
16
+ c2 = Fluent::Clock.now
17
+ assert{ c2 >= c1 + 1.0 && c2 < c1 + 9.0 } # if clock returns deci-second (fantastic!), c2 should be larger than c1 + 10
18
+ end
19
+
20
+ test 'clock value will proceed even if timecop freezes Time' do
21
+ Timecop.freeze(Time.now) do
22
+ c1 = Fluent::Clock.now
23
+ assert_kind_of Float, c1
24
+ sleep 1.1
25
+ c2 = Fluent::Clock.now
26
+ assert{ c2 >= c1 + 1.0 && c2 < c1 + 9.0 }
27
+ end
28
+ end
29
+ end
30
+
31
+ sub_test_case 'using #freeze without any arguments' do
32
+ test 'Clock.freeze without arguments freezes clock with current clock value' do
33
+ c0 = Fluent::Clock.now
34
+ Fluent::Clock.freeze
35
+ c1 = Fluent::Clock.now
36
+ Fluent::Clock.return
37
+ c2 = Fluent::Clock.now
38
+ assert{ c0 <= c1 && c1 <= c2 }
39
+ end
40
+
41
+ test 'Clock.return raises an error if it is called in block' do
42
+ assert_raise RuntimeError.new("invalid return while running code in blocks") do
43
+ Fluent::Clock.freeze do
44
+ Fluent::Clock.return
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ sub_test_case 'using #freeze with clock value' do
51
+ test 'Clock.now always returns frozen time until #return called' do
52
+ c0 = Fluent::Clock.now
53
+ Fluent::Clock.freeze(c0)
54
+ assert_equal c0, Fluent::Clock.now
55
+ sleep 0.5
56
+ assert_equal c0, Fluent::Clock.now
57
+ sleep 0.6
58
+ assert_equal c0, Fluent::Clock.now
59
+
60
+ Fluent::Clock.return
61
+ c1 = Fluent::Clock.now
62
+ assert{ c1 >= c0 + 1.0 }
63
+ end
64
+
65
+ test 'Clock.now returns frozen time in the block argument of #freeze' do
66
+ c0 = Fluent::Clock.now
67
+ Fluent::Clock.freeze(c0) do
68
+ assert_equal c0, Fluent::Clock.now
69
+ sleep 0.5
70
+ assert_equal c0, Fluent::Clock.now
71
+ sleep 0.6
72
+ assert_equal c0, Fluent::Clock.now
73
+ end
74
+ c1 = Fluent::Clock.now
75
+ assert{ c1 >= c0 + 1.0 }
76
+ end
77
+
78
+ test 'Clock.now returns unfrozen value after jumping out from block by raising errors' do
79
+ c0 = Fluent::Clock.now
80
+ rescued_error = nil
81
+ begin
82
+ Fluent::Clock.freeze(c0) do
83
+ assert_equal c0, Fluent::Clock.now
84
+ sleep 0.5
85
+ assert_equal c0, Fluent::Clock.now
86
+ sleep 0.6
87
+ assert_equal c0, Fluent::Clock.now
88
+ raise "bye!"
89
+ end
90
+ rescue => e
91
+ rescued_error = e
92
+ end
93
+ assert rescued_error # ensure to rescue an error
94
+ c1 = Fluent::Clock.now
95
+ assert{ c1 >= c0 + 1.0 }
96
+ end
97
+
98
+ test 'Clock.return cancels all Clock.freeze effects by just once' do
99
+ c0 = Fluent::Clock.now
100
+ sleep 0.1
101
+ c1 = Fluent::Clock.now
102
+ sleep 0.1
103
+ c2 = Fluent::Clock.now
104
+ Fluent::Clock.freeze(c0)
105
+ sleep 0.1
106
+ assert_equal c0, Fluent::Clock.now
107
+ Fluent::Clock.freeze(c1)
108
+ sleep 0.1
109
+ assert_equal c1, Fluent::Clock.now
110
+ Fluent::Clock.freeze(c2)
111
+ sleep 0.1
112
+ assert_equal c2, Fluent::Clock.now
113
+
114
+ Fluent::Clock.return
115
+ assert{ Fluent::Clock.now > c2 }
116
+ end
117
+
118
+ test 'Clock.freeze allows nested blocks by itself' do
119
+ c0 = Fluent::Clock.now
120
+ sleep 0.1
121
+ c1 = Fluent::Clock.now
122
+ sleep 0.1
123
+ c2 = Fluent::Clock.now
124
+ Fluent::Clock.freeze(c0) do
125
+ sleep 0.1
126
+ assert_equal c0, Fluent::Clock.now
127
+ Fluent::Clock.freeze(c1) do
128
+ sleep 0.1
129
+ assert_equal c1, Fluent::Clock.now
130
+ Fluent::Clock.freeze(c2) do
131
+ sleep 0.1
132
+ assert_equal c2, Fluent::Clock.now
133
+ end
134
+ assert_equal c1, Fluent::Clock.now
135
+ end
136
+ assert_equal c0, Fluent::Clock.now
137
+ end
138
+ assert{ Fluent::Clock.now > c0 }
139
+ end
140
+ end
141
+
142
+ sub_test_case 'using #freeze with Time argument' do
143
+ test 'Clock.freeze returns the clock value which should be produced when the time is at the specified time' do
144
+ c0 = Fluent::Clock.now
145
+ t0 = Time.now
146
+ t1 = t0 - 30
147
+ assert_kind_of Time, t1
148
+ t2 = t0 + 30
149
+ assert_kind_of Time, t2
150
+
151
+ # 31 is for error of floating point value
152
+ Fluent::Clock.freeze(t1) do
153
+ c1 = Fluent::Clock.now
154
+ assert{ c1 >= c0 - 31 && c1 <= c0 - 31 + 10 } # +10 is for threading schedule error
155
+ end
156
+
157
+ # 29 is for error of floating point value
158
+ Fluent::Clock.freeze(t2) do
159
+ c2 = Fluent::Clock.now
160
+ assert{ c2 >= c0 + 29 && c2 <= c0 + 29 + 10 } # +10 is for threading schedule error
161
+ end
162
+ end
163
+ end
164
+ end
data/test/test_config.rb CHANGED
@@ -53,7 +53,7 @@ class ConfigTest < Test::Unit::TestCase
53
53
  </elem2>
54
54
  ]
55
55
  write_config "#{TMP_DIR}/dir/config_test_9.conf", %[
56
- k9 embeded
56
+ k9 embedded
57
57
  <elem3 name>
58
58
  nested nested_value
59
59
  include hoge
@@ -98,7 +98,7 @@ class ConfigTest < Test::Unit::TestCase
98
98
  elem2 = c.elements.find { |e| e.name == 'elem2' }
99
99
  assert_not_nil elem2
100
100
  assert_equal 'name', elem2.arg
101
- assert_equal 'embeded', elem2['k9']
101
+ assert_equal 'embedded', elem2['k9']
102
102
  assert !elem2.has_key?('include')
103
103
 
104
104
  elem3 = elem2.elements.find { |e| e.name == 'elem3' }
@@ -145,7 +145,7 @@ class ConfigTest < Test::Unit::TestCase
145
145
  not_fetched = []; rule_conf.check_not_fetched {|key, e| not_fetched << key }
146
146
  assert_equal %w[pattern replace], not_fetched
147
147
 
148
- # repeateadly accessing should not grow memory usage
148
+ # repeatedly accessing should not grow memory usage
149
149
  before_size = match_conf.unused.size
150
150
  10.times { match_conf['type'] }
151
151
  assert_equal before_size, match_conf.unused.size
@@ -157,14 +157,23 @@ class ConfigTest < Test::Unit::TestCase
157
157
  end
158
158
 
159
159
  def test_inline
160
- prepare_config
160
+ prepare_config
161
161
  opts = {
162
- config_path: "#{TMP_DIR}/config_test_1.conf",
163
- inline_config: "<source>\n type http\n port 2222\n </source>"
162
+ :config_path => "#{TMP_DIR}/config_test_1.conf",
163
+ :inline_config => "<source>\n type http\n port 2222\n </source>"
164
164
  }
165
165
  assert_nothing_raised do
166
166
  Fluent::Supervisor.new(opts)
167
- end
167
+ end
168
+ create_warn_dummy_logger
169
+ end
170
+
171
+ def create_warn_dummy_logger
172
+ dl_opts = {}
173
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::WARN
174
+ logdev = Fluent::Test::DummyLogDevice.new
175
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
176
+ $log = Fluent::Log.new(logger)
168
177
  end
169
178
  end
170
179
 
@@ -65,13 +65,13 @@ match('aa')
65
65
  e0 = root.elements[0]
66
66
  assert_equal 'source', e0.name
67
67
  assert_equal '', e0.arg
68
- assert_equal 'forward', e0['type']
68
+ assert_equal 'forward', e0['@type']
69
69
  assert_equal '24224', e0['port']
70
70
 
71
71
  e1 = root.elements[1]
72
72
  assert_equal 'match', e1.name
73
73
  assert_equal 'test.**', e1.arg
74
- assert_equal 'forward', e1['type']
74
+ assert_equal 'forward', e1['@type']
75
75
  assert_equal '1s', e1['flush_interval']
76
76
  assert_equal 2, e1.elements.size
77
77
  e1s0 = e1.elements[0]