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
@@ -1,16 +1,17 @@
1
1
  require_relative '../helper'
2
2
  require 'fluent/plugin/filter_grep'
3
+ require 'fluent/test/driver/filter'
3
4
 
4
5
  class GrepFilterTest < Test::Unit::TestCase
5
6
  include Fluent
6
7
 
7
8
  setup do
8
9
  Fluent::Test.setup
9
- @time = Fluent::Engine.now
10
+ @time = event_time
10
11
  end
11
12
 
12
13
  def create_driver(conf = '')
13
- Test::FilterTestDriver.new(GrepFilter).configure(conf, true)
14
+ Fluent::Test::Driver::Filter.new(Fluent::Plugin::GrepFilter).configure(conf)
14
15
  end
15
16
 
16
17
  sub_test_case 'configure' do
@@ -22,12 +23,16 @@ class GrepFilterTest < Test::Unit::TestCase
22
23
 
23
24
  test "regexpN can contain a space" do
24
25
  d = create_driver(%[regexp1 message foo])
25
- assert_equal(Regexp.compile(/ foo/), d.instance._regexps['message'])
26
+ d.instance._regexp_and_conditions.each { |value|
27
+ assert_equal(Regexp.compile(/ foo/), value.pattern)
28
+ }
26
29
  end
27
30
 
28
31
  test "excludeN can contain a space" do
29
32
  d = create_driver(%[exclude1 message foo])
30
- assert_equal(Regexp.compile(/ foo/), d.instance._excludes['message'])
33
+ d.instance._exclude_or_conditions.each { |value|
34
+ assert_equal(Regexp.compile(/ foo/), value.pattern)
35
+ }
31
36
  end
32
37
 
33
38
  sub_test_case "duplicate key" do
@@ -67,6 +72,174 @@ class GrepFilterTest < Test::Unit::TestCase
67
72
  create_driver(conf)
68
73
  end
69
74
  end
75
+
76
+ test "and/regexp" do
77
+ conf = %[
78
+ <and>
79
+ <regexp>
80
+ key message
81
+ pattern test
82
+ </regexp>
83
+ <regexp>
84
+ key message
85
+ pattern test
86
+ </regexp>
87
+ </and>
88
+ ]
89
+ assert_raise(Fluent::ConfigError) do
90
+ create_driver(conf)
91
+ end
92
+ end
93
+
94
+ test "and/regexp, and/regexp" do
95
+ conf = %[
96
+ <and>
97
+ <regexp>
98
+ key message
99
+ pattern test
100
+ </regexp>
101
+ </and>
102
+ <and>
103
+ <regexp>
104
+ key message
105
+ pattern test
106
+ </regexp>
107
+ </and>
108
+ ]
109
+ assert_raise(Fluent::ConfigError) do
110
+ create_driver(conf)
111
+ end
112
+ end
113
+
114
+ test "regexp, and/regexp" do
115
+ conf = %[
116
+ <regexp>
117
+ key message
118
+ pattern test
119
+ </regexp>
120
+ <and>
121
+ <regexp>
122
+ key message
123
+ pattern test
124
+ </regexp>
125
+ </and>
126
+ ]
127
+ assert_raise(Fluent::ConfigError) do
128
+ create_driver(conf)
129
+ end
130
+ end
131
+
132
+ test "and/exclude" do
133
+ conf = %[
134
+ <and>
135
+ <exclude>
136
+ key message
137
+ pattern test
138
+ </exclude>
139
+ <exclude>
140
+ key message
141
+ pattern test
142
+ </exclude>
143
+ </and>
144
+ ]
145
+ assert_raise(Fluent::ConfigError) do
146
+ create_driver(conf)
147
+ end
148
+ end
149
+
150
+ test "and/exclude, and/exclude" do
151
+ conf = %[
152
+ <and>
153
+ <exclude>
154
+ key message
155
+ pattern test
156
+ </exclude>
157
+ </and>
158
+ <and>
159
+ <exclude>
160
+ key message
161
+ pattern test
162
+ </exclude>
163
+ </and>
164
+ ]
165
+ assert_raise(Fluent::ConfigError) do
166
+ create_driver(conf)
167
+ end
168
+ end
169
+
170
+ test "exclude, or/exclude" do
171
+ conf = %[
172
+ <exclude>
173
+ key message
174
+ pattern test
175
+ </exclude>
176
+ <or>
177
+ <exclude>
178
+ key message
179
+ pattern test
180
+ </exclude>
181
+ </or>
182
+ ]
183
+ assert_raise(Fluent::ConfigError) do
184
+ create_driver(conf)
185
+ end
186
+ end
187
+ end
188
+
189
+ sub_test_case "pattern with slashes" do
190
+ test "start with character classes" do
191
+ conf = %[
192
+ <regexp>
193
+ key message
194
+ pattern /[a-z]test/
195
+ </regexp>
196
+ <exclude>
197
+ key message
198
+ pattern /[A-Z]test/
199
+ </exclude>
200
+ ]
201
+ d = create_driver(conf)
202
+ assert_equal(/[a-z]test/, d.instance.regexps.first.pattern)
203
+ assert_equal(/[A-Z]test/, d.instance.excludes.first.pattern)
204
+ end
205
+ end
206
+
207
+ sub_test_case "and/or section" do
208
+ test "<and> section cannot include both <regexp> and <exclude>" do
209
+ conf = %[
210
+ <and>
211
+ <regexp>
212
+ key message
213
+ pattern /test/
214
+ </regexp>
215
+ <exclude>
216
+ key level
217
+ pattern /debug/
218
+ </exclude>
219
+ </and>
220
+ ]
221
+ assert_raise(Fluent::ConfigError) do
222
+ create_driver(conf)
223
+ end
224
+ end
225
+
226
+ test "<or> section cannot include both <regexp> and <exclude>" do
227
+ conf = %[
228
+ <or>
229
+ <regexp>
230
+ key message
231
+ pattern /test/
232
+ </regexp>
233
+ <exclude>
234
+ key level
235
+ pattern /debug/
236
+ </exclude>
237
+ </or>
238
+ ]
239
+ assert_raise(Fluent::ConfigError) do
240
+ create_driver(conf)
241
+ end
242
+ end
70
243
  end
