fluentd 1.14.4-x64-mingw-ucrt

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 (558) hide show
  1. checksums.yaml +7 -0
  2. data/.deepsource.toml +13 -0
  3. data/.drone.yml +35 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.yaml +70 -0
  5. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. data/.github/ISSUE_TEMPLATE/feature_request.yaml +38 -0
  7. data/.github/ISSUE_TEMPLATE.md +17 -0
  8. data/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  9. data/.github/workflows/issue-auto-closer.yml +12 -0
  10. data/.github/workflows/linux-test.yaml +36 -0
  11. data/.github/workflows/macos-test.yaml +30 -0
  12. data/.github/workflows/stale-actions.yml +22 -0
  13. data/.github/workflows/windows-test.yaml +46 -0
  14. data/.gitignore +30 -0
  15. data/.gitlab-ci.yml +103 -0
  16. data/ADOPTERS.md +5 -0
  17. data/AUTHORS +2 -0
  18. data/CHANGELOG.md +2409 -0
  19. data/CONTRIBUTING.md +45 -0
  20. data/GOVERNANCE.md +55 -0
  21. data/Gemfile +9 -0
  22. data/GithubWorkflow.md +78 -0
  23. data/LICENSE +202 -0
  24. data/MAINTAINERS.md +11 -0
  25. data/README.md +97 -0
  26. data/Rakefile +79 -0
  27. data/SECURITY.md +18 -0
  28. data/bin/fluent-binlog-reader +7 -0
  29. data/bin/fluent-ca-generate +6 -0
  30. data/bin/fluent-cap-ctl +7 -0
  31. data/bin/fluent-cat +5 -0
  32. data/bin/fluent-ctl +7 -0
  33. data/bin/fluent-debug +5 -0
  34. data/bin/fluent-gem +9 -0
  35. data/bin/fluent-plugin-config-format +5 -0
  36. data/bin/fluent-plugin-generate +5 -0
  37. data/bin/fluentd +15 -0
  38. data/code-of-conduct.md +3 -0
  39. data/docs/SECURITY_AUDIT.pdf +0 -0
  40. data/example/copy_roundrobin.conf +39 -0
  41. data/example/counter.conf +18 -0
  42. data/example/filter_stdout.conf +22 -0
  43. data/example/in_forward.conf +14 -0
  44. data/example/in_forward_client.conf +37 -0
  45. data/example/in_forward_shared_key.conf +15 -0
  46. data/example/in_forward_tls.conf +14 -0
  47. data/example/in_forward_users.conf +24 -0
  48. data/example/in_forward_workers.conf +21 -0
  49. data/example/in_http.conf +16 -0
  50. data/example/in_out_forward.conf +17 -0
  51. data/example/in_sample_blocks.conf +17 -0
  52. data/example/in_sample_with_compression.conf +23 -0
  53. data/example/in_syslog.conf +15 -0
  54. data/example/in_tail.conf +14 -0
  55. data/example/in_tcp.conf +13 -0
  56. data/example/in_udp.conf +13 -0
  57. data/example/logevents.conf +25 -0
  58. data/example/multi_filters.conf +61 -0
  59. data/example/out_copy.conf +20 -0
  60. data/example/out_exec_filter.conf +42 -0
  61. data/example/out_file.conf +13 -0
  62. data/example/out_forward.conf +35 -0
  63. data/example/out_forward_buf_file.conf +23 -0
  64. data/example/out_forward_client.conf +109 -0
  65. data/example/out_forward_heartbeat_none.conf +16 -0
  66. data/example/out_forward_sd.conf +17 -0
  67. data/example/out_forward_shared_key.conf +36 -0
  68. data/example/out_forward_tls.conf +18 -0
  69. data/example/out_forward_users.conf +65 -0
  70. data/example/out_null.conf +36 -0
  71. data/example/sd.yaml +8 -0
  72. data/example/secondary_file.conf +42 -0
  73. data/example/suppress_config_dump.conf +7 -0
  74. data/example/v0_12_filter.conf +78 -0
  75. data/example/v1_literal_example.conf +36 -0
  76. data/example/worker_section.conf +36 -0
  77. data/fluent.conf +139 -0
  78. data/fluentd.gemspec +55 -0
  79. data/lib/fluent/agent.rb +168 -0
  80. data/lib/fluent/capability.rb +87 -0
  81. data/lib/fluent/clock.rb +66 -0
  82. data/lib/fluent/command/binlog_reader.rb +244 -0
  83. data/lib/fluent/command/bundler_injection.rb +45 -0
  84. data/lib/fluent/command/ca_generate.rb +184 -0
  85. data/lib/fluent/command/cap_ctl.rb +174 -0
  86. data/lib/fluent/command/cat.rb +365 -0
  87. data/lib/fluent/command/ctl.rb +177 -0
  88. data/lib/fluent/command/debug.rb +103 -0
  89. data/lib/fluent/command/fluentd.rb +374 -0
  90. data/lib/fluent/command/plugin_config_formatter.rb +308 -0
  91. data/lib/fluent/command/plugin_generator.rb +365 -0
  92. data/lib/fluent/compat/call_super_mixin.rb +76 -0
  93. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  94. data/lib/fluent/compat/exec_util.rb +129 -0
  95. data/lib/fluent/compat/file_util.rb +54 -0
  96. data/lib/fluent/compat/filter.rb +68 -0
  97. data/lib/fluent/compat/formatter.rb +111 -0
  98. data/lib/fluent/compat/formatter_utils.rb +85 -0
  99. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  100. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  101. data/lib/fluent/compat/input.rb +49 -0
  102. data/lib/fluent/compat/output.rb +721 -0
  103. data/lib/fluent/compat/output_chain.rb +60 -0
  104. data/lib/fluent/compat/parser.rb +310 -0
  105. data/lib/fluent/compat/parser_utils.rb +40 -0
  106. data/lib/fluent/compat/propagate_default.rb +62 -0
  107. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  108. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  109. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  110. data/lib/fluent/compat/socket_util.rb +165 -0
  111. data/lib/fluent/compat/string_util.rb +34 -0
  112. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  113. data/lib/fluent/compat/type_converter.rb +90 -0
  114. data/lib/fluent/config/basic_parser.rb +123 -0
  115. data/lib/fluent/config/configure_proxy.rb +424 -0
  116. data/lib/fluent/config/dsl.rb +152 -0
  117. data/lib/fluent/config/element.rb +265 -0
  118. data/lib/fluent/config/error.rb +32 -0
  119. data/lib/fluent/config/literal_parser.rb +286 -0
  120. data/lib/fluent/config/parser.rb +107 -0
  121. data/lib/fluent/config/section.rb +272 -0
  122. data/lib/fluent/config/types.rb +249 -0
  123. data/lib/fluent/config/v1_parser.rb +192 -0
  124. data/lib/fluent/config.rb +76 -0
  125. data/lib/fluent/configurable.rb +201 -0
  126. data/lib/fluent/counter/base_socket.rb +44 -0
  127. data/lib/fluent/counter/client.rb +297 -0
  128. data/lib/fluent/counter/error.rb +86 -0
  129. data/lib/fluent/counter/mutex_hash.rb +163 -0
  130. data/lib/fluent/counter/server.rb +273 -0
  131. data/lib/fluent/counter/store.rb +205 -0
  132. data/lib/fluent/counter/validator.rb +145 -0
  133. data/lib/fluent/counter.rb +23 -0
  134. data/lib/fluent/daemon.rb +15 -0
  135. data/lib/fluent/daemonizer.rb +88 -0
  136. data/lib/fluent/engine.rb +253 -0
  137. data/lib/fluent/env.rb +40 -0
  138. data/lib/fluent/error.rb +34 -0
  139. data/lib/fluent/event.rb +326 -0
  140. data/lib/fluent/event_router.rb +297 -0
  141. data/lib/fluent/ext_monitor_require.rb +28 -0
  142. data/lib/fluent/filter.rb +21 -0
  143. data/lib/fluent/fluent_log_event_router.rb +141 -0
  144. data/lib/fluent/formatter.rb +23 -0
  145. data/lib/fluent/input.rb +21 -0
  146. data/lib/fluent/label.rb +46 -0
  147. data/lib/fluent/load.rb +34 -0
  148. data/lib/fluent/log.rb +713 -0
  149. data/lib/fluent/match.rb +187 -0
  150. data/lib/fluent/mixin.rb +31 -0
  151. data/lib/fluent/msgpack_factory.rb +106 -0
  152. data/lib/fluent/oj_options.rb +62 -0
  153. data/lib/fluent/output.rb +29 -0
  154. data/lib/fluent/output_chain.rb +23 -0
  155. data/lib/fluent/parser.rb +23 -0
  156. data/lib/fluent/plugin/bare_output.rb +104 -0
  157. data/lib/fluent/plugin/base.rb +197 -0
  158. data/lib/fluent/plugin/buf_file.rb +213 -0
  159. data/lib/fluent/plugin/buf_file_single.rb +225 -0
  160. data/lib/fluent/plugin/buf_memory.rb +34 -0
  161. data/lib/fluent/plugin/buffer/chunk.rb +240 -0
  162. data/lib/fluent/plugin/buffer/file_chunk.rb +413 -0
  163. data/lib/fluent/plugin/buffer/file_single_chunk.rb +311 -0
  164. data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
  165. data/lib/fluent/plugin/buffer.rb +918 -0
  166. data/lib/fluent/plugin/compressable.rb +96 -0
  167. data/lib/fluent/plugin/exec_util.rb +22 -0
  168. data/lib/fluent/plugin/file_util.rb +22 -0
  169. data/lib/fluent/plugin/file_wrapper.rb +187 -0
  170. data/lib/fluent/plugin/filter.rb +127 -0
  171. data/lib/fluent/plugin/filter_grep.rb +189 -0
  172. data/lib/fluent/plugin/filter_parser.rb +130 -0
  173. data/lib/fluent/plugin/filter_record_transformer.rb +324 -0
  174. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  175. data/lib/fluent/plugin/formatter.rb +75 -0
  176. data/lib/fluent/plugin/formatter_csv.rb +78 -0
  177. data/lib/fluent/plugin/formatter_hash.rb +35 -0
  178. data/lib/fluent/plugin/formatter_json.rb +59 -0
  179. data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
  180. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  181. data/lib/fluent/plugin/formatter_out_file.rb +53 -0
  182. data/lib/fluent/plugin/formatter_single_value.rb +36 -0
  183. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  184. data/lib/fluent/plugin/formatter_tsv.rb +40 -0
  185. data/lib/fluent/plugin/in_debug_agent.rb +71 -0
  186. data/lib/fluent/plugin/in_dummy.rb +18 -0
  187. data/lib/fluent/plugin/in_exec.rb +110 -0
  188. data/lib/fluent/plugin/in_forward.rb +473 -0
  189. data/lib/fluent/plugin/in_gc_stat.rb +72 -0
  190. data/lib/fluent/plugin/in_http.rb +667 -0
  191. data/lib/fluent/plugin/in_monitor_agent.rb +412 -0
  192. data/lib/fluent/plugin/in_object_space.rb +93 -0
  193. data/lib/fluent/plugin/in_sample.rb +141 -0
  194. data/lib/fluent/plugin/in_syslog.rb +276 -0
  195. data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
  196. data/lib/fluent/plugin/in_tail.rb +1228 -0
  197. data/lib/fluent/plugin/in_tcp.rb +181 -0
  198. data/lib/fluent/plugin/in_udp.rb +92 -0
  199. data/lib/fluent/plugin/in_unix.rb +195 -0
  200. data/lib/fluent/plugin/input.rb +75 -0
  201. data/lib/fluent/plugin/metrics.rb +119 -0
  202. data/lib/fluent/plugin/metrics_local.rb +96 -0
  203. data/lib/fluent/plugin/multi_output.rb +195 -0
  204. data/lib/fluent/plugin/out_copy.rb +120 -0
  205. data/lib/fluent/plugin/out_exec.rb +105 -0
  206. data/lib/fluent/plugin/out_exec_filter.rb +319 -0
  207. data/lib/fluent/plugin/out_file.rb +334 -0
  208. data/lib/fluent/plugin/out_forward/ack_handler.rb +161 -0
  209. data/lib/fluent/plugin/out_forward/connection_manager.rb +113 -0
  210. data/lib/fluent/plugin/out_forward/error.rb +28 -0
  211. data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
  212. data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
  213. data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
  214. data/lib/fluent/plugin/out_forward/socket_cache.rb +140 -0
  215. data/lib/fluent/plugin/out_forward.rb +826 -0
  216. data/lib/fluent/plugin/out_http.rb +275 -0
  217. data/lib/fluent/plugin/out_null.rb +74 -0
  218. data/lib/fluent/plugin/out_relabel.rb +32 -0
  219. data/lib/fluent/plugin/out_roundrobin.rb +84 -0
  220. data/lib/fluent/plugin/out_secondary_file.rb +131 -0
  221. data/lib/fluent/plugin/out_stdout.rb +74 -0
  222. data/lib/fluent/plugin/out_stream.rb +130 -0
  223. data/lib/fluent/plugin/output.rb +1556 -0
  224. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  225. data/lib/fluent/plugin/parser.rb +275 -0
  226. data/lib/fluent/plugin/parser_apache.rb +28 -0
  227. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  228. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  229. data/lib/fluent/plugin/parser_csv.rb +114 -0
  230. data/lib/fluent/plugin/parser_json.rb +96 -0
  231. data/lib/fluent/plugin/parser_ltsv.rb +51 -0
  232. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  233. data/lib/fluent/plugin/parser_multiline.rb +152 -0
  234. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  235. data/lib/fluent/plugin/parser_none.rb +36 -0
  236. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  237. data/lib/fluent/plugin/parser_syslog.rb +496 -0
  238. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  239. data/lib/fluent/plugin/sd_file.rb +156 -0
  240. data/lib/fluent/plugin/sd_srv.rb +135 -0
  241. data/lib/fluent/plugin/sd_static.rb +58 -0
  242. data/lib/fluent/plugin/service_discovery.rb +65 -0
  243. data/lib/fluent/plugin/socket_util.rb +22 -0
  244. data/lib/fluent/plugin/storage.rb +84 -0
  245. data/lib/fluent/plugin/storage_local.rb +162 -0
  246. data/lib/fluent/plugin/string_util.rb +22 -0
  247. data/lib/fluent/plugin.rb +206 -0
  248. data/lib/fluent/plugin_helper/cert_option.rb +191 -0
  249. data/lib/fluent/plugin_helper/child_process.rb +366 -0
  250. data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
  251. data/lib/fluent/plugin_helper/counter.rb +51 -0
  252. data/lib/fluent/plugin_helper/event_emitter.rb +100 -0
  253. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  254. data/lib/fluent/plugin_helper/extract.rb +104 -0
  255. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  256. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  257. data/lib/fluent/plugin_helper/http_server/compat/server.rb +92 -0
  258. data/lib/fluent/plugin_helper/http_server/compat/ssl_context_extractor.rb +52 -0
  259. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  260. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  261. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  262. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  263. data/lib/fluent/plugin_helper/http_server/server.rb +93 -0
  264. data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
  265. data/lib/fluent/plugin_helper/http_server.rb +135 -0
  266. data/lib/fluent/plugin_helper/inject.rb +154 -0
  267. data/lib/fluent/plugin_helper/metrics.rb +129 -0
  268. data/lib/fluent/plugin_helper/parser.rb +147 -0
  269. data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
  270. data/lib/fluent/plugin_helper/retry_state.rb +209 -0
  271. data/lib/fluent/plugin_helper/server.rb +801 -0
  272. data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
  273. data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
  274. data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
  275. data/lib/fluent/plugin_helper/socket.rb +277 -0
  276. data/lib/fluent/plugin_helper/socket_option.rb +98 -0
  277. data/lib/fluent/plugin_helper/storage.rb +349 -0
  278. data/lib/fluent/plugin_helper/thread.rb +180 -0
  279. data/lib/fluent/plugin_helper/timer.rb +92 -0
  280. data/lib/fluent/plugin_helper.rb +75 -0
  281. data/lib/fluent/plugin_id.rb +93 -0
  282. data/lib/fluent/process.rb +22 -0
  283. data/lib/fluent/registry.rb +116 -0
  284. data/lib/fluent/root_agent.rb +372 -0
  285. data/lib/fluent/rpc.rb +94 -0
  286. data/lib/fluent/static_config_analysis.rb +194 -0
  287. data/lib/fluent/supervisor.rb +1054 -0
  288. data/lib/fluent/system_config.rb +187 -0
  289. data/lib/fluent/test/base.rb +78 -0
  290. data/lib/fluent/test/driver/base.rb +225 -0
  291. data/lib/fluent/test/driver/base_owned.rb +83 -0
  292. data/lib/fluent/test/driver/base_owner.rb +135 -0
  293. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  294. data/lib/fluent/test/driver/filter.rb +57 -0
  295. data/lib/fluent/test/driver/formatter.rb +30 -0
  296. data/lib/fluent/test/driver/input.rb +31 -0
  297. data/lib/fluent/test/driver/multi_output.rb +53 -0
  298. data/lib/fluent/test/driver/output.rb +102 -0
  299. data/lib/fluent/test/driver/parser.rb +30 -0
  300. data/lib/fluent/test/driver/storage.rb +30 -0
  301. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  302. data/lib/fluent/test/filter_test.rb +77 -0
  303. data/lib/fluent/test/formatter_test.rb +65 -0
  304. data/lib/fluent/test/helpers.rb +134 -0
  305. data/lib/fluent/test/input_test.rb +174 -0
  306. data/lib/fluent/test/log.rb +79 -0
  307. data/lib/fluent/test/output_test.rb +156 -0
  308. data/lib/fluent/test/parser_test.rb +70 -0
  309. data/lib/fluent/test/startup_shutdown.rb +46 -0
  310. data/lib/fluent/test.rb +58 -0
  311. data/lib/fluent/time.rb +512 -0
  312. data/lib/fluent/timezone.rb +171 -0
  313. data/lib/fluent/tls.rb +81 -0
  314. data/lib/fluent/unique_id.rb +39 -0
  315. data/lib/fluent/variable_store.rb +40 -0
  316. data/lib/fluent/version.rb +21 -0
  317. data/lib/fluent/winsvc.rb +103 -0
  318. data/templates/new_gem/Gemfile +3 -0
  319. data/templates/new_gem/README.md.erb +43 -0
  320. data/templates/new_gem/Rakefile +13 -0
  321. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  322. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  323. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  324. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  325. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  326. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  327. data/templates/new_gem/lib/fluent/plugin/storage.rb.erb +40 -0
  328. data/templates/new_gem/test/helper.rb.erb +8 -0
  329. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  330. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  331. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  332. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  333. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  334. data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
  335. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  336. data/templates/plugin_config_formatter/param.md-table.erb +10 -0
  337. data/templates/plugin_config_formatter/param.md.erb +34 -0
  338. data/templates/plugin_config_formatter/section.md.erb +12 -0
  339. data/test/command/test_binlog_reader.rb +362 -0
  340. data/test/command/test_ca_generate.rb +70 -0
  341. data/test/command/test_cap_ctl.rb +100 -0
  342. data/test/command/test_cat.rb +128 -0
  343. data/test/command/test_ctl.rb +57 -0
  344. data/test/command/test_fluentd.rb +1106 -0
  345. data/test/command/test_plugin_config_formatter.rb +398 -0
  346. data/test/command/test_plugin_generator.rb +109 -0
  347. data/test/compat/test_calls_super.rb +166 -0
  348. data/test/compat/test_parser.rb +92 -0
  349. data/test/config/assertions.rb +42 -0
  350. data/test/config/test_config_parser.rb +551 -0
  351. data/test/config/test_configurable.rb +1784 -0
  352. data/test/config/test_configure_proxy.rb +604 -0
  353. data/test/config/test_dsl.rb +415 -0
  354. data/test/config/test_element.rb +518 -0
  355. data/test/config/test_literal_parser.rb +309 -0
  356. data/test/config/test_plugin_configuration.rb +56 -0
  357. data/test/config/test_section.rb +191 -0
  358. data/test/config/test_system_config.rb +199 -0
  359. data/test/config/test_types.rb +408 -0
  360. data/test/counter/test_client.rb +563 -0
  361. data/test/counter/test_error.rb +44 -0
  362. data/test/counter/test_mutex_hash.rb +179 -0
  363. data/test/counter/test_server.rb +589 -0
  364. data/test/counter/test_store.rb +258 -0
  365. data/test/counter/test_validator.rb +137 -0
  366. data/test/helper.rb +155 -0
  367. data/test/helpers/fuzzy_assert.rb +89 -0
  368. data/test/helpers/process_extenstion.rb +33 -0
  369. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  370. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  371. data/test/plugin/data/2010/01/20100102.log +0 -0
  372. data/test/plugin/data/log/bar +0 -0
  373. data/test/plugin/data/log/foo/bar.log +0 -0
  374. data/test/plugin/data/log/foo/bar2 +0 -0
  375. data/test/plugin/data/log/test.log +0 -0
  376. data/test/plugin/data/sd_file/config +11 -0
  377. data/test/plugin/data/sd_file/config.json +17 -0
  378. data/test/plugin/data/sd_file/config.yaml +11 -0
  379. data/test/plugin/data/sd_file/config.yml +11 -0
  380. data/test/plugin/data/sd_file/invalid_config.yml +7 -0
  381. data/test/plugin/in_tail/test_fifo.rb +121 -0
  382. data/test/plugin/in_tail/test_io_handler.rb +140 -0
  383. data/test/plugin/in_tail/test_position_file.rb +379 -0
  384. data/test/plugin/out_forward/test_ack_handler.rb +101 -0
  385. data/test/plugin/out_forward/test_connection_manager.rb +145 -0
  386. data/test/plugin/out_forward/test_handshake_protocol.rb +112 -0
  387. data/test/plugin/out_forward/test_load_balancer.rb +106 -0
  388. data/test/plugin/out_forward/test_socket_cache.rb +149 -0
  389. data/test/plugin/test_bare_output.rb +131 -0
  390. data/test/plugin/test_base.rb +115 -0
  391. data/test/plugin/test_buf_file.rb +1275 -0
  392. data/test/plugin/test_buf_file_single.rb +833 -0
  393. data/test/plugin/test_buf_memory.rb +42 -0
  394. data/test/plugin/test_buffer.rb +1383 -0
  395. data/test/plugin/test_buffer_chunk.rb +198 -0
  396. data/test/plugin/test_buffer_file_chunk.rb +871 -0
  397. data/test/plugin/test_buffer_file_single_chunk.rb +611 -0
  398. data/test/plugin/test_buffer_memory_chunk.rb +339 -0
  399. data/test/plugin/test_compressable.rb +87 -0
  400. data/test/plugin/test_file_util.rb +96 -0
  401. data/test/plugin/test_file_wrapper.rb +126 -0
  402. data/test/plugin/test_filter.rb +368 -0
  403. data/test/plugin/test_filter_grep.rb +697 -0
  404. data/test/plugin/test_filter_parser.rb +731 -0
  405. data/test/plugin/test_filter_record_transformer.rb +577 -0
  406. data/test/plugin/test_filter_stdout.rb +207 -0
  407. data/test/plugin/test_formatter_csv.rb +136 -0
  408. data/test/plugin/test_formatter_hash.rb +38 -0
  409. data/test/plugin/test_formatter_json.rb +61 -0
  410. data/test/plugin/test_formatter_ltsv.rb +70 -0
  411. data/test/plugin/test_formatter_msgpack.rb +28 -0
  412. data/test/plugin/test_formatter_out_file.rb +116 -0
  413. data/test/plugin/test_formatter_single_value.rb +44 -0
  414. data/test/plugin/test_formatter_tsv.rb +76 -0
  415. data/test/plugin/test_in_debug_agent.rb +49 -0
  416. data/test/plugin/test_in_exec.rb +261 -0
  417. data/test/plugin/test_in_forward.rb +1180 -0
  418. data/test/plugin/test_in_gc_stat.rb +62 -0
  419. data/test/plugin/test_in_http.rb +1080 -0
  420. data/test/plugin/test_in_monitor_agent.rb +923 -0
  421. data/test/plugin/test_in_object_space.rb +60 -0
  422. data/test/plugin/test_in_sample.rb +190 -0
  423. data/test/plugin/test_in_syslog.rb +505 -0
  424. data/test/plugin/test_in_tail.rb +2363 -0
  425. data/test/plugin/test_in_tcp.rb +243 -0
  426. data/test/plugin/test_in_udp.rb +268 -0
  427. data/test/plugin/test_in_unix.rb +181 -0
  428. data/test/plugin/test_input.rb +137 -0
  429. data/test/plugin/test_metadata.rb +89 -0
  430. data/test/plugin/test_metrics.rb +294 -0
  431. data/test/plugin/test_metrics_local.rb +96 -0
  432. data/test/plugin/test_multi_output.rb +204 -0
  433. data/test/plugin/test_out_copy.rb +308 -0
  434. data/test/plugin/test_out_exec.rb +312 -0
  435. data/test/plugin/test_out_exec_filter.rb +606 -0
  436. data/test/plugin/test_out_file.rb +1037 -0
  437. data/test/plugin/test_out_forward.rb +1348 -0
  438. data/test/plugin/test_out_http.rb +428 -0
  439. data/test/plugin/test_out_null.rb +105 -0
  440. data/test/plugin/test_out_relabel.rb +28 -0
  441. data/test/plugin/test_out_roundrobin.rb +146 -0
  442. data/test/plugin/test_out_secondary_file.rb +458 -0
  443. data/test/plugin/test_out_stdout.rb +205 -0
  444. data/test/plugin/test_out_stream.rb +103 -0
  445. data/test/plugin/test_output.rb +1065 -0
  446. data/test/plugin/test_output_as_buffered.rb +2024 -0
  447. data/test/plugin/test_output_as_buffered_backup.rb +363 -0
  448. data/test/plugin/test_output_as_buffered_compress.rb +165 -0
  449. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  450. data/test/plugin/test_output_as_buffered_retries.rb +919 -0
  451. data/test/plugin/test_output_as_buffered_secondary.rb +882 -0
  452. data/test/plugin/test_output_as_standard.rb +374 -0
  453. data/test/plugin/test_owned_by.rb +35 -0
  454. data/test/plugin/test_parser.rb +399 -0
  455. data/test/plugin/test_parser_apache.rb +42 -0
  456. data/test/plugin/test_parser_apache2.rb +47 -0
  457. data/test/plugin/test_parser_apache_error.rb +45 -0
  458. data/test/plugin/test_parser_csv.rb +200 -0
  459. data/test/plugin/test_parser_json.rb +138 -0
  460. data/test/plugin/test_parser_labeled_tsv.rb +160 -0
  461. data/test/plugin/test_parser_multiline.rb +111 -0
  462. data/test/plugin/test_parser_nginx.rb +88 -0
  463. data/test/plugin/test_parser_none.rb +52 -0
  464. data/test/plugin/test_parser_regexp.rb +289 -0
  465. data/test/plugin/test_parser_syslog.rb +650 -0
  466. data/test/plugin/test_parser_tsv.rb +122 -0
  467. data/test/plugin/test_sd_file.rb +228 -0
  468. data/test/plugin/test_sd_srv.rb +230 -0
  469. data/test/plugin/test_storage.rb +167 -0
  470. data/test/plugin/test_storage_local.rb +335 -0
  471. data/test/plugin/test_string_util.rb +26 -0
  472. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  473. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +19 -0
  474. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  475. data/test/plugin_helper/data/cert/cert.pem +19 -0
  476. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +27 -0
  477. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +20 -0
  478. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +27 -0
  479. data/test/plugin_helper/data/cert/cert_chains/cert.pem +40 -0
  480. data/test/plugin_helper/data/cert/empty.pem +0 -0
  481. data/test/plugin_helper/data/cert/generate_cert.rb +125 -0
  482. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +30 -0
  483. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +27 -0
  484. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +20 -0
  485. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +20 -0
  486. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +30 -0
  487. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +27 -0
  488. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +21 -0
  489. data/test/plugin_helper/data/cert/with_ca/cert.pem +21 -0
  490. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +30 -0
  491. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +27 -0
  492. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +20 -0
  493. data/test/plugin_helper/data/cert/without_ca/cert.pem +20 -0
  494. data/test/plugin_helper/http_server/test_app.rb +65 -0
  495. data/test/plugin_helper/http_server/test_route.rb +32 -0
  496. data/test/plugin_helper/service_discovery/test_manager.rb +93 -0
  497. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +21 -0
  498. data/test/plugin_helper/test_cert_option.rb +25 -0
  499. data/test/plugin_helper/test_child_process.rb +840 -0
  500. data/test/plugin_helper/test_compat_parameters.rb +358 -0
  501. data/test/plugin_helper/test_event_emitter.rb +80 -0
  502. data/test/plugin_helper/test_event_loop.rb +52 -0
  503. data/test/plugin_helper/test_extract.rb +194 -0
  504. data/test/plugin_helper/test_formatter.rb +255 -0
  505. data/test/plugin_helper/test_http_server_helper.rb +372 -0
  506. data/test/plugin_helper/test_inject.rb +561 -0
  507. data/test/plugin_helper/test_metrics.rb +137 -0
  508. data/test/plugin_helper/test_parser.rb +264 -0
  509. data/test/plugin_helper/test_record_accessor.rb +238 -0
  510. data/test/plugin_helper/test_retry_state.rb +442 -0
  511. data/test/plugin_helper/test_server.rb +1823 -0
  512. data/test/plugin_helper/test_service_discovery.rb +165 -0
  513. data/test/plugin_helper/test_socket.rb +146 -0
  514. data/test/plugin_helper/test_storage.rb +542 -0
  515. data/test/plugin_helper/test_thread.rb +164 -0
  516. data/test/plugin_helper/test_timer.rb +130 -0
  517. data/test/scripts/exec_script.rb +32 -0
  518. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  519. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  520. data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
  521. data/test/scripts/fluent/plugin/out_test.rb +81 -0
  522. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  523. data/test/scripts/fluent/plugin/parser_known.rb +4 -0
  524. data/test/test_capability.rb +74 -0
  525. data/test/test_clock.rb +164 -0
  526. data/test/test_config.rb +202 -0
  527. data/test/test_configdsl.rb +148 -0
  528. data/test/test_daemonizer.rb +91 -0
  529. data/test/test_engine.rb +203 -0
  530. data/test/test_event.rb +531 -0
  531. data/test/test_event_router.rb +331 -0
  532. data/test/test_event_time.rb +199 -0
  533. data/test/test_filter.rb +121 -0
  534. data/test/test_fluent_log_event_router.rb +99 -0
  535. data/test/test_formatter.rb +366 -0
  536. data/test/test_input.rb +31 -0
  537. data/test/test_log.rb +994 -0
  538. data/test/test_logger_initializer.rb +46 -0
  539. data/test/test_match.rb +148 -0
  540. data/test/test_mixin.rb +351 -0
  541. data/test/test_msgpack_factory.rb +18 -0
  542. data/test/test_oj_options.rb +55 -0
  543. data/test/test_output.rb +278 -0
  544. data/test/test_plugin.rb +251 -0
  545. data/test/test_plugin_classes.rb +370 -0
  546. data/test/test_plugin_helper.rb +81 -0
  547. data/test/test_plugin_id.rb +119 -0
  548. data/test/test_process.rb +14 -0
  549. data/test/test_root_agent.rb +951 -0
  550. data/test/test_static_config_analysis.rb +177 -0
  551. data/test/test_supervisor.rb +601 -0
  552. data/test/test_test_drivers.rb +136 -0
  553. data/test/test_time_formatter.rb +301 -0
  554. data/test/test_time_parser.rb +362 -0
  555. data/test/test_tls.rb +65 -0
  556. data/test/test_unique_id.rb +47 -0
  557. data/test/test_variable_store.rb +65 -0
  558. metadata +1261 -0
