fluentd 1.20.0-aarch64-mingw-ucrt

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +116 -0
  3. data/ADOPTERS.md +5 -0
  4. data/AGENTS.md +46 -0
  5. data/AUTHORS +2 -0
  6. data/CHANGELOG.md +3324 -0
  7. data/CONTRIBUTING.md +45 -0
  8. data/GOVERNANCE.md +55 -0
  9. data/GithubWorkflow.md +78 -0
  10. data/LICENSE +202 -0
  11. data/MAINTAINERS.md +19 -0
  12. data/README.md +73 -0
  13. data/Rakefile +89 -0
  14. data/SECURITY.md +47 -0
  15. data/bin/fluent-binlog-reader +7 -0
  16. data/bin/fluent-ca-generate +6 -0
  17. data/bin/fluent-cap-ctl +7 -0
  18. data/bin/fluent-cat +5 -0
  19. data/bin/fluent-ctl +7 -0
  20. data/bin/fluent-debug +5 -0
  21. data/bin/fluent-gem +9 -0
  22. data/bin/fluent-plugin-config-format +5 -0
  23. data/bin/fluent-plugin-generate +5 -0
  24. data/bin/fluentd +15 -0
  25. data/code-of-conduct.md +3 -0
  26. data/docs/SECURITY_AUDIT.pdf +0 -0
  27. data/example/copy_roundrobin.conf +39 -0
  28. data/example/counter.conf +18 -0
  29. data/example/filter_stdout.conf +22 -0
  30. data/example/in_forward.conf +14 -0
  31. data/example/in_forward_client.conf +37 -0
  32. data/example/in_forward_shared_key.conf +15 -0
  33. data/example/in_forward_tls.conf +14 -0
  34. data/example/in_forward_users.conf +24 -0
  35. data/example/in_forward_workers.conf +21 -0
  36. data/example/in_http.conf +16 -0
  37. data/example/in_out_forward.conf +17 -0
  38. data/example/in_sample_blocks.conf +17 -0
  39. data/example/in_sample_with_compression.conf +23 -0
  40. data/example/in_syslog.conf +15 -0
  41. data/example/in_tail.conf +14 -0
  42. data/example/in_tcp.conf +13 -0
  43. data/example/in_udp.conf +13 -0
  44. data/example/logevents.conf +25 -0
  45. data/example/multi_filters.conf +61 -0
  46. data/example/out_copy.conf +20 -0
  47. data/example/out_exec_filter.conf +42 -0
  48. data/example/out_file.conf +13 -0
  49. data/example/out_forward.conf +35 -0
  50. data/example/out_forward_buf_file.conf +23 -0
  51. data/example/out_forward_client.conf +109 -0
  52. data/example/out_forward_heartbeat_none.conf +16 -0
  53. data/example/out_forward_sd.conf +17 -0
  54. data/example/out_forward_shared_key.conf +36 -0
  55. data/example/out_forward_tls.conf +18 -0
  56. data/example/out_forward_users.conf +65 -0
  57. data/example/out_null.conf +36 -0
  58. data/example/sd.yaml +8 -0
  59. data/example/secondary_file.conf +42 -0
  60. data/example/suppress_config_dump.conf +7 -0
  61. data/example/v0_12_filter.conf +78 -0
  62. data/example/v1_literal_example.conf +36 -0
  63. data/example/worker_section.conf +36 -0
  64. data/fluent.conf +139 -0
  65. data/lib/fluent/agent.rb +168 -0
  66. data/lib/fluent/capability.rb +87 -0
  67. data/lib/fluent/clock.rb +66 -0
  68. data/lib/fluent/command/binlog_reader.rb +244 -0
  69. data/lib/fluent/command/bundler_injection.rb +45 -0
  70. data/lib/fluent/command/ca_generate.rb +184 -0
  71. data/lib/fluent/command/cap_ctl.rb +174 -0
  72. data/lib/fluent/command/cat.rb +365 -0
  73. data/lib/fluent/command/ctl.rb +180 -0
  74. data/lib/fluent/command/debug.rb +103 -0
  75. data/lib/fluent/command/fluentd.rb +385 -0
  76. data/lib/fluent/command/plugin_config_formatter.rb +308 -0
  77. data/lib/fluent/command/plugin_generator.rb +365 -0
  78. data/lib/fluent/compat/call_super_mixin.rb +76 -0
  79. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  80. data/lib/fluent/compat/exec_util.rb +144 -0
  81. data/lib/fluent/compat/file_util.rb +54 -0
  82. data/lib/fluent/compat/filter.rb +68 -0
  83. data/lib/fluent/compat/formatter.rb +117 -0
  84. data/lib/fluent/compat/formatter_utils.rb +85 -0
  85. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  86. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  87. data/lib/fluent/compat/input.rb +49 -0
  88. data/lib/fluent/compat/output.rb +721 -0
  89. data/lib/fluent/compat/output_chain.rb +60 -0
  90. data/lib/fluent/compat/parser.rb +310 -0
  91. data/lib/fluent/compat/parser_utils.rb +40 -0
  92. data/lib/fluent/compat/propagate_default.rb +62 -0
  93. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  94. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  95. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  96. data/lib/fluent/compat/socket_util.rb +165 -0
  97. data/lib/fluent/compat/string_util.rb +34 -0
  98. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  99. data/lib/fluent/compat/type_converter.rb +90 -0
  100. data/lib/fluent/config/basic_parser.rb +122 -0
  101. data/lib/fluent/config/configure_proxy.rb +424 -0
  102. data/lib/fluent/config/dsl.rb +152 -0
  103. data/lib/fluent/config/element.rb +265 -0
  104. data/lib/fluent/config/error.rb +44 -0
  105. data/lib/fluent/config/literal_parser.rb +305 -0
  106. data/lib/fluent/config/parser.rb +119 -0
  107. data/lib/fluent/config/section.rb +272 -0
  108. data/lib/fluent/config/types.rb +257 -0
  109. data/lib/fluent/config/v1_parser.rb +200 -0
  110. data/lib/fluent/config/yaml_parser/fluent_value.rb +47 -0
  111. data/lib/fluent/config/yaml_parser/loader.rb +124 -0
  112. data/lib/fluent/config/yaml_parser/parser.rb +179 -0
  113. data/lib/fluent/config/yaml_parser/section_builder.rb +107 -0
  114. data/lib/fluent/config/yaml_parser.rb +56 -0
  115. data/lib/fluent/config.rb +89 -0
  116. data/lib/fluent/configurable.rb +202 -0
  117. data/lib/fluent/counter/base_socket.rb +44 -0
  118. data/lib/fluent/counter/client.rb +297 -0
  119. data/lib/fluent/counter/error.rb +86 -0
  120. data/lib/fluent/counter/mutex_hash.rb +163 -0
  121. data/lib/fluent/counter/server.rb +273 -0
  122. data/lib/fluent/counter/store.rb +205 -0
  123. data/lib/fluent/counter/validator.rb +145 -0
  124. data/lib/fluent/counter.rb +23 -0
  125. data/lib/fluent/daemon.rb +14 -0
  126. data/lib/fluent/daemonizer.rb +88 -0
  127. data/lib/fluent/engine.rb +269 -0
  128. data/lib/fluent/env.rb +45 -0
  129. data/lib/fluent/error.rb +37 -0
  130. data/lib/fluent/event.rb +369 -0
  131. data/lib/fluent/event_router.rb +315 -0
  132. data/lib/fluent/ext_monitor_require.rb +28 -0
  133. data/lib/fluent/file_wrapper.rb +137 -0
  134. data/lib/fluent/filter.rb +21 -0
  135. data/lib/fluent/fluent_log_event_router.rb +139 -0
  136. data/lib/fluent/formatter.rb +23 -0
  137. data/lib/fluent/input.rb +21 -0
  138. data/lib/fluent/label.rb +46 -0
  139. data/lib/fluent/load.rb +33 -0
  140. data/lib/fluent/log/console_adapter.rb +66 -0
  141. data/lib/fluent/log.rb +775 -0
  142. data/lib/fluent/match.rb +187 -0
  143. data/lib/fluent/mixin.rb +31 -0
  144. data/lib/fluent/msgpack_factory.rb +111 -0
  145. data/lib/fluent/oj_options.rb +61 -0
  146. data/lib/fluent/output.rb +29 -0
  147. data/lib/fluent/output_chain.rb +23 -0
  148. data/lib/fluent/parser.rb +23 -0
  149. data/lib/fluent/plugin/bare_output.rb +88 -0
  150. data/lib/fluent/plugin/base.rb +219 -0
  151. data/lib/fluent/plugin/buf_file.rb +256 -0
  152. data/lib/fluent/plugin/buf_file_single.rb +272 -0
  153. data/lib/fluent/plugin/buf_memory.rb +34 -0
  154. data/lib/fluent/plugin/buffer/chunk.rb +313 -0
  155. data/lib/fluent/plugin/buffer/file_chunk.rb +432 -0
  156. data/lib/fluent/plugin/buffer/file_single_chunk.rb +325 -0
  157. data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
  158. data/lib/fluent/plugin/buffer.rb +1063 -0
  159. data/lib/fluent/plugin/compressable.rb +87 -0
  160. data/lib/fluent/plugin/exec_util.rb +22 -0
  161. data/lib/fluent/plugin/extractor.rb +132 -0
  162. data/lib/fluent/plugin/file_util.rb +22 -0
  163. data/lib/fluent/plugin/filter.rb +119 -0
  164. data/lib/fluent/plugin/filter_grep.rb +189 -0
  165. data/lib/fluent/plugin/filter_parser.rb +124 -0
  166. data/lib/fluent/plugin/filter_record_transformer.rb +325 -0
  167. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  168. data/lib/fluent/plugin/formatter.rb +75 -0
  169. data/lib/fluent/plugin/formatter_csv.rb +92 -0
  170. data/lib/fluent/plugin/formatter_hash.rb +35 -0
  171. data/lib/fluent/plugin/formatter_json.rb +62 -0
  172. data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
  173. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  174. data/lib/fluent/plugin/formatter_out_file.rb +55 -0
  175. data/lib/fluent/plugin/formatter_single_value.rb +36 -0
  176. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  177. data/lib/fluent/plugin/formatter_tsv.rb +40 -0
  178. data/lib/fluent/plugin/in_debug_agent.rb +71 -0
  179. data/lib/fluent/plugin/in_dummy.rb +18 -0
  180. data/lib/fluent/plugin/in_exec.rb +124 -0
  181. data/lib/fluent/plugin/in_forward.rb +489 -0
  182. data/lib/fluent/plugin/in_gc_stat.rb +72 -0
  183. data/lib/fluent/plugin/in_http.rb +737 -0
  184. data/lib/fluent/plugin/in_monitor_agent.rb +406 -0
  185. data/lib/fluent/plugin/in_object_space.rb +93 -0
  186. data/lib/fluent/plugin/in_sample.rb +148 -0
  187. data/lib/fluent/plugin/in_syslog.rb +346 -0
  188. data/lib/fluent/plugin/in_tail/compatibility.rb +111 -0
  189. data/lib/fluent/plugin/in_tail/dir_watcher.rb +713 -0
  190. data/lib/fluent/plugin/in_tail/group_watch.rb +204 -0
  191. data/lib/fluent/plugin/in_tail/io_handler.rb +391 -0
  192. data/lib/fluent/plugin/in_tail/line_feeder.rb +230 -0
  193. data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
  194. data/lib/fluent/plugin/in_tail/stat_watcher.rb +52 -0
  195. data/lib/fluent/plugin/in_tail/tail_watcher.rb +276 -0
  196. data/lib/fluent/plugin/in_tail/worker_pool.rb +298 -0
  197. data/lib/fluent/plugin/in_tail.rb +917 -0
  198. data/lib/fluent/plugin/in_tcp.rb +230 -0
  199. data/lib/fluent/plugin/in_udp.rb +101 -0
  200. data/lib/fluent/plugin/in_unix.rb +197 -0
  201. data/lib/fluent/plugin/input.rb +71 -0
  202. data/lib/fluent/plugin/metrics.rb +119 -0
  203. data/lib/fluent/plugin/metrics_local.rb +96 -0
  204. data/lib/fluent/plugin/multi_output.rb +179 -0
  205. data/lib/fluent/plugin/out_buffer.rb +40 -0
  206. data/lib/fluent/plugin/out_copy.rb +120 -0
  207. data/lib/fluent/plugin/out_exec.rb +105 -0
  208. data/lib/fluent/plugin/out_exec_filter.rb +319 -0
  209. data/lib/fluent/plugin/out_file.rb +371 -0
  210. data/lib/fluent/plugin/out_forward/ack_handler.rb +176 -0
  211. data/lib/fluent/plugin/out_forward/connection_manager.rb +131 -0
  212. data/lib/fluent/plugin/out_forward/error.rb +28 -0
  213. data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
  214. data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
  215. data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
  216. data/lib/fluent/plugin/out_forward/socket_cache.rb +177 -0
  217. data/lib/fluent/plugin/out_forward.rb +865 -0
  218. data/lib/fluent/plugin/out_http.rb +419 -0
  219. data/lib/fluent/plugin/out_null.rb +74 -0
  220. data/lib/fluent/plugin/out_relabel.rb +32 -0
  221. data/lib/fluent/plugin/out_roundrobin.rb +84 -0
  222. data/lib/fluent/plugin/out_secondary_file.rb +148 -0
  223. data/lib/fluent/plugin/out_stdout.rb +81 -0
  224. data/lib/fluent/plugin/out_stream.rb +130 -0
  225. data/lib/fluent/plugin/output.rb +1688 -0
  226. data/lib/fluent/plugin/owned_by_mixin.rb +41 -0
  227. data/lib/fluent/plugin/parser.rb +274 -0
  228. data/lib/fluent/plugin/parser_apache.rb +28 -0
  229. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  230. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  231. data/lib/fluent/plugin/parser_csv.rb +124 -0
  232. data/lib/fluent/plugin/parser_json.rb +118 -0
  233. data/lib/fluent/plugin/parser_ltsv.rb +49 -0
  234. data/lib/fluent/plugin/parser_msgpack.rb +72 -0
  235. data/lib/fluent/plugin/parser_multiline.rb +152 -0
  236. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  237. data/lib/fluent/plugin/parser_none.rb +36 -0
  238. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  239. data/lib/fluent/plugin/parser_syslog.rb +543 -0
  240. data/lib/fluent/plugin/parser_tsv.rb +47 -0
  241. data/lib/fluent/plugin/sd_file.rb +157 -0
  242. data/lib/fluent/plugin/sd_srv.rb +135 -0
  243. data/lib/fluent/plugin/sd_static.rb +58 -0
  244. data/lib/fluent/plugin/service_discovery.rb +65 -0
  245. data/lib/fluent/plugin/socket_util.rb +22 -0
  246. data/lib/fluent/plugin/storage.rb +84 -0
  247. data/lib/fluent/plugin/storage_local.rb +166 -0
  248. data/lib/fluent/plugin/string_util.rb +22 -0
  249. data/lib/fluent/plugin.rb +206 -0
  250. data/lib/fluent/plugin_helper/cert_option.rb +199 -0
  251. data/lib/fluent/plugin_helper/child_process.rb +369 -0
  252. data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
  253. data/lib/fluent/plugin_helper/counter.rb +51 -0
  254. data/lib/fluent/plugin_helper/event_emitter.rb +112 -0
  255. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  256. data/lib/fluent/plugin_helper/extract.rb +104 -0
  257. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  258. data/lib/fluent/plugin_helper/http_server/app.rb +81 -0
  259. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  260. data/lib/fluent/plugin_helper/http_server/request.rb +53 -0
  261. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  262. data/lib/fluent/plugin_helper/http_server/server.rb +116 -0
  263. data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
  264. data/lib/fluent/plugin_helper/http_server.rb +129 -0
  265. data/lib/fluent/plugin_helper/inject.rb +154 -0
  266. data/lib/fluent/plugin_helper/metrics.rb +136 -0
  267. data/lib/fluent/plugin_helper/parser.rb +147 -0
  268. data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
  269. data/lib/fluent/plugin_helper/retry_state.rb +219 -0
  270. data/lib/fluent/plugin_helper/server.rb +840 -0
  271. data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
  272. data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
  273. data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
  274. data/lib/fluent/plugin_helper/socket.rb +288 -0
  275. data/lib/fluent/plugin_helper/socket_option.rb +98 -0
  276. data/lib/fluent/plugin_helper/storage.rb +349 -0
  277. data/lib/fluent/plugin_helper/thread.rb +180 -0
  278. data/lib/fluent/plugin_helper/timer.rb +92 -0
  279. data/lib/fluent/plugin_helper.rb +75 -0
  280. data/lib/fluent/plugin_id.rb +93 -0
  281. data/lib/fluent/process.rb +22 -0
  282. data/lib/fluent/registry.rb +117 -0
  283. data/lib/fluent/root_agent.rb +468 -0
  284. data/lib/fluent/rpc.rb +95 -0
  285. data/lib/fluent/source_only_buffer_agent.rb +102 -0
  286. data/lib/fluent/static_config_analysis.rb +195 -0
  287. data/lib/fluent/supervisor.rb +1347 -0
  288. data/lib/fluent/system_config.rb +213 -0
  289. data/lib/fluent/test/base.rb +83 -0
  290. data/lib/fluent/test/driver/base.rb +231 -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 +61 -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 +138 -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 +44 -0
  310. data/lib/fluent/test.rb +61 -0
  311. data/lib/fluent/time.rb +513 -0
  312. data/lib/fluent/timezone.rb +171 -0
  313. data/lib/fluent/tls.rb +105 -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/win32api.rb +38 -0
  318. data/lib/fluent/winsvc.rb +130 -0
  319. data/templates/new_gem/.gitignore +8 -0
  320. data/templates/new_gem/Gemfile +3 -0
  321. data/templates/new_gem/README.md.erb +43 -0
  322. data/templates/new_gem/Rakefile +13 -0
  323. data/templates/new_gem/fluent-plugin.gemspec.erb +28 -0
  324. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  325. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  326. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  327. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  328. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  329. data/templates/new_gem/lib/fluent/plugin/storage.rb.erb +40 -0
  330. data/templates/new_gem/test/helper.rb.erb +7 -0
  331. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  332. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  333. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  334. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  335. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  336. data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
  337. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  338. data/templates/plugin_config_formatter/param.md-table.erb +10 -0
  339. data/templates/plugin_config_formatter/param.md.erb +34 -0
  340. data/templates/plugin_config_formatter/section.md.erb +12 -0
  341. metadata +996 -0
