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,424 @@
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
18
+ module Config
19
+ class ConfigureProxy
20
+ attr_accessor :name, :final, :param_name, :init, :required, :multi, :alias, :configured_in_section
21
+ attr_accessor :argument, :params, :defaults, :descriptions, :sections
22
+ # config_param :desc, :string, default: '....'
23
+ # config_set_default :buffer_type, :memory
24
+ #
25
+ # config_section :default, required: true, multi: false do
26
+ # config_argument :arg, :string
27
+ # config_param :required, :bool, default: false
28
+ # config_param :name, :string
29
+ # config_param :power, :integer
30
+ # end
31
+ #
32
+ # config_section :child, param_name: 'children', required: false, multi: true, alias: 'node' do
33
+ # config_param :name, :string
34
+ # config_param :power, :integer, default: nil
35
+ # config_section :item do
36
+ # config_param :name
37
+ # end
38
+ # end
39
+
40
+ def initialize(name, root: false, param_name: nil, final: nil, init: nil, required: nil, multi: nil, alias: nil, type_lookup:)
41
+ @name = name.to_sym
42
+ @final = final
43
+
44
+ # For ConfigureProxy of root section, "@name" should be a class name of plugins.
45
+ # Otherwise (like subsections), "@name" should be a name of section, like "buffer", "store".
46
+ # For subsections, name will be used as parameter names (unless param_name exists), so overriding proxy's name
47
+ # should override "@name".
48
+ @root_section = root
49
+
50
+ @param_name = param_name && param_name.to_sym
51
+ @init = init
52
+ @required = required
53
+ @multi = multi
54
+ @alias = binding.local_variable_get(:alias)
55
+ @type_lookup = type_lookup
56
+
57
+ raise "init and required are exclusive" if @init && @required
58
+
59
+ # specify section name for viewpoint of owner(parent) plugin
60
+ # for buffer plugins: all params are in <buffer> section of owner
61
+ # others: <storage>, <format> (formatter/parser), ...
62
+ @configured_in_section = nil
63
+
64
+ @argument = nil # nil: ignore argument
65
+ @params = {}
66
+ @defaults = {}
67
+ @descriptions = {}
68
+ @sections = {}
69
+ @current_description = nil
70
+ end
71
+
72
+ def variable_name
73
+ @param_name || @name
74
+ end
75
+
76
+ def root?
77
+ @root_section
78
+ end
79
+
80
+ def init?
81
+ @init.nil? ? false : @init
82
+ end
83
+
84
+ def required?
85
+ @required.nil? ? false : @required
86
+ end
87
+
88
+ def multi?
89
+ @multi.nil? ? true : @multi
90
+ end
91
+
92
+ def final?
93
+ !!@final
94
+ end
95
+
96
+ def merge(other) # self is base class, other is subclass
97
+ return merge_for_finalized(other) if self.final?
98
+
99
+ [:param_name, :required, :multi, :alias, :configured_in_section].each do |prohibited_name|
100
+ if overwrite?(other, prohibited_name)
101
+ raise ConfigError, "BUG: subclass cannot overwrite base class's config_section: #{prohibited_name}"
102
+ end
103
+ end
104
+
105
+ options = {}
106
+ # param_name affects instance variable name, which is just "internal" of each plugins.
107
+ # so it must not be changed. base class's name (or param_name) is always used.
108
+ options[:param_name] = @param_name
109
+
110
+ # subclass cannot overwrite base class's definition
111
+ options[:init] = @init.nil? ? other.init : self.init
112
+ options[:required] = @required.nil? ? other.required : self.required
113
+ options[:multi] = @multi.nil? ? other.multi : self.multi
114
+ options[:alias] = @alias.nil? ? other.alias : self.alias
115
+ options[:final] = @final || other.final
116
+ options[:type_lookup] = @type_lookup
117
+
118
+ merged = if self.root?
119
+ options[:root] = true
120
+ self.class.new(other.name, **options)
121
+ else
122
+ self.class.new(@name, **options)
123
+ end
124
+
125
+ # configured_in MUST be kept
126
+ merged.configured_in_section = self.configured_in_section || other.configured_in_section
127
+
128
+ merged.argument = other.argument || self.argument
129
+ merged.params = self.params.merge(other.params)
130
+ merged.defaults = self.defaults.merge(other.defaults)
131
+ merged.sections = {}
132
+ (self.sections.keys + other.sections.keys).uniq.each do |section_key|
133
+ self_section = self.sections[section_key]
134
+ other_section = other.sections[section_key]
135
+ merged_section = if self_section && other_section
136
+ self_section.merge(other_section)
137
+ elsif self_section || other_section
138
+ self_section || other_section
139
+ else
140
+ raise "BUG: both of self and other section are nil"
141
+ end
142
+ merged.sections[section_key] = merged_section
143
+ end
144
+
145
+ merged
146
+ end
147
+
148
+ def merge_for_finalized(other)
149
+ # list what subclass can do for finalized section
150
+ # * append params/defaults/sections which are missing in superclass
151
+ # * change default values of superclass
152
+ # * overwrite init to make it enable to instantiate section objects with added default values
153
+
154
+ if other.final == false && overwrite?(other, :final)
155
+ raise ConfigError, "BUG: subclass cannot overwrite finalized base class's config_section"
156
+ end
157
+
158
+ [:param_name, :required, :multi, :alias, :configured_in_section].each do |prohibited_name|
159
+ if overwrite?(other, prohibited_name)
160
+ raise ConfigError, "BUG: subclass cannot overwrite base class's config_section: #{prohibited_name}"
161
+ end
162
+ end
163
+
164
+ options = {}
165
+ options[:param_name] = @param_name
166
+ options[:init] = @init || other.init
167
+ options[:required] = @required.nil? ? other.required : self.required
168
+ options[:multi] = @multi.nil? ? other.multi : self.multi
169
+ options[:alias] = @alias.nil? ? other.alias : self.alias
170
+ options[:final] = true
171
+ options[:type_lookup] = @type_lookup
172
+
173
+ merged = if self.root?
174
+ options[:root] = true
175
+ self.class.new(other.name, **options)
176
+ else
177
+ self.class.new(@name, **options)
178
+ end
179
+
180
+ merged.configured_in_section = self.configured_in_section || other.configured_in_section
181
+
182
+ merged.argument = self.argument || other.argument
183
+ merged.params = other.params.merge(self.params)
184
+ merged.defaults = self.defaults.merge(other.defaults)
185
+ merged.sections = {}
186
+ (self.sections.keys + other.sections.keys).uniq.each do |section_key|
187
+ self_section = self.sections[section_key]
188
+ other_section = other.sections[section_key]
189
+ merged_section = if self_section && other_section
190
+ other_section.merge(self_section)
191
+ elsif self_section || other_section
192
+ self_section || other_section
193
+ else
194
+ raise "BUG: both of self and other section are nil"
195
+ end
196
+ merged.sections[section_key] = merged_section
197
+ end
198
+
199
+ merged
200
+ end
201
+
202
+ def overwrite_defaults(other) # other is owner plugin's corresponding proxy
203
+ self.defaults = self.defaults.merge(other.defaults)
204
+ self.sections.keys.each do |section_key|
205
+ if other.sections.has_key?(section_key)
206
+ self.sections[section_key].overwrite_defaults(other.sections[section_key])
207
+ end
208
+ end
209
+ end
210
+
211
+ def option_value_type!(name, opts, key, klass=nil, type: nil)
212
+ if opts.has_key?(key)
213
+ if klass && !opts[key].is_a?(klass)
214
+ raise ArgumentError, "#{name}: #{key} must be a #{klass}, but #{opts[key].class}"
215
+ end
216
+ case type
217
+ when :boolean
218
+ unless opts[key].is_a?(TrueClass) || opts[key].is_a?(FalseClass)
219
+ raise ArgumentError, "#{name}: #{key} must be true or false, but #{opts[key].class}"
220
+ end
221
+ when nil
222
+ # ignore
223
+ else
224
+ raise "unknown type: #{type} for option #{key}"
225
+ end
226
+ end
227
+ end
228
+
229
+ def config_parameter_option_validate!(name, type, **kwargs, &block)
230
+ if type.nil? && !block
231
+ type = :string
232
+ end
233
+ kwargs.each_key do |key|
234
+ case key
235
+ when :default, :alias, :secret, :skip_accessor, :deprecated, :obsoleted, :desc
236
+ # valid for all types
237
+ when :list
238
+ raise ArgumentError, ":list is valid only for :enum type, but #{type}: #{name}" if type != :enum
239
+ when :value_type
240
+ raise ArgumentError, ":value_type is valid only for :hash and :array, but #{type}: #{name}" if type != :hash && type != :array
241
+ when :symbolize_keys
242
+ raise ArgumentError, ":symbolize_keys is valid only for :hash, but #{type}: #{name}" if type != :hash
243
+ else
244
+ raise ArgumentError, "unknown option '#{key}' for configuration parameter: #{name}"
245
+ end
246
+ end
247
+ end
248
+
249
+ def parameter_configuration(name, type = nil, **kwargs, &block)
250
+ config_parameter_option_validate!(name, type, **kwargs, &block)
251
+
252
+ name = name.to_sym
253
+
254
+ if block && type
255
+ raise ArgumentError, "#{name}: both of block and type cannot be specified"
256
+ elsif !block && !type
257
+ type = :string
258
+ end
259
+ opts = {}
260
+ opts[:type] = type
261
+ opts.merge!(kwargs)
262
+
263
+ begin
264
+ block ||= @type_lookup.call(type)
265
+ rescue ConfigError
266
+ # override error message
267
+ raise ArgumentError, "#{name}: unknown config_argument type `#{type}'"
268
+ end
269
+
270
+ # options for config_param
271
+ option_value_type!(name, opts, :desc, String)
272
+ option_value_type!(name, opts, :alias, Symbol)
273
+ option_value_type!(name, opts, :secret, type: :boolean)
274
+ option_value_type!(name, opts, :deprecated, String)
275
+ option_value_type!(name, opts, :obsoleted, String)
276
+ if type == :enum
277
+ if !opts.has_key?(:list) || !opts[:list].is_a?(Array) || opts[:list].empty? || !opts[:list].all?{|v| v.is_a?(Symbol) }
278
+ raise ArgumentError, "#{name}: enum parameter requires :list of Symbols"
279
+ end
280
+ end
281
+ option_value_type!(name, opts, :symbolize_keys, type: :boolean)
282
+ option_value_type!(name, opts, :value_type, Symbol) # hash, array
283
+ option_value_type!(name, opts, :skip_accessor, type: :boolean)
284
+
285
+ if opts.has_key?(:default)
286
+ config_set_default(name, opts[:default])
287
+ end
288
+
289
+ if opts.has_key?(:desc)
290
+ config_set_desc(name, opts[:desc])
291
+ end
292
+
293
+ if opts[:deprecated] && opts[:obsoleted]
294
+ raise ArgumentError, "#{name}: both of deprecated and obsoleted cannot be specified at once"
295
+ end
296
+
297
+ [name, block, opts]
298
+ end
299
+
300
+ def configured_in(section_name)
301
+ if @configured_in_section
302
+ raise ArgumentError, "#{self.name}: configured_in called twice"
303
+ end
304
+ @configured_in_section = section_name.to_sym
305
+ end
306
+
307
+ def config_argument(name, type = nil, **kwargs, &block)
308
+ if @argument
309
+ raise ArgumentError, "#{self.name}: config_argument called twice"
310
+ end
311
+ name, block, opts = parameter_configuration(name, type, **kwargs, &block)
312
+
313
+ @argument = [name, block, opts]
314
+ name
315
+ end
316
+
317
+ def config_param(name, type = nil, **kwargs, &block)
318
+ name, block, opts = parameter_configuration(name, type, **kwargs, &block)
319
+
320
+ if @current_description
321
+ config_set_desc(name, @current_description)
322
+ @current_description = nil
323
+ end
324
+
325
+ @sections.delete(name)
326
+ @params[name] = [block, opts]
327
+ name
328
+ end
329
+
330
+ def config_set_default(name, defval)
331
+ name = name.to_sym
332
+
333
+ if @defaults.has_key?(name)
334
+ raise ArgumentError, "#{self.name}: default value specified twice for #{name}"
335
+ end
336
+
337
+ @defaults[name] = defval
338
+ nil
339
+ end
340
+
341
+ def config_set_desc(name, description)
342
+ name = name.to_sym
343
+
344
+ if @descriptions.has_key?(name)
345
+ raise ArgumentError, "#{self.name}: description specified twice for #{name}"
346
+ end
347
+
348
+ @descriptions[name] = description
349
+ nil
350
+ end
351
+
352
+ def desc(description)
353
+ @current_description = description
354
+ end
355
+
356
+ def config_section(name, **kwargs, &block)
357
+ unless block_given?
358
+ raise ArgumentError, "#{name}: config_section requires block parameter"
359
+ end
360
+ name = name.to_sym
361
+
362
+ sub_proxy = ConfigureProxy.new(name, type_lookup: @type_lookup, **kwargs)
363
+ sub_proxy.instance_exec(&block)
364
+
365
+ @params.delete(name)
366
+ @sections[name] = sub_proxy
367
+
368
+ name
369
+ end
370
+
371
+ def dump_config_definition
372
+ dumped_config = {}
373
+ if @argument
374
+ argument_name, _block, options = @argument
375
+ options[:required] = !@defaults.key?(argument_name)
376
+ options[:argument] = true
377
+ dumped_config[argument_name] = options
378
+ end
379
+ @params.each do |name, config|
380
+ dumped_config[name] = config[1]
381
+ dumped_config[name][:required] = !@defaults.key?(name)
382
+ dumped_config[name][:default] = @defaults[name] if @defaults.key?(name)
383
+ dumped_config[name][:desc] = @descriptions[name] if @descriptions.key?(name)
384
+ end
385
+ # Overwrite by config_set_default
386
+ @defaults.each do |name, value|
387
+ if @params.key?(name) || (@argument && @argument.first == name)
388
+ dumped_config[name][:default] = value
389
+ else
390
+ dumped_config[name] = { default: value }
391
+ end
392
+ end
393
+ # Overwrite by config_set_desc
394
+ @descriptions.each do |name, value|
395
+ if @params.key?(name)
396
+ dumped_config[name][:desc] = value
397
+ else
398
+ dumped_config[name] = { desc: value }
399
+ end
400
+ end
401
+ @sections.each do |section_name, sub_proxy|
402
+ if dumped_config.key?(section_name)
403
+ dumped_config[section_name].update(sub_proxy.dump_config_definition)
404
+ else
405
+ dumped_config[section_name] = sub_proxy.dump_config_definition
406
+ dumped_config[section_name][:required] = sub_proxy.required?
407
+ dumped_config[section_name][:multi] = sub_proxy.multi?
408
+ dumped_config[section_name][:alias] = sub_proxy.alias
409
+ dumped_config[section_name][:section] = true
410
+ end
411
+ end
412
+ dumped_config
413
+ end
414
+
415
+ private
416
+
417
+ def overwrite?(other, attribute_name)
418
+ value = instance_variable_get("@#{attribute_name}")
419
+ other_value = other.__send__(attribute_name)
420
+ !value.nil? && !other_value.nil? && value != other_value
421
+ end
422
+ end
423
+ end
424
+ end
@@ -0,0 +1,152 @@
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 'json'
18
+
19
+ require 'fluent/config'
20
+ require 'fluent/config/element'
21
+
22
+ module Fluent
23
+ module Config
24
+ module DSL
25
+ RESERVED_PARAMETERS = [:type, :id, :log_level, :label] # Need '@' prefix for reserved parameters
26
+
27
+ module Parser
28
+ def self.read(path)
29
+ path = File.expand_path(path)
30
+ data = File.read(path)
31
+ parse(data, path)
32
+ end
33
+
34
+ def self.parse(source, source_path="config.rb")
35
+ Proxy.new('ROOT', nil).eval(source, source_path).to_config_element
36
+ end
37
+ end
38
+
39
+ class Proxy
40
+ def initialize(name, arg, include_basepath = Dir.pwd)
41
+ @element = Element.new(name, arg, self)
42
+ @include_basepath = include_basepath
43
+ end
44
+
45
+ def element
46
+ @element
47
+ end
48
+
49
+ def include_basepath
50
+ @include_basepath
51
+ end
52
+
53
+ def eval(source, source_path)
54
+ @element.instance_eval(source, source_path)
55
+ self
56
+ end
57
+
58
+ def to_config_element
59
+ @element.instance_eval do
60
+ Config::Element.new(@name, @arg, @attrs, @elements)
61
+ end
62
+ end
63
+
64
+ def add_element(name, arg, block)
65
+ ::Kernel.raise ::ArgumentError, "#{name} block must be specified" if block.nil?
66
+
67
+ proxy = self.class.new(name.to_s, arg)
68
+ proxy.element.instance_exec(&block)
69
+
70
+ @element.instance_eval do
71
+ @elements.push(proxy.to_config_element)
72
+ end
73
+
74
+ self
75
+ end
76
+ end
77
+
78
+ class Element < BasicObject
79
+ def initialize(name, arg, proxy)
80
+ @name = name
81
+ @arg = arg || ''
82
+ @attrs = {}
83
+ @elements = []
84
+ @proxy = proxy
85
+ end
86
+
87
+ def to_int
88
+ __id__
89
+ end
90
+
91
+ def method_missing(name, *args, &block)
92
+ ::Kernel.raise ::ArgumentError, "Configuration DSL Syntax Error: only one argument allowed" if args.size > 1
93
+ value = args.first
94
+
95
+ if block
96
+ proxy = Proxy.new(name.to_s, value)
97
+ proxy.element.instance_exec(&block)
98
+ @elements.push(proxy.to_config_element)
99
+ else
100
+ param_name = RESERVED_PARAMETERS.include?(name) ? "@#{name}" : name.to_s
101
+ @attrs[param_name] = if value.is_a?(Array) || value.is_a?(Hash)
102
+ JSON.dump(value)
103
+ else
104
+ value.to_s
105
+ end
106
+ end
107
+
108
+ self
109
+ end
110
+
111
+ def include(*args)
112
+ ::Kernel.raise ::ArgumentError, "#{name} block requires arguments for include path" if args.nil? || args.size != 1
113
+ if args.first =~ /\.rb$/
114
+ path = File.expand_path(args.first)
115
+ data = File.read(path)
116
+ self.instance_eval(data, path)
117
+ else
118
+ ss = StringScanner.new('')
119
+ Config::V1Parser.new(ss, @proxy.include_basepath, '', nil).eval_include(@attrs, @elements, args.first)
120
+ end
121
+ end
122
+
123
+ def source(&block)
124
+ @proxy.add_element('source', nil, block)
125
+ end
126
+
127
+ def match(*args, &block)
128
+ ::Kernel.raise ::ArgumentError, "#{name} block requires arguments for match pattern" if args.nil? || args.size != 1
129
+ @proxy.add_element('match', args.first, block)
130
+ end
131
+
132
+ def self.const_missing(name)
133
+ return ::Kernel.const_get(name) if ::Kernel.const_defined?(name)
134
+
135
+ if name.to_s =~ /^Fluent::Config::DSL::Element::(.*)$/
136
+ name = "#{$1}".to_sym
137
+ return ::Kernel.const_get(name) if ::Kernel.const_defined?(name)
138
+ end
139
+ ::Kernel.eval("#{name}")
140
+ end
141
+
142
+ def ruby(&block)
143
+ if block
144
+ @proxy.instance_exec(&block)
145
+ else
146
+ ::Kernel
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end