@@ -0,0 +1,721 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/plugin'
18
+ require 'fluent/plugin/buffer'
19
+ require 'fluent/plugin/output'
20
+ require 'fluent/plugin/bare_output'
21
+ require 'fluent/compat/call_super_mixin'
22
+ require 'fluent/compat/formatter_utils'
23
+ require 'fluent/compat/handle_tag_and_time_mixin'
24
+ require 'fluent/compat/parser_utils'
25
+ require 'fluent/compat/propagate_default'
26
+ require 'fluent/compat/record_filter_mixin'
27
+ require 'fluent/compat/output_chain'
28
+ require 'fluent/timezone'
29
+ require 'fluent/mixin'
30
+ require 'fluent/process'
31
+ require 'fluent/event'
32
+
33
+ require 'fluent/plugin_helper/compat_parameters'
34
+
35
+ require 'time'
36
+
37
+ module Fluent
38
+ module Compat
39
+ NULL_OUTPUT_CHAIN = NullOutputChain.instance
40
+ BufferQueueLimitError = ::Fluent::Plugin::Buffer::BufferOverflowError
41
+
42
+ module CompatOutputUtils
43
+ def self.buffer_section(conf)
44
+ conf.elements(name: 'buffer').first
45
+ end
46
+
47
+ def self.secondary_section(conf)
48
+ conf.elements(name: 'secondary').first
49
+ end
50
+ end
51
+
52
+ module BufferedEventStreamMixin
53
+ include Enumerable
54
+
55
+ def repeatable?
56
+ true
57
+ end
58
+
59
+ def each(&block)
60
+ msgpack_each(&block)
61
+ end
62
+
63
+ def to_msgpack_stream
64
+ read
65
+ end
66
+
67
+ def key
68
+ metadata.tag
69
+ end
70
+ end
71
+
72
+ module AddTimeSliceKeyToChunkMixin
73
+ def time_slice_format=(format)
74
+ @_time_slice_format = format
75
+ end
76
+
77
+ def timekey=(unit)
78
+ @_timekey = unit
79
+ end
80
+
81
+ def timezone=(tz)
82
+ @_timezone = tz
83
+ end
84
+
85
+ def assume_timekey!
86
+ @_formatter = Fluent::TimeFormatter.new(@_time_slice_format, nil, @_timezone)
87
+
88
+ return if self.metadata.timekey
89
+ if self.respond_to?(:path) && self.path =~ /\.(\d+)\.(?:b|q)(?:[a-z0-9]+)/
90
+ begin
91
+ self.metadata.timekey = Time.parse($1, @_time_slice_format).to_i
92
+ rescue ArgumentError
93
+ # unknown format / value as timekey
94
+ end
95
+ end
96
+ unless self.metadata.timekey
97
+ # file creation time is assumed in the time range of that time slice
98
+ # because the first record should be in that range.
99
+ time_int = self.created_at.to_i
100
+ self.metadata.timekey = time_int - (time_int % @_timekey)
101
+ end
102
+ end
103
+
104
+ def key
105
+ @_formatter.call(self.metadata.timekey)
106
+ end
107
+ end
108
+
109
+ module AddKeyToChunkMixin
110
+ def key
111
+ self.metadata.variables[:key]
112
+ end
113
+ end
114
+
115
+ module ChunkSizeCompatMixin
116
+ def size
117
+ self.bytesize
118
+ end
119
+
120
+ def size_of_events
121
+ @size + @adding_size
122
+ end
123
+ end
124
+
125
+ module BufferedChunkMixin
126
+ # prepend this module to BufferedOutput (including ObjectBufferedOutput) plugin singleton class
127
+ def write(chunk)
128
+ chunk.extend(ChunkSizeCompatMixin)
129
+ chunk.extend(ChunkMessagePackEventStreamer)
130
+ chunk.extend(AddKeyToChunkMixin) if chunk.metadata.variables && chunk.metadata.variables.has_key?(:key)
131
+ super
132
+ end
133
+ end
134
+
135
+ module TimeSliceChunkMixin
136
+ # prepend this module to TimeSlicedOutput plugin singleton class
137
+ def write(chunk)
138
+ chunk.extend(ChunkSizeCompatMixin)
139
+ chunk.extend(ChunkMessagePackEventStreamer)
140
+ chunk.extend(AddTimeSliceKeyToChunkMixin)
141
+ chunk.time_slice_format = @time_slice_format
142
+ chunk.timekey = @_timekey
143
+ chunk.timezone = @timezone
144
+ chunk.assume_timekey!
145
+ super
146
+ end
147
+ end
148
+
149
+ class Output < Fluent::Plugin::Output
150
+ # TODO: warn when deprecated
151
+
152
+ helpers_internal :event_emitter, :inject
153
+
154
+ def support_in_v12_style?(feature)
155
+ case feature
156
+ when :synchronous then true
157
+ when :buffered then false
158
+ when :delayed_commit then false
159
+ when :custom_format then false
160
+ end
161
+ end
162
+
163
+ def process(tag, es)
164
+ emit(tag, es, NULL_OUTPUT_CHAIN)
165
+ end
166
+
167
+ def initialize
168
+ super
169
+ unless self.class.ancestors.include?(Fluent::Compat::CallSuperMixin)
170
+ self.class.prepend Fluent::Compat::CallSuperMixin
171
+ end
172
+ end
173
+
174
+ def configure(conf)
175
+ ParserUtils.convert_parser_conf(conf)
176
+ FormatterUtils.convert_formatter_conf(conf)
177
+
178
+ super
179
+ end
180
+
181
+ def start
182
+ super
183
+
184
+ if instance_variable_defined?(:@formatter) && @inject_config
185
+ unless @formatter.class.ancestors.include?(Fluent::Compat::HandleTagAndTimeMixin)
186
+ if @formatter.respond_to?(:owner) && !@formatter.owner
187
+ @formatter.owner = self
188
+ @formatter.singleton_class.prepend FormatterUtils::InjectMixin
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
194
+
195
+ class MultiOutput < Fluent::Plugin::BareOutput
196
+ # TODO: warn when deprecated
197
+
198
+ helpers_internal :event_emitter
199
+
200
+ def process(tag, es)
201
+ emit(tag, es, NULL_OUTPUT_CHAIN)
202
+ end
203
+ end
204
+
205
+ class BufferedOutput < Fluent::Plugin::Output
206
+ # TODO: warn when deprecated
207
+
208
+ helpers_internal :event_emitter, :inject
209
+
210
+ def support_in_v12_style?(feature)
211
+ case feature
212
+ when :synchronous then false
213
+ when :buffered then true
214
+ when :delayed_commit then false
215
+ when :custom_format then true
216
+ end
217
+ end
218
+
219
+ desc 'The buffer type (memory, file)'
220
+ config_param :buffer_type, :string, default: 'memory'
221
+ desc 'The interval between data flushes.'
222
+ config_param :flush_interval, :time, default: 60
223
+ config_param :try_flush_interval, :float, default: 1
224
+ desc 'If true, the value of `retry_value` is ignored and there is no limit'
225
+ config_param :disable_retry_limit, :bool, default: false
226
+ desc 'The limit on the number of retries before buffered data is discarded'
227
+ config_param :retry_limit, :integer, default: 17
228
+ desc 'The initial intervals between write retries.'
229
+ config_param :retry_wait, :time, default: 1.0
230
+ desc 'The maximum intervals between write retries.'
231
+ config_param :max_retry_wait, :time, default: nil
232
+ desc 'The number of threads to flush the buffer.'
233
+ config_param :num_threads, :integer, default: 1
234
+ desc 'The interval between data flushes for queued chunk.'
235
+ config_param :queued_chunk_flush_interval, :time, default: 1
236
+
237
+ desc 'The size of each buffer chunk.'
238
+ config_param :buffer_chunk_limit, :size, default: 8*1024*1024
239
+ desc 'The length limit of the chunk queue.'
240
+ config_param :buffer_queue_limit, :integer, default: 256
241
+ desc 'The action when the size of buffer queue exceeds the buffer_queue_limit.'
242
+ config_param :buffer_queue_full_action, :enum, list: [:exception, :block, :drop_oldest_chunk], default: :exception
243
+
244
+ config_param :flush_at_shutdown, :bool, default: true
245
+
246
+ BUFFER_PARAMS = Fluent::PluginHelper::CompatParameters::BUFFER_PARAMS
247
+
248
+ def self.propagate_default_params
249
+ BUFFER_PARAMS
250
+ end
251
+ include PropagateDefault
252
+
253
+ def configure(conf)
254
+ bufconf = CompatOutputUtils.buffer_section(conf)
255
+ config_style = (bufconf ? :v1 : :v0)
256
+ if config_style == :v0
257
+ buf_params = {
258
+ "flush_mode" => "interval",
259
+ "retry_type" => "exponential_backoff",
260
+ }
261
+ BUFFER_PARAMS.each do |older, newer|
262
+ next unless newer
263
+ if conf.has_key?(older)
264
+ if older == 'buffer_queue_full_action' && conf[older] == 'exception'
265
+ buf_params[newer] = 'throw_exception'
266
+ else
267
+ buf_params[newer] = conf[older]
268
+ end
269
+ end
270
+ end
271
+
272
+ conf.elements << Fluent::Config::Element.new('buffer', '', buf_params, [])
273
+ end
274
+
275
+ @includes_record_filter = self.class.ancestors.include?(Fluent::Compat::RecordFilterMixin)
276
+
277
+ methods_of_plugin = self.class.instance_methods(false)
278
+ @overrides_emit = methods_of_plugin.include?(:emit)
279
+ # RecordFilter mixin uses its own #format_stream method implementation
280
+ @overrides_format_stream = methods_of_plugin.include?(:format_stream) || @includes_record_filter
281
+
282
+ ParserUtils.convert_parser_conf(conf)
283
+ FormatterUtils.convert_formatter_conf(conf)
284
+
285
+ super
286
+
287
+ if config_style == :v1
288
+ unless @buffer_config.chunk_keys.empty?
289
+ raise Fluent::ConfigError, "this plugin '#{self.class}' cannot handle arguments for <buffer ...> section"
290
+ end
291
+ end
292
+
293
+ self.extend BufferedChunkMixin
294
+
295
+ if @overrides_emit
296
+ self.singleton_class.module_eval do
297
+ attr_accessor :last_emit_via_buffer
298
+ end
299
+ output_plugin = self
300
+ m = Module.new do
301
+ define_method(:emit) do |key, data, chain|
302
+ # receivers of this method are buffer instances
303
+ output_plugin.last_emit_via_buffer = [key, data]
304
+ end
305
+ end
306
+ @buffer.extend m
307
+ end
308
+ end
309
+
310
+ # original implementation of v0.12 BufferedOutput
311
+ def emit(tag, es, chain, key="")
312
+ # this method will not be used except for the case that plugin calls super
313
+ @emit_count_metrics.inc
314
+ data = format_stream(tag, es)
315
+ if @buffer.emit(key, data, chain)
316
+ submit_flush
317
+ end
318
+ end
319
+
320
+ def submit_flush
321
+ # nothing todo: blank method to be called from #emit of 3rd party plugins
322
+ end
323
+
324
+ def format_stream(tag, es)
325
+ # this method will not be used except for the case that plugin calls super
326
+ out = ''
327
+ es.each do |time, record|
328
+ out << format(tag, time, record)
329
+ end
330
+ out
331
+ end
332
+
333
+ # #format MUST be implemented in plugin
334
+ # #write is also
335
+
336
+ # This method overrides Fluent::Plugin::Output#handle_stream_simple
337
+ # because v0.12 BufferedOutput may overrides #format_stream, but original #handle_stream_simple method doesn't consider about it
338
+ def handle_stream_simple(tag, es, enqueue: false)
339
+ if @overrides_emit
340
+ current_emit_count = @emit_count_metrics.get
341
+ size = es.size
342
+ key = data = nil
343
+ begin
344
+ emit(tag, es, NULL_OUTPUT_CHAIN)
345
+ key, data = self.last_emit_via_buffer
346
+ ensure
347
+ @emit_count_metrics.set(current_emit_count)
348
+ self.last_emit_via_buffer = nil
349
+ end
350
+ # on-the-fly key assignment can be done, and it's not configurable if Plugin#emit does it dynamically
351
+ meta = @buffer.metadata(variables: (key && !key.empty? ? {key: key} : nil))
352
+ write_guard do
353
+ @buffer.write({meta => data}, format: ->(_data){ _data }, size: ->(){ size }, enqueue: enqueue)
354
+ end
355
+ @emit_records_metrics.add(es.size)
356
+ @emit_size_metrics.add(es.to_msgpack_stream.bytesize) if @enable_size_metrics
357
+ return [meta]
358
+ end
359
+
360
+ if @overrides_format_stream
361
+ meta = metadata(nil, nil, nil)
362
+ size = es.size
363
+ bulk = format_stream(tag, es)
364
+ write_guard do
365
+ @buffer.write({meta => bulk}, format: ->(_data){ _data }, size: ->(){ size }, enqueue: enqueue)
366
+ end
367
+ @emit_records_metrics.add(es.size)
368
+ @emit_size_metrics.add(es.to_msgpack_stream.bytesize) if @enable_size_metrics
369
+ return [meta]
370
+ end
371
+
372
+ meta = metadata(nil, nil, nil)
373
+ size = es.size
374
+ data = es.map{|time,record| format(tag, time, record) }
375
+ write_guard do
376
+ @buffer.write({meta => data}, enqueue: enqueue)
377
+ end
378
+ @emit_records_metrics.add(es.size)
379
+ @emit_size_metrics.add(es.to_msgpack_stream.bytesize) if @enable_size_metrics
380
+ [meta]
381
+ end
382
+
383
+ def extract_placeholders(str, metadata)
384
+ raise "BUG: compat plugin does not support extract_placeholders: use newer plugin API"
385
+ end
386
+
387
+ def initialize
388
+ super
389
+ unless self.class.ancestors.include?(Fluent::Compat::CallSuperMixin)
390
+ self.class.prepend Fluent::Compat::CallSuperMixin
391
+ end
392
+ end
393
+
394
+ def start
395
+ super
396
+
397
+ if instance_variable_defined?(:@formatter) && @inject_config
398
+ unless @formatter.class.ancestors.include?(Fluent::Compat::HandleTagAndTimeMixin)
399
+ if @formatter.respond_to?(:owner) && !@formatter.owner
400
+ @formatter.owner = self
401
+ @formatter.singleton_class.prepend FormatterUtils::InjectMixin
402
+ end
403
+ end
404
+ end
405
+ end
406
+
407
+ def detach_process(&block)
408
+ log.warn "detach_process is not supported in this version. ignored."
409
+ block.call
410
+ end
411
+
412
+ def detach_multi_process(&block)
413
+ log.warn "detach_process is not supported in this version. ignored."
414
+ block.call
415
+ end
416
+ end
417
+
418
+ class ObjectBufferedOutput < Fluent::Plugin::Output
419
+ # TODO: warn when deprecated
420
+
421
+ helpers_internal :event_emitter, :inject
422
+
423
+ # This plugin cannot inherit BufferedOutput because #configure sets chunk_key 'tag'
424
+ # to flush chunks per tags, but BufferedOutput#configure doesn't allow setting chunk_key
425
+ # in v1 style configuration
426
+
427
+ def support_in_v12_style?(feature)
428
+ case feature
429
+ when :synchronous then false
430
+ when :buffered then true
431
+ when :delayed_commit then false
432
+ when :custom_format then false
433
+ end
434
+ end
435
+
436
+ desc 'The buffer type (memory, file)'
437
+ config_param :buffer_type, :string, default: 'memory'
438
+ desc 'The interval between data flushes.'
439
+ config_param :flush_interval, :time, default: 60
440
+ config_param :try_flush_interval, :float, default: 1
441
+ desc 'If true, the value of `retry_value` is ignored and there is no limit'
442
+ config_param :disable_retry_limit, :bool, default: false
443
+ desc 'The limit on the number of retries before buffered data is discarded'
444
+ config_param :retry_limit, :integer, default: 17
445
+ desc 'The initial intervals between write retries.'
446
+ config_param :retry_wait, :time, default: 1.0
447
+ desc 'The maximum intervals between write retries.'
448
+ config_param :max_retry_wait, :time, default: nil
449
+ desc 'The number of threads to flush the buffer.'
450
+ config_param :num_threads, :integer, default: 1
451
+ desc 'The interval between data flushes for queued chunk.'
452
+ config_param :queued_chunk_flush_interval, :time, default: 1
453
+
454
+ desc 'The size of each buffer chunk.'
455
+ config_param :buffer_chunk_limit, :size, default: 8*1024*1024
456
+ desc 'The length limit of the chunk queue.'
457
+ config_param :buffer_queue_limit, :integer, default: 256
458
+ desc 'The action when the size of buffer queue exceeds the buffer_queue_limit.'
459
+ config_param :buffer_queue_full_action, :enum, list: [:exception, :block, :drop_oldest_chunk], default: :exception
460
+
461
+ config_param :flush_at_shutdown, :bool, default: true
462
+
463
+ config_set_default :time_as_integer, true
464
+
465
+ BUFFER_PARAMS = Fluent::PluginHelper::CompatParameters::BUFFER_PARAMS
466
+
467
+ def self.propagate_default_params
468
+ BUFFER_PARAMS
469
+ end
470
+ include PropagateDefault
471
+
472
+ def configure(conf)
473
+ bufconf = CompatOutputUtils.buffer_section(conf)
474
+ config_style = (bufconf ? :v1 : :v0)
475
+ if config_style == :v0
476
+ buf_params = {
477
+ "flush_mode" => "interval",
478
+ "retry_type" => "exponential_backoff",
479
+ }
480
+ BUFFER_PARAMS.each do |older, newer|
481
+ next unless newer
482
+ if conf.has_key?(older)
483
+ if older == 'buffer_queue_full_action' && conf[older] == 'exception'
484
+ buf_params[newer] = 'throw_exception'
485
+ else
486
+ buf_params[newer] = conf[older]
487
+ end
488
+ end
489
+ end
490
+
491
+ conf.elements << Fluent::Config::Element.new('buffer', 'tag', buf_params, [])
492
+ end
493
+
494
+ ParserUtils.convert_parser_conf(conf)
495
+ FormatterUtils.convert_formatter_conf(conf)
496
+
497
+ super
498
+
499
+ if config_style == :v1
500
+ if @buffer_config.chunk_keys == ['tag']
501
+ raise Fluent::ConfigError, "this plugin '#{self.class}' allows <buffer tag> only"
502
+ end
503
+ end
504
+
505
+ self.extend BufferedChunkMixin
506
+ end
507
+
508
+ def format_stream(tag, es) # for BufferedOutputTestDriver
509
+ if @compress == :gzip
510
+ es.to_compressed_msgpack_stream(time_int: @time_as_integer)
511
+ else
512
+ es.to_msgpack_stream(time_int: @time_as_integer)
513
+ end
514
+ end
515
+
516
+ def write(chunk)
517
+ write_objects(chunk.metadata.tag, chunk)
518
+ end
519
+
520
+ def extract_placeholders(str, metadata)
521
+ raise "BUG: compat plugin does not support extract_placeholders: use newer plugin API"
522
+ end
523
+
524
+ def initialize
525
+ super
526
+ unless self.class.ancestors.include?(Fluent::Compat::CallSuperMixin)
527
+ self.class.prepend Fluent::Compat::CallSuperMixin
528
+ end
529
+ end
530
+
531
+ def start
532
+ super
533
+
534
+ if instance_variable_defined?(:@formatter) && @inject_config
535
+ unless @formatter.class.ancestors.include?(Fluent::Compat::HandleTagAndTimeMixin)
536
+ if @formatter.respond_to?(:owner) && !@formatter.owner
537
+ @formatter.owner = self
538
+ @formatter.singleton_class.prepend FormatterUtils::InjectMixin
539
+ end
540
+ end
541
+ end
542
+ end
543
+
544
+ def detach_process(&block)
545
+ log.warn "detach_process is not supported in this version. ignored."
546
+ block.call
547
+ end
548
+
549
+ def detach_multi_process(&block)
550
+ log.warn "detach_process is not supported in this version. ignored."
551
+ block.call
552
+ end
553
+ end
554
+
555
+ class TimeSlicedOutput < Fluent::Plugin::Output
556
+ # TODO: warn when deprecated
557
+
558
+ helpers_internal :event_emitter, :inject
559
+
560
+ def support_in_v12_style?(feature)
561
+ case feature
562
+ when :synchronous then false
563
+ when :buffered then true
564
+ when :delayed_commit then false
565
+ when :custom_format then true
566
+ end
567
+ end
568
+
569
+ desc 'The buffer type (memory, file)'
570
+ config_param :buffer_type, :string, default: 'file'
571
+ desc 'The interval between data flushes.'
572
+ config_param :flush_interval, :time, default: nil
573
+ config_param :try_flush_interval, :float, default: 1
574
+ desc 'If true, the value of `retry_value` is ignored and there is no limit'
575
+ config_param :disable_retry_limit, :bool, default: false
576
+ desc 'The limit on the number of retries before buffered data is discarded'
577
+ config_param :retry_limit, :integer, default: 17
578
+ desc 'The initial intervals between write retries.'
579
+ config_param :retry_wait, :time, default: 1.0
580
+ desc 'The maximum intervals between write retries.'
581
+ config_param :max_retry_wait, :time, default: nil
582
+ desc 'The number of threads to flush the buffer.'
583
+ config_param :num_threads, :integer, default: 1
584
+ desc 'The interval between data flushes for queued chunk.'
585
+ config_param :queued_chunk_flush_interval, :time, default: 1
586
+
587
+ desc 'The time format used as part of the file name.'
588
+ config_param :time_slice_format, :string, default: '%Y%m%d'
589
+ desc 'The amount of time Fluentd will wait for old logs to arrive.'
590
+ config_param :time_slice_wait, :time, default: 10*60
591
+ desc 'Parse the time value in the specified timezone'
592
+ config_param :timezone, :string, default: nil
593
+
594
+ desc 'The size of each buffer chunk.'
595
+ config_param :buffer_chunk_limit, :size, default: 256*1024*1024
596
+ desc 'The length limit of the chunk queue.'
597
+ config_param :buffer_queue_limit, :integer, default: 256
598
+ desc 'The action when the size of buffer queue exceeds the buffer_queue_limit.'
599
+ config_param :buffer_queue_full_action, :enum, list: [:exception, :block, :drop_oldest_chunk], default: :exception
600
+
601
+ config_param :flush_at_shutdown, :bool, default: false
602
+
603
+ attr_accessor :localtime
604
+
605
+ config_section :buffer do
606
+ config_set_default :@type, 'file'
607
+ end
608
+
609
+ BUFFER_PARAMS = Fluent::PluginHelper::CompatParameters::BUFFER_PARAMS.merge(Fluent::PluginHelper::CompatParameters::BUFFER_TIME_SLICED_PARAMS)
610
+
611
+ def initialize
612
+ super
613
+ @localtime = true
614
+
615
+ unless self.class.ancestors.include?(Fluent::Compat::CallSuperMixin)
616
+ self.class.prepend Fluent::Compat::CallSuperMixin
617
+ end
618
+ end
619
+
620
+ def self.propagate_default_params
621
+ BUFFER_PARAMS
622
+ end
623
+ include PropagateDefault
624
+
625
+ def configure(conf)
626
+ bufconf = CompatOutputUtils.buffer_section(conf)
627
+ config_style = (bufconf ? :v1 : :v0)
628
+ if config_style == :v0
629
+ buf_params = {
630
+ "flush_mode" => (conf['flush_interval'] ? "interval" : "lazy"),
631
+ "retry_type" => "exponential_backoff",
632
+ }
633
+ BUFFER_PARAMS.each do |older, newer|
634
+ next unless newer
635
+ if conf.has_key?(older)
636
+ if older == 'buffer_queue_full_action' && conf[older] == 'exception'
637
+ buf_params[newer] = 'throw_exception'
638
+ else
639
+ buf_params[newer] = conf[older]
640
+ end
641
+ end
642
+ end
643
+
644
+ if conf['timezone']
645
+ Fluent::Timezone.validate!(conf['timezone'])
646
+ elsif conf['utc']
647
+ # v0.12 assumes UTC without any configuration
648
+ # 'localtime=false && no timezone key' means UTC
649
+ conf['localtime'] = "false"
650
+ conf.delete('utc')
651
+ elsif conf['localtime']
652
+ conf['timezone'] = Time.now.strftime('%z')
653
+ conf['localtime'] = "true"
654
+ else
655
+ # v0.12 assumes UTC without any configuration
656
+ # 'localtime=false && no timezone key' means UTC
657
+ conf['localtime'] = "false"
658
+ end
659
+
660
+ @_timekey = case conf['time_slice_format']
661
+ when /\%S/ then 1
662
+ when /\%M/ then 60
663
+ when /\%H/ then 3600
664
+ when /\%d/ then 86400
665
+ when nil then 86400 # default value of TimeSlicedOutput.time_slice_format is '%Y%m%d'
666
+ else
667
+ raise Fluent::ConfigError, "time_slice_format only with %Y or %m is too long"
668
+ end
669
+ buf_params["timekey"] = @_timekey
670
+
671
+ conf.elements << Fluent::Config::Element.new('buffer', 'time', buf_params, [])
672
+ end
673
+
674
+ ParserUtils.convert_parser_conf(conf)
675
+ FormatterUtils.convert_formatter_conf(conf)
676
+
677
+ super
678
+
679
+ if config_style == :v1
680
+ if @buffer_config.chunk_keys == ['tag']
681
+ raise Fluent::ConfigError, "this plugin '#{self.class}' allows <buffer tag> only"
682
+ end
683
+ end
684
+
685
+ self.extend TimeSliceChunkMixin
686
+ end
687
+
688
+ def start
689
+ super
690
+
691
+ if instance_variable_defined?(:@formatter) && @inject_config
692
+ unless @formatter.class.ancestors.include?(Fluent::Compat::HandleTagAndTimeMixin)
693
+ if @formatter.respond_to?(:owner) && !@formatter.owner
694
+ @formatter.owner = self
695
+ @formatter.singleton_class.prepend FormatterUtils::InjectMixin
696
+ end
697
+ end
698
+ end
699
+ end
700
+
701
+ def detach_process(&block)
702
+ log.warn "detach_process is not supported in this version. ignored."
703
+ block.call
704
+ end
705
+
706
+ def detach_multi_process(&block)
707
+ log.warn "detach_process is not supported in this version. ignored."
708
+ block.call
709
+ end
710
+
711
+ # Original TimeSlicedOutput#emit doesn't call #format_stream
712
+
713
+ # #format MUST be implemented in plugin
714
+ # #write is also
715
+
716
+ def extract_placeholders(str, metadata)
717
+ raise "BUG: compat plugin does not support extract_placeholders: use newer plugin API"
718
+ end
719
+ end
720
+ end
721
+ end