71
244
  end
72
245
 
@@ -80,35 +253,36 @@ class GrepFilterTest < Test::Unit::TestCase
80
253
  ]
81
254
  end
82
255
 
83
- def emit(config, msgs)
256
+ def filter(config, msgs)
84
257
  d = create_driver(config)
85
258
  d.run {
86
259
  msgs.each { |msg|
87
- d.emit({'foo' => 'bar', 'message' => msg}, @time)
260
+ d.feed("filter.test", @time, {'foo' => 'bar', 'message' => msg})
88
261
  }
89
- }.filtered
262
+ }
263
+ d.filtered_records
90
264
  end
91
265
 
92
266
  test 'empty config' do
93
- es = emit('', messages)
94
- assert_equal(4, es.instance_variable_get(:@record_array).size)
267
+ filtered_records = filter('', messages)
268
+ assert_equal(4, filtered_records.size)
95
269
  end
96
270
 
97
271
  test 'regexpN' do
98
- es = emit('regexp1 message WARN', messages)
99
- assert_equal(3, es.instance_variable_get(:@record_array).size)
272
+ filtered_records = filter('regexp1 message WARN', messages)
273
+ assert_equal(3, filtered_records.size)
100
274
  assert_block('only WARN logs') do
101
- es.all? { |t, r|
275
+ filtered_records.all? { |r|
102
276
  !r['message'].include?('INFO')
103
277
  }
104
278
  end
105
279
  end
106
280
 
107
281
  test 'excludeN' do
108
- es = emit('exclude1 message favicon', messages)
109
- assert_equal(3, es.instance_variable_get(:@record_array).size)
282
+ filtered_records = filter('exclude1 message favicon', messages)
283
+ assert_equal(3, filtered_records.size)
110
284
  assert_block('remove favicon logs') do
111
- es.all? { |t, r|
285
+ filtered_records.all? { |r|
112
286
  !r['message'].include?('favicon')
113
287
  }
114
288
  end
@@ -121,10 +295,10 @@ class GrepFilterTest < Test::Unit::TestCase
121
295
  pattern WARN
122
296
  </regexp>
123
297
  ]
124
- es = emit(conf, messages)
125
- assert_equal(3, es.instance_variable_get(:@record_array).size)
298
+ filtered_records = filter(conf, messages)
299
+ assert_equal(3, filtered_records.size)
126
300
  assert_block('only WARN logs') do
127
- es.all? { |t, r|
301
+ filtered_records.all? { |r|
128
302
  !r['message'].include?('INFO')
129
303
  }
130
304
  end
@@ -137,10 +311,10 @@ class GrepFilterTest < Test::Unit::TestCase
137
311
  pattern favicon
138
312
  </exclude>
139
313
  ]
140
- es = emit(conf, messages)
141
- assert_equal(3, es.instance_variable_get(:@record_array).size)
314
+ filtered_records = filter(conf, messages)
315
+ assert_equal(3, filtered_records.size)
142
316
  assert_block('remove favicon logs') do
143
- es.all? { |t, r|
317
+ filtered_records.all? { |r|
144
318
  !r['message'].include?('favicon')
145
319
  }
146
320
  end
@@ -155,17 +329,354 @@ class GrepFilterTest < Test::Unit::TestCase
155
329
 
156
330
  test "don't raise an exception" do
157
331
  assert_nothing_raised {
158
- emit(%[regexp1 message WARN], ["\xff".force_encoding('UTF-8')])
332
+ filter(%[regexp1 message WARN], ["\xff".force_encoding('UTF-8')])
333
+ }
334
+ end
335
+ end
336
+
337
+ sub_test_case "and/or section" do
338
+ def records
339
+ [
340
+ { "time" => "2013/01/13T07:02:11.124202", "level" => "INFO", "method" => "GET", "path" => "/ping" },
341
+ { "time" => "2013/01/13T07:02:13.232645", "level" => "WARN", "method" => "POST", "path" => "/auth" },
342
+ { "time" => "2013/01/13T07:02:21.542145", "level" => "WARN", "method" => "GET", "path" => "/favicon.ico" },
343
+ { "time" => "2013/01/13T07:02:43.632145", "level" => "WARN", "method" => "POST", "path" => "/login" },
344
+ ]
345
+ end
346
+
347
+ def filter(conf, records)
348
+ d = create_driver(conf)
349
+ d.run do
350
+ records.each do |record|
351
+ d.feed("filter.test", @time, record)
352
+ end
353
+ end
354
+ d.filtered_records
355
+ end
356
+
357
+ test "basic and/regexp" do
358
+ conf = %[
359
+ <and>
360
+ <regexp>
361
+ key level
362
+ pattern ^INFO$
363
+ </regexp>
364
+ <regexp>
365
+ key method
366
+ pattern ^GET$
367
+ </regexp>
368
+ </and>
369
+ ]
370
+ filtered_records = filter(conf, records)
371
+ assert_equal(records.values_at(0), filtered_records)
372
+ end
373
+
374
+ test "basic or/exclude" do
375
+ conf = %[
376
+ <or>
377
+ <exclude>
378
+ key level
379
+ pattern ^INFO$
380
+ </exclude>
381
+ <exclude>
382
+ key method
383
+ pattern ^GET$
384
+ </exclude>
385
+ </or>
386
+ ]
387
+ filtered_records = filter(conf, records)
388
+ assert_equal(records.values_at(1, 3), filtered_records)
389
+ end
390
+
391
+ test "basic or/regexp" do
392
+ conf = %[
393
+ <or>
394
+ <regexp>
395
+ key level
396
+ pattern ^INFO$
397
+ </regexp>
398
+ <regexp>
399
+ key method
400
+ pattern ^GET$
401
+ </regexp>
402
+ </or>
403
+ ]
404
+ filtered_records = filter(conf, records)
405
+ assert_equal(records.values_at(0, 2), filtered_records)
406
+ end
407
+
408
+ test "basic and/exclude" do
409
+ conf = %[
410
+ <and>
411
+ <exclude>
412
+ key level
413
+ pattern ^INFO$
414
+ </exclude>
415
+ <exclude>
416
+ key method
417
+ pattern ^GET$
418
+ </exclude>
419
+ </and>
420
+ ]
421
+ filtered_records = filter(conf, records)
422
+ assert_equal(records.values_at(1, 2, 3), filtered_records)
423
+ end
424
+
425
+ sub_test_case "and/or combo" do
426
+ def records
427
+ [
428
+ { "time" => "2013/01/13T07:02:11.124202", "level" => "INFO", "method" => "GET", "path" => "/ping" },
429
+ { "time" => "2013/01/13T07:02:13.232645", "level" => "WARN", "method" => "POST", "path" => "/auth" },
430
+ { "time" => "2013/01/13T07:02:21.542145", "level" => "WARN", "method" => "GET", "path" => "/favicon.ico" },
431
+ { "time" => "2013/01/13T07:02:43.632145", "level" => "WARN", "method" => "POST", "path" => "/login" },
432
+ { "time" => "2013/01/13T07:02:44.959307", "level" => "ERROR", "method" => "POST", "path" => "/login" },
433
+ { "time" => "2013/01/13T07:02:45.444992", "level" => "ERROR", "method" => "GET", "path" => "/ping" },
434
+ { "time" => "2013/01/13T07:02:51.247941", "level" => "WARN", "method" => "GET", "path" => "/info" },
435
+ { "time" => "2013/01/13T07:02:53.108366", "level" => "WARN", "method" => "POST", "path" => "/ban" },
436
+ ]
437
+ end
438
+
439
+ test "and/regexp, or/exclude" do
440
+ conf = %[
441
+ <and>
442
+ <regexp>
443
+ key level
444
+ pattern ^ERROR|WARN$
445
+ </regexp>
446
+ <regexp>
447
+ key method
448
+ pattern ^GET|POST$
449
+ </regexp>
450
+ </and>
451
+ <or>
452
+ <exclude>
453
+ key level
454
+ pattern ^WARN$
455
+ </exclude>
456
+ <exclude>
457
+ key method
458
+ pattern ^GET$
459
+ </exclude>
460
+ </or>
461
+ ]
462
+ filtered_records = filter(conf, records)
463
+ assert_equal(records.values_at(4), filtered_records)
464
+ end
465
+
466
+ test "and/regexp, and/exclude" do
467
+ conf = %[
468
+ <and>
469
+ <regexp>
470
+ key level
471
+ pattern ^ERROR|WARN$
472
+ </regexp>
473
+ <regexp>
474
+ key method
475
+ pattern ^GET|POST$
476
+ </regexp>
477
+ </and>
478
+ <and>
479
+ <exclude>
480
+ key level
481
+ pattern ^WARN$
482
+ </exclude>
483
+ <exclude>
484
+ key method
485
+ pattern ^GET$
486
+ </exclude>
487
+ </and>
488
+ ]
489
+ filtered_records = filter(conf, records)
490
+ assert_equal(records.values_at(1, 3, 4, 5, 7), filtered_records)
491
+ end
492
+
493
+ test "or/regexp, and/exclude" do
494
+ conf = %[
495
+ <or>
496
+ <regexp>
497
+ key level
498
+ pattern ^ERROR|WARN$
499
+ </regexp>
500
+ <regexp>
501
+ key method
502
+ pattern ^GET|POST$
503
+ </regexp>
504
+ </or>
505
+ <and>
506
+ <exclude>
507
+ key level
508
+ pattern ^WARN$
509
+ </exclude>
510
+ <exclude>
511
+ key method
512
+ pattern ^GET$
513
+ </exclude>
514
+ </and>
515
+ ]
516
+ filtered_records = filter(conf, records)
517
+ assert_equal(records.values_at(0, 1, 3, 4, 5, 7), filtered_records)
518
+ end
519
+
520
+ test "or/regexp, or/exclude" do
521
+ conf = %[
522
+ <or>
523
+ <regexp>
524
+ key level
525
+ pattern ^ERROR|WARN$
526
+ </regexp>
527
+ <regexp>
528
+ key method
529
+ pattern ^GET|POST$
530
+ </regexp>
531
+ </or>
532
+ <or>
533
+ <exclude>
534
+ key level
535
+ pattern ^WARN$
536
+ </exclude>
537
+ <exclude>
538
+ key method
539
+ pattern ^GET$
540
+ </exclude>
541
+ </or>
542
+ ]
543
+ filtered_records = filter(conf, records)
544
+ assert_equal(records.values_at(4), filtered_records)
545
+ end
546
+
547
+ test "regexp, and/regexp" do
548
+ conf = %[
549
+ <and>
550
+ <regexp>
551
+ key level
552
+ pattern ^ERROR|WARN$
553
+ </regexp>
554
+ <regexp>
555
+ key method
556
+ pattern ^GET|POST$
557
+ </regexp>
558
+ </and>
559
+ <regexp>
560
+ key path
561
+ pattern ^/login$
562
+ </regexp>
563
+ ]
564
+ filtered_records = filter(conf, records)
565
+ assert_equal(records.values_at(3, 4), filtered_records)
566
+ end
567
+
568
+ test "regexp, or/exclude" do
569
+ conf = %[
570
+ <regexp>
571
+ key level
572
+ pattern ^ERROR|WARN$
573
+ </regexp>
574
+ <regexp>
575
+ key method
576
+ pattern ^GET|POST$
577
+ </regexp>
578
+ <or>
579
+ <exclude>
580
+ key level
581
+ pattern ^WARN$
582
+ </exclude>
583
+ <exclude>
584
+ key method
585
+ pattern ^GET$
586
+ </exclude>
587
+ </or>
588
+ ]
589
+ filtered_records = filter(conf, records)
590
+ assert_equal(records.values_at(4), filtered_records)
591
+ end
592
+
593
+ test "regexp, and/exclude" do
594
+ conf = %[
595
+ <regexp>
596
+ key level
597
+ pattern ^ERROR|WARN$
598
+ </regexp>
599
+ <regexp>
600
+ key method
601
+ pattern ^GET|POST$
602
+ </regexp>
603
+ <and>
604
+ <exclude>
605
+ key level
606
+ pattern ^WARN$
607
+ </exclude>
608
+ <exclude>
609
+ key method
610
+ pattern ^GET$
611
+ </exclude>
612
+ </and>
613
+ ]
614
+ filtered_records = filter(conf, records)
615
+ assert_equal(records.values_at(1, 3, 4, 5, 7), filtered_records)
616
+ end
617
+ end
618
+ end
619
+ end
620
+
621
+ sub_test_case 'nested keys' do
622
+ def messages
623
+ [
624
+ {"nest1" => {"nest2" => "INFO"}},
625
+ {"nest1" => {"nest2" => "WARN"}},
626
+ {"nest1" => {"nest2" => "WARN"}}
627
+ ]
628
+ end
629
+
630
+ def filter(config, msgs)
631
+ d = create_driver(config)
632
+ d.run {
633
+ msgs.each { |msg|
634
+ d.feed("filter.test", @time, {'foo' => 'bar', 'message' => msg})
635
+ }
636
+ }
637
+ d.filtered_records
638
+ end
639
+
640
+ test 'regexps' do
641
+ conf = %[
642
+ <regexp>
643
+ key $.message.nest1.nest2
644
+ pattern WARN
645
+ </regexp>
646
+ ]
647
+ filtered_records = filter(conf, messages)
648
+ assert_equal(2, filtered_records.size)
649
+ assert_block('only 2 nested logs') do
650
+ filtered_records.all? { |r|
651
+ r['message']['nest1']['nest2'] == 'WARN'
652
+ }
653
+ end
654
+ end
655
+
656
+ test 'excludes' do
657
+ conf = %[
658
+ <exclude>
659
+ key $.message.nest1.nest2
660
+ pattern WARN
661
+ </exclude>
662
+ ]
663
+ filtered_records = filter(conf, messages)
664
+ assert_equal(1, filtered_records.size)
665
+ assert_block('only 2 nested logs') do
666
+ filtered_records.all? { |r|
667
+ r['message']['nest1']['nest2'] == 'INFO'
159
668
  }
160
669
  end
161
670
  end
162
671
  end
163
672
 
164
673
  sub_test_case 'grep non-string jsonable values' do
165
- def emit(msg, config = 'regexp1 message 0')
674
+ def filter(msg, config = 'regexp1 message 0')
166
675
  d = create_driver(config)
167
- d.emit({'foo' => 'bar', 'message' => msg}, @time)
168
- d.run.filtered
676
+ d.run do
677
+ d.feed("filter.test", @time, {'foo' => 'bar', 'message' => msg})
678
+ end
679
+ d.filtered_records
169
680
  end
170
681
 
171
682
  data(
@@ -174,13 +685,13 @@ class GrepFilterTest < Test::Unit::TestCase
174
685
  'integer' => 0,
175
686
  'float' => 0.1)
176
687
  test "value" do |data|
177
- es = emit(data)
178
- assert_equal(1, es.instance_variable_get(:@record_array).size)
688
+ filtered_records = filter(data)
689
+ assert_equal(1, filtered_records.size)
179
690
  end
180
691
 
181
692
  test "value boolean" do
182
- es = emit(true, %[regexp1 message true])
183
- assert_equal(1, es.instance_variable_get(:@record_array).size)
693
+ filtered_records = filter(true, %[regexp1 message true])
694
+ assert_equal(1, filtered_records.size)
184
695
  end
185
696
  end
186
697
  end