@@ -0,0 +1,265 @@
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/config/error'
18
+ require 'fluent/config/literal_parser'
19
+
20
+ module Fluent
21
+ module Config
22
+ class Element < Hash
23
+ def initialize(name, arg, attrs, elements, unused = nil)
24
+ @name = name
25
+ @arg = arg
26
+ @elements = elements
27
+ super()
28
+ attrs.each { |k, v|
29
+ self[k] = v
30
+ }
31
+ @unused = unused || attrs.keys
32
+ @v1_config = false
33
+ @corresponding_proxies = [] # some plugins use flat parameters, e.g. in_http doesn't provide <format> section for parser.
34
+ @unused_in = nil # if this element is not used in plugins, corresponding plugin name and parent element name is set, e.g. [source, plugin class].
35
+
36
+ # it's global logger, not plugin logger: deprecated message should be global warning, not plugin level.
37
+ @logger = defined?($log) ? $log : nil
38
+
39
+ @target_worker_ids = []
40
+ end
41
+
42
+ attr_accessor :name, :arg, :unused, :v1_config, :corresponding_proxies, :unused_in
43
+ attr_writer :elements
44
+ attr_reader :target_worker_ids
45
+
46
+ RESERVED_PARAMETERS_COMPAT = {
47
+ '@type' => 'type',
48
+ '@id' => 'id',
49
+ '@log_level' => 'log_level',
50
+ '@label' => nil,
51
+ }
52
+ RESERVED_PARAMETERS = RESERVED_PARAMETERS_COMPAT.keys
53
+
54
+ def elements(*names, name: nil, arg: nil)
55
+ raise ArgumentError, "name and names are exclusive" if name && !names.empty?
56
+ raise ArgumentError, "arg is available only with name" if arg && !name
57
+
58
+ if name
59
+ @elements.select{|e| e.name == name && (!arg || e.arg == arg) }
60
+ elsif !names.empty?
61
+ @elements.select{|e| names.include?(e.name) }
62
+ else
63
+ @elements
64
+ end
65
+ end
66
+
67
+ def add_element(name, arg = '')
68
+ e = Element.new(name, arg, {}, [])
69
+ e.v1_config = @v1_config
70
+ @elements << e
71
+ e
72
+ end
73
+
74
+ def inspect
75
+ attrs = super
76
+ "<name:#{@name}, arg:#{@arg}, attrs:#{attrs}, elements:#{@elements.inspect}>"
77
+ end
78
+
79
+ # Used by PP and Pry
80
+ def pretty_print(q)
81
+ q.text(inspect)
82
+ end
83
+
84
+ # This method assumes _o_ is an Element object. Should return false for nil or other object
85
+ def ==(o)
86
+ self.name == o.name && self.arg == o.arg &&
87
+ self.keys.size == o.keys.size &&
88
+ self.keys.reduce(true){|r, k| r && self[k] == o[k] } &&
89
+ self.elements.size == o.elements.size &&
90
+ [self.elements, o.elements].transpose.reduce(true){|r, e| r && e[0] == e[1] }
91
+ end
92
+
93
+ def +(o)
94
+ e = Element.new(@name.dup, @arg.dup, o.merge(self), @elements + o.elements, (@unused + o.unused).uniq)
95
+ e.v1_config = @v1_config
96
+ e
97
+ end
98
+
99
+ # no code in fluentd uses this method
100
+ def each_element(*names, &block)
101
+ if names.empty?
102
+ @elements.each(&block)
103
+ else
104
+ @elements.each { |e|
105
+ if names.include?(e.name)
106
+ block.yield(e)
107
+ end
108
+ }
109
+ end
110
+ end
111
+
112
+ def has_key?(key)
113
+ @unused_in = [] # some sections, e.g. <store> in copy, is not defined by config_section so clear unused flag for better warning message in check_not_fetched.
114
+ @unused.delete(key)
115
+ super
116
+ end
117
+
118
+ def [](key)
119
+ @unused_in = [] # ditto
120
+ @unused.delete(key)
121
+
122
+ if RESERVED_PARAMETERS.include?(key) && !has_key?(key) && has_key?(RESERVED_PARAMETERS_COMPAT[key])
123
+ @logger.warn "'#{RESERVED_PARAMETERS_COMPAT[key]}' is deprecated parameter name. use '#{key}' instead." if @logger
124
+ return self[RESERVED_PARAMETERS_COMPAT[key]]
125
+ end
126
+
127
+ super
128
+ end
129
+
130
+ def check_not_fetched(&block)
131
+ each_key { |key|
132
+ if @unused.include?(key)
133
+ block.call(key, self)
134
+ end
135
+ }
136
+ @elements.each { |e|
137
+ e.check_not_fetched(&block)
138
+ }
139
+ end
140
+
141
+ def to_s(nest = 0)
142
+ indent = " " * nest
143
+ nindent = " " * (nest + 1)
144
+ out = ""
145
+ if @arg.nil? || @arg.empty?
146
+ out << "#{indent}<#{@name}>\n"
147
+ else
148
+ out << "#{indent}<#{@name} #{@arg}>\n"
149
+ end
150
+ each_pair { |k, v|
151
+ out << dump_value(k, v, nindent)
152
+ }
153
+ @elements.each { |e|
154
+ out << e.to_s(nest + 1)
155
+ }
156
+ out << "#{indent}</#{@name}>\n"
157
+ out
158
+ end
159
+
160
+ def to_masked_element
161
+ new_elems = @elements.map { |e| e.to_masked_element }
162
+ new_elem = Element.new(@name, @arg, {}, new_elems, @unused)
163
+ new_elem.v1_config = @v1_config
164
+ new_elem.corresponding_proxies = @corresponding_proxies
165
+ each_pair { |k, v|
166
+ new_elem[k] = secret_param?(k) ? 'xxxxxx' : v
167
+ }
168
+ new_elem
169
+ end
170
+
171
+ def secret_param?(key)
172
+ return false if @corresponding_proxies.empty?
173
+
174
+ param_key = key.to_sym
175
+ @corresponding_proxies.each { |proxy|
176
+ _block, opts = proxy.params[param_key]
177
+ if opts && opts.has_key?(:secret)
178
+ return opts[:secret]
179
+ end
180
+ }
181
+
182
+ false
183
+ end
184
+
185
+ def param_type(key)
186
+ return nil if @corresponding_proxies.empty?
187
+
188
+ param_key = key.to_sym
189
+ proxy = @corresponding_proxies.detect do |_proxy|
190
+ _proxy.params.has_key?(param_key)
191
+ end
192
+ return nil unless proxy
193
+ _block, opts = proxy.params[param_key]
194
+ opts[:type]
195
+ end
196
+
197
+ def default_value(key)
198
+ return nil if @corresponding_proxies.empty?
199
+
200
+ param_key = key.to_sym
201
+ proxy = @corresponding_proxies.detect do |_proxy|
202
+ _proxy.params.has_key?(param_key)
203
+ end
204
+ return nil unless proxy
205
+ proxy.defaults[param_key]
206
+ end
207
+
208
+ def dump_value(k, v, nindent)
209
+ return "#{nindent}#{k} xxxxxx\n" if secret_param?(k)
210
+ return "#{nindent}#{k} #{v}\n" unless @v1_config
211
+
212
+ # for v1 config
213
+ if v.nil?
214
+ "#{nindent}#{k} \n"
215
+ elsif v == :default
216
+ "#{nindent}#{k} #{default_value(k)}\n"
217
+ else
218
+ case param_type(k)
219
+ when :string
220
+ "#{nindent}#{k} \"#{self.class.unescape_parameter(v)}\"\n"
221
+ when :enum, :integer, :float, :size, :bool, :time
222
+ "#{nindent}#{k} #{v}\n"
223
+ when :hash, :array
224
+ "#{nindent}#{k} #{v}\n"
225
+ else
226
+ # Unknown type
227
+ "#{nindent}#{k} #{v}\n"
228
+ end
229
+ end
230
+ end
231
+
232
+ def self.unescape_parameter(v)
233
+ result = ''
234
+ v.each_char { |c| result << LiteralParser.unescape_char(c) }
235
+ result
236
+ end
237
+
238
+ def set_target_worker_id(worker_id)
239
+ @target_worker_ids = [worker_id]
240
+ @elements.each { |e|
241
+ e.set_target_worker_id(worker_id)
242
+ }
243
+ end
244
+
245
+ def set_target_worker_ids(worker_ids)
246
+ @target_worker_ids = worker_ids.uniq
247
+ @elements.each { |e|
248
+ e.set_target_worker_ids(worker_ids.uniq)
249
+ }
250
+ end
251
+
252
+ def for_every_workers?
253
+ @target_worker_ids.empty?
254
+ end
255
+
256
+ def for_this_worker?
257
+ @target_worker_ids.include?(Fluent::Engine.worker_id)
258
+ end
259
+
260
+ def for_another_worker?
261
+ !@target_worker_ids.empty? && !@target_worker_ids.include?(Fluent::Engine.worker_id)
262
+ end
263
+ end
264
+ end
265
+ end
@@ -0,0 +1,44 @@
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
+ class ConfigError < StandardError
19
+ end
20
+
21
+ class ConfigParseError < ConfigError
22
+ end
23
+
24
+ class ObsoletedParameterError < ConfigError
25
+ end
26
+
27
+ class SetNil < Exception
28
+ end
29
+
30
+ class SetDefault < Exception
31
+ end
32
+
33
+ class NotFoundPluginError < ConfigError
34
+ attr_reader :type, :kind
35
+
36
+ def initialize(msg, type: nil, kind: nil)
37
+ @msg = msg
38
+ @type = type
39
+ @kind = kind
40
+
41
+ super(msg)
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,305 @@
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 'stringio'
18
+
19
+ require 'json'
20
+ require 'socket'
21
+ require 'ripper'
22
+
23
+ require 'fluent/env'
24
+ require 'fluent/config/basic_parser'
25
+
26
+ module Fluent
27
+ module Config
28
+ class LiteralParser < BasicParser
29
+ # A physical line break (LF, CR, or CRLF) inside a quoted string.
30
+ # CRLF is normalized to LF so that the same config text does not produce a
31
+ # different value depending on whether the file was saved with LF or CRLF.
32
+ # A lone CR is kept as-is, and an escaped "\r\n" still produces CRLF.
33
+ LINE_BREAK = /\r\n|[\r\n]/
34
+ # A backslash immediately followed by a physical line break.
35
+ # It works as a line continuation, so both are stripped from the value.
36
+ LINE_CONTINUATION = /\\#{LINE_BREAK}/o
37
+
38
+ def self.unescape_char(c)
39
+ case c
40
+ when '"'
41
+ '\"'
42
+ when "'"
43
+ "\\'"
44
+ when '\\'
45
+ '\\\\'
46
+ when "\r"
47
+ '\r'
48
+ when "\n"
49
+ '\n'
50
+ when "\t"
51
+ '\t'
52
+ when "\f"
53
+ '\f'
54
+ when "\b"
55
+ '\b'
56
+ else
57
+ c
58
+ end
59
+ end
60
+
61
+ def initialize(strscan, eval_context)
62
+ super(strscan)
63
+ @eval_context = eval_context
64
+ unless @eval_context.respond_to?(:use_nil)
65
+ def @eval_context.use_nil
66
+ raise SetNil
67
+ end
68
+ end
69
+ unless @eval_context.respond_to?(:use_default)
70
+ def @eval_context.use_default
71
+ raise SetDefault
72
+ end
73
+ end
74
+ end
75
+
76
+ def parse_literal(string_boundary_charset = LINE_END)
77
+ spacing_without_comment
78
+
79
+ value = if skip(/\[/)
80
+ scan_json(true)
81
+ elsif skip(/\{/)
82
+ scan_json(false)
83
+ else
84
+ scan_string(string_boundary_charset)
85
+ end
86
+ value
87
+ end
88
+
89
+ def scan_string(string_boundary_charset = LINE_END)
90
+ if skip(/\"/)
91
+ return scan_double_quoted_string
92
+ elsif skip(/\'/)
93
+ return scan_single_quoted_string
94
+ else
95
+ return scan_nonquoted_string(string_boundary_charset)
96
+ end
97
+ end
98
+
99
+ def scan_double_quoted_string
100
+ string = []
101
+ while true
102
+ if skip(/\"/)
103
+ if string.include?(nil)
104
+ return nil
105
+ elsif string.include?(:default)
106
+ return :default
107
+ else
108
+ return string.join
109
+ end
110
+ elsif skip(LINE_CONTINUATION)
111
+ next
112
+ elsif s = scan(LINE_BREAK)
113
+ string << (s == "\r\n" ? "\n" : s)
114
+ elsif s = scan(/\\./)
115
+ string << eval_escape_char(s[1,1])
116
+ elsif skip(/\#\{/)
117
+ string << eval_embedded_code(scan_embedded_code)
118
+ skip(/\}/)
119
+ elsif s = scan(/./)
120
+ string << s
121
+ else
122
+ parse_error! "unexpected end of file in a double quoted string"
123
+ end
124
+ end
125
+ end
126
+
127
+ def scan_single_quoted_string
128
+ string = []
129
+ while true
130
+ if skip(/\'/)
131
+ return string.join
132
+ elsif s = scan(/\\'/)
133
+ string << "'"
134
+ elsif s = scan(/\\\\/)
135
+ string << "\\"
136
+ elsif s = scan(LINE_BREAK)
137
+ string << (s == "\r\n" ? "\n" : s)
138
+ elsif s = scan(/./)
139
+ string << s
140
+ else
141
+ parse_error! "unexpected end of file in a single quoted string"
142
+ end
143
+ end
144
+ end
145
+
146
+ def scan_nonquoted_string(boundary_charset = LINE_END)
147
+ charset = /(?!#{boundary_charset})./
148
+
149
+ string = []
150
+ while true
151
+ if s = scan(/\#/)
152
+ string << '#'
153
+ elsif s = scan(charset)
154
+ string << s
155
+ else
156
+ break
157
+ end
158
+ end
159
+
160
+ if string.empty?
161
+ return nil
162
+ end
163
+
164
+ string.join
165
+ end
166
+
167
+ def scan_embedded_code
168
+ src = '"#{'+@ss.rest+"\n=begin\n=end\n}"
169
+
170
+ seek = -1
171
+ while (seek = src.index('}', seek + 1))
172
+ unless Ripper.sexp(src[0..seek] + '"').nil? # eager parsing until valid expression
173
+ break
174
+ end
175
+ end
176
+
177
+ unless seek
178
+ raise Fluent::ConfigParseError, @ss.rest
179
+ end
180
+
181
+ code = src[3, seek-3]
182
+
183
+ if @ss.rest.length < code.length
184
+ @ss.pos += @ss.rest.length
185
+ parse_error! "expected end of embedded code but $end"
186
+ end
187
+
188
+ @ss.pos += code.length
189
+
190
+ '"#{' + code + '}"'
191
+ end
192
+
193
+ def eval_embedded_code(code)
194
+ if @eval_context.nil?
195
+ parse_error! "embedded code is not allowed in this file"
196
+ end
197
+ # Add hostname and worker_id to code for preventing unused warnings
198
+ code = <<EOM + code
199
+ hostname = Socket.gethostname
200
+ worker_id = ENV['SERVERENGINE_WORKER_ID'] || ''
201
+ EOM
202
+ begin
203
+ @eval_context.instance_eval(code)
204
+ rescue SetNil
205
+ nil
206
+ rescue SetDefault
207
+ :default
208
+ end
209
+ end
210
+
211
+ def eval_escape_char(c)
212
+ case c
213
+ when '"'
214
+ '"'
215
+ when "'"
216
+ "'"
217
+ when "r"
218
+ "\r"
219
+ when "n"
220
+ "\n"
221
+ when "t"
222
+ "\t"
223
+ when "f"
224
+ "\f"
225
+ when "b"
226
+ "\b"
227
+ when "0"
228
+ "\0"
229
+ when /[a-zA-Z0-9]/
230
+ parse_error! "unexpected back-slash escape character '#{c}'"
231
+ else # symbols
232
+ c
233
+ end
234
+ end
235
+
236
+ def scan_json(is_array)
237
+ result = nil
238
+ # scan_json detects the end of a JSON literal by repeatedly attempting
239
+ # to parse the buffer and treating a successful parse as completion.
240
+ # This requires a parser that raises JSON::ParserError for incomplete
241
+ # input like '[1', '{"h"', '{"h":' or '{"h1":1'.
242
+
243
+ buffer = (is_array ? "[" : "{")
244
+ line_buffer = ""
245
+
246
+ until result
247
+ char = getch
248
+
249
+ break if char.nil?
250
+
251
+ if char == "#"
252
+ # If this is out of json string literals, this object can be parsed correctly
253
+ # '{"foo":"bar", #' -> '{"foo":"bar"}' (to check)
254
+ parsed = nil
255
+ begin
256
+ parsed = JSON.parse(buffer + line_buffer.rstrip.sub(/,$/, '') + (is_array ? "]" : "}"), **Fluent::DEFAULT_JSON_PARSE_OPTIONS)
257
+ rescue JSON::ParserError
258
+ # This '#' is in json string literals
259
+ end
260
+
261
+ if parsed
262
+ # ignore chars as comment before newline
263
+ while (char = getch) != "\n"
264
+ # ignore comment char
265
+ end
266
+ buffer << line_buffer + "\n"
267
+ line_buffer = ""
268
+ else
269
+ if @ss.exist?(/^\{[^}]+\}/)
270
+ # if it's interpolated string
271
+ skip(/\{/)
272
+ line_buffer << eval_embedded_code(scan_embedded_code)
273
+ skip(/\}/)
274
+ else
275
+ # '#' is a char in json string
276
+ line_buffer << char
277
+ end
278
+ end
279
+
280
+ next # This char '#' MUST NOT terminate json object.
281
+ end
282
+
283
+ if char == "\n"
284
+ buffer << line_buffer + "\n"
285
+ line_buffer = ""
286
+ next
287
+ end
288
+
289
+ line_buffer << char
290
+ begin
291
+ result = JSON.parse(buffer + line_buffer, **Fluent::DEFAULT_JSON_PARSE_OPTIONS)
292
+ rescue JSON::ParserError
293
+ # Incomplete json string yet
294
+ end
295
+ end
296
+
297
+ unless result
298
+ parse_error! "got incomplete JSON #{is_array ? 'array' : 'hash'} configuration"
299
+ end
300
+
301
+ JSON.dump(result)
302
+ end
303
+ end
304
+ end
305
+ end