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,56 @@
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/yaml_parser/loader'
18
+ require 'fluent/config/yaml_parser/parser'
19
+ require 'pathname'
20
+
21
+ module Fluent
22
+ module Config
23
+ module YamlParser
24
+ def self.parse(path, on_file_parsed: nil)
25
+ context = Kernel.binding
26
+
27
+ unless context.respond_to?(:use_nil)
28
+ context.define_singleton_method(:use_nil) do
29
+ raise Fluent::SetNil
30
+ end
31
+ end
32
+
33
+ unless context.respond_to?(:use_default)
34
+ context.define_singleton_method(:use_default) do
35
+ raise Fluent::SetDefault
36
+ end
37
+ end
38
+
39
+ unless context.respond_to?(:hostname)
40
+ context.define_singleton_method(:hostname) do
41
+ Socket.gethostname
42
+ end
43
+ end
44
+
45
+ unless context.respond_to?(:worker_id)
46
+ context.define_singleton_method(:worker_id) do
47
+ ENV['SERVERENGINE_WORKER_ID'] || ''
48
+ end
49
+ end
50
+
51
+ s = Fluent::Config::YamlParser::Loader.new(context, on_file_parsed: on_file_parsed).load(Pathname.new(path))
52
+ Fluent::Config::YamlParser::Parser.new(s).build.to_element
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,89 @@
1
+ #
2
+ # Fluent
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/element'
19
+ require 'fluent/configurable'
20
+ require 'fluent/config/yaml_parser'
21
+
22
+ module Fluent
23
+ module Config
24
+ # @param config_path [String] config file path
25
+ # @param encoding [String] encoding of config file
26
+ # @param additional_config [String] config which is added to last of config body
27
+ # @param use_v1_config [Bool] config is formatted with v1 or not
28
+ # @return [Fluent::Config]
29
+ def self.build(config_path:, encoding: 'utf-8', additional_config: nil, use_v1_config: true, type: nil, on_file_parsed: nil)
30
+ if type == :guess
31
+ config_file_ext = File.extname(config_path)
32
+ if config_file_ext == '.yaml' || config_file_ext == '.yml'
33
+ type = :yaml
34
+ end
35
+ end
36
+
37
+ if type == :yaml || type == :yml
38
+ return Fluent::Config::YamlParser.parse(config_path, on_file_parsed: on_file_parsed)
39
+ end
40
+
41
+ config_fname = File.basename(config_path)
42
+ config_basedir = File.dirname(config_path)
43
+ config_data = File.open(config_path, "r:#{encoding}:utf-8") do |f|
44
+ s = f.read
45
+ if additional_config
46
+ c = additional_config.gsub("\\n", "\n")
47
+ s += "\n#{c}"
48
+ end
49
+ s
50
+ end
51
+
52
+ Fluent::Config.parse(config_data, config_fname, config_basedir, use_v1_config, on_file_parsed: on_file_parsed)
53
+ end
54
+
55
+ def self.parse(str, fname, basepath = Dir.pwd, v1_config = nil, syntax: :v1, on_file_parsed: nil)
56
+ parser = if fname =~ /\.rb$/ || syntax == :ruby
57
+ :ruby
58
+ elsif v1_config.nil?
59
+ case syntax
60
+ when :v1 then :v1
61
+ when :v0 then :v0
62
+ else
63
+ raise ArgumentError, "Unknown Fluentd configuration syntax: '#{syntax}'"
64
+ end
65
+ elsif v1_config then :v1
66
+ else :v0
67
+ end
68
+ case parser
69
+ when :v1
70
+ require 'fluent/config/v1_parser'
71
+ V1Parser.parse(str, fname, basepath, Kernel.binding, on_file_parsed: on_file_parsed)
72
+ when :v0
73
+ # TODO: show deprecated message in v1
74
+ require 'fluent/config/parser'
75
+ Parser.parse(str, fname, basepath)
76
+ when :ruby
77
+ require 'fluent/config/dsl'
78
+ $log.warn("Ruby DSL configuration format is deprecated. Please use original configuration format. https://docs.fluentd.org/configuration/config-file") if $log
79
+ Config::DSL::Parser.parse(str, File.join(basepath, fname))
80
+ else
81
+ raise "[BUG] unknown configuration parser specification:'#{parser}'"
82
+ end
83
+ end
84
+
85
+ def self.new(name = '')
86
+ Element.new(name, '', {}, [])
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,202 @@
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/env'
18
+ require 'fluent/config/configure_proxy'
19
+ require 'fluent/config/section'
20
+ require 'fluent/config/error'
21
+ require 'fluent/registry'
22
+ require 'fluent/plugin'
23
+ require 'fluent/config/types'
24
+
25
+ module Fluent
26
+ module Configurable
27
+ def self.included(mod)
28
+ mod.extend(ClassMethods)
29
+ end
30
+
31
+ def initialize
32
+ super
33
+ # to simulate implicit 'attr_accessor' by config_param / config_section and its value by config_set_default
34
+ proxy = self.class.merged_configure_proxy
35
+ proxy.params.each_key do |name|
36
+ next if name.to_s.start_with?('@')
37
+ if proxy.defaults.has_key?(name)
38
+ instance_variable_set("@#{name}".to_sym, proxy.defaults[name])
39
+ end
40
+ end
41
+ proxy.sections.each_key do |name|
42
+ next if name.to_s.start_with?('@')
43
+ subproxy = proxy.sections[name]
44
+ if subproxy.multi?
45
+ instance_variable_set("@#{subproxy.variable_name}".to_sym, [])
46
+ else
47
+ instance_variable_set("@#{subproxy.variable_name}".to_sym, nil)
48
+ end
49
+ end
50
+ end
51
+
52
+ def configure_proxy_generate
53
+ proxy = self.class.merged_configure_proxy
54
+
55
+ if self.respond_to?(:owner) && self.owner
56
+ owner_proxy = owner.class.merged_configure_proxy
57
+ if proxy.configured_in_section
58
+ owner_proxy = owner_proxy.sections[proxy.configured_in_section]
59
+ end
60
+ proxy.overwrite_defaults(owner_proxy) if owner_proxy
61
+ end
62
+
63
+ proxy
64
+ end
65
+
66
+ def configured_section_create(name, conf = nil)
67
+ conf ||= Fluent::Config::Element.new(name.to_s, '', {}, [])
68
+ root_proxy = configure_proxy_generate
69
+ proxy = if name.nil? # root
70
+ root_proxy
71
+ else
72
+ root_proxy.sections[name]
73
+ end
74
+ # take care to raise Fluent::ConfigError if conf mismatched to proxy
75
+ Fluent::Config::SectionGenerator.generate(proxy, conf, nil, nil)
76
+ end
77
+
78
+ def configure(conf, strict_config_value=false)
79
+ @config = conf
80
+
81
+ logger = if self.respond_to?(:log)
82
+ self.log
83
+ elsif self.respond_to?(:owner) && self.owner.respond_to?(:log)
84
+ self.owner.log
85
+ elsif defined?($log)
86
+ $log
87
+ else
88
+ nil
89
+ end
90
+ proxy = configure_proxy_generate
91
+ conf.corresponding_proxies << proxy
92
+
93
+ # In the nested section, can't get plugin class through proxies so get plugin class here
94
+ plugin_class = Fluent::Plugin.lookup_type_from_class(proxy.name.to_s)
95
+ root = Fluent::Config::SectionGenerator.generate(proxy, conf, logger, plugin_class, [], strict_config_value)
96
+ @config_root_section = root
97
+
98
+ root.instance_eval{ @params.keys }.each do |param_name|
99
+ next if param_name.to_s.start_with?('@')
100
+ varname = "@#{param_name}".to_sym
101
+ instance_variable_set(varname, root[param_name])
102
+ end
103
+
104
+ self
105
+ end
106
+
107
+ def config
108
+ @masked_config ||= @config.to_masked_element
109
+ end
110
+
111
+ CONFIG_TYPE_REGISTRY = Registry.new(:config_type, 'fluent/plugin/type_')
112
+
113
+ def self.register_type(type, callable = nil, &block)
114
+ callable ||= block
115
+ CONFIG_TYPE_REGISTRY.register(type, callable)
116
+ end
117
+
118
+ def self.lookup_type(type)
119
+ CONFIG_TYPE_REGISTRY.lookup(type)
120
+ end
121
+
122
+ {
123
+ string: Config::STRING_TYPE,
124
+ enum: Config::ENUM_TYPE,
125
+ integer: Config::INTEGER_TYPE,
126
+ float: Config::FLOAT_TYPE,
127
+ size: Config::SIZE_TYPE,
128
+ bool: Config::BOOL_TYPE,
129
+ time: Config::TIME_TYPE,
130
+ hash: Config::HASH_TYPE,
131
+ array: Config::ARRAY_TYPE,
132
+ regexp: Config::REGEXP_TYPE,
133
+ }.each do |name, type|
134
+ register_type(name, type)
135
+ end
136
+
137
+ module ClassMethods
138
+ def configure_proxy_map
139
+ map = {}
140
+ self.define_singleton_method(:configure_proxy_map){ map }
141
+ map
142
+ end
143
+
144
+ def configure_proxy(mod_name)
145
+ map = configure_proxy_map
146
+ unless map[mod_name]
147
+ type_lookup = ->(type) { Fluent::Configurable.lookup_type(type) }
148
+ proxy = Fluent::Config::ConfigureProxy.new(mod_name, root: true, required: true, multi: false, type_lookup: type_lookup)
149
+ map[mod_name] = proxy
150
+ end
151
+ map[mod_name]
152
+ end
153
+
154
+ def configured_in(section_name)
155
+ configure_proxy(self.name).configured_in(section_name)
156
+ end
157
+
158
+ def config_param(name, type = nil, **kwargs, &block)
159
+ configure_proxy(self.name).config_param(name, type, **kwargs, &block)
160
+ # reserved names '@foo' are invalid as attr_accessor name
161
+ attr_accessor(name) unless kwargs[:skip_accessor] || Fluent::Config::Element::RESERVED_PARAMETERS.include?(name.to_s)
162
+ end
163
+
164
+ def config_set_default(name, defval)
165
+ configure_proxy(self.name).config_set_default(name, defval)
166
+ end
167
+
168
+ def config_set_desc(name, desc)
169
+ configure_proxy(self.name).config_set_desc(name, desc)
170
+ end
171
+
172
+ def config_section(name, **kwargs, &block)
173
+ section_already_exists = !!merged_configure_proxy.sections[name]
174
+ configure_proxy(self.name).config_section(name, **kwargs, &block)
175
+ variable_name = configure_proxy(self.name).sections[name].variable_name
176
+ if !section_already_exists && !self.respond_to?(variable_name)
177
+ attr_accessor variable_name
178
+ end
179
+ end
180
+
181
+ def desc(description)
182
+ configure_proxy(self.name).desc(description)
183
+ end
184
+
185
+ def merged_configure_proxy
186
+ configurables = ancestors.reverse.select{ |a| a.respond_to?(:configure_proxy) }
187
+
188
+ # 'a.object_id.to_s' is to support anonymous class
189
+ # which created in tests to overwrite original behavior temporally
190
+ #
191
+ # p Module.new.name #=> nil
192
+ # p Class.new.name #=> nil
193
+ # p AnyGreatClass.dup.name #=> nil
194
+ configurables.map{ |a| a.configure_proxy(a.name || a.object_id.to_s) }.reduce(:merge)
195
+ end
196
+
197
+ def dump_config_definition
198
+ configure_proxy_map[self.to_s].dump_config_definition
199
+ end
200
+ end
201
+ end
202
+ 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
+ require 'cool.io'
18
+ require 'fluent/msgpack_factory'
19
+
20
+ module Fluent
21
+ module Counter
22
+ class BaseSocket < Coolio::TCPSocket
23
+ def packed_write(data)
24
+ write pack(data)
25
+ end
26
+
27
+ def on_read(data)
28
+ Fluent::MessagePackFactory.msgpack_unpacker.feed_each(data) do |d|
29
+ on_message d
30
+ end
31
+ end
32
+
33
+ def on_message(data)
34
+ raise NotImplementedError
35
+ end
36
+
37
+ private
38
+
39
+ def pack(data)
40
+ Fluent::MessagePackFactory.msgpack_packer.pack(data)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,297 @@
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 'cool.io'
18
+ require 'fluent/counter/base_socket'
19
+ require 'fluent/counter/error'
20
+ require 'timeout'
21
+
22
+ module Fluent
23
+ module Counter
24
+ class Client
25
+ DEFAULT_PORT = 24321
26
+ DEFAULT_ADDR = '127.0.0.1'
27
+ DEFAULT_TIMEOUT = 5
28
+ ID_LIMIT_COUNT = 1 << 31
29
+
30
+ def initialize(loop = nil, opt = {})
31
+ @loop = loop || Coolio::Loop.new
32
+ @port = opt[:port] || DEFAULT_PORT
33
+ @host = opt[:host] || DEFAULT_ADDR
34
+ @log = opt[:log] || $log
35
+ @timeout = opt[:timeout] || DEFAULT_TIMEOUT
36
+ @conn = Connection.connect(@host, @port, method(:on_message))
37
+ @responses = {}
38
+ @id = 0
39
+ @id_mutex = Mutex.new
40
+ @loop_mutex = Mutex.new
41
+ end
42
+
43
+ def start
44
+ @loop.attach(@conn)
45
+ @log.debug("starting counter client: #{@host}:#{@port}")
46
+ self
47
+ rescue => e
48
+ if @log
49
+ @log.error e
50
+ else
51
+ STDERR.puts e
52
+ end
53
+ end
54
+
55
+ def stop
56
+ @conn.close
57
+ @log.debug("calling stop in counter client: #{@host}:#{@port}")
58
+ end
59
+
60
+ def establish(scope)
61
+ scope = Timeout.timeout(@timeout) {
62
+ response = send_request('establish', nil, [scope])
63
+ Fluent::Counter.raise_error(response.errors.first) if response.errors?
64
+ data = response.data
65
+ data.first
66
+ }
67
+ @scope = scope
68
+ rescue Timeout::Error
69
+ raise "Can't establish the connection to counter server due to timeout"
70
+ end
71
+
72
+ # === Example
73
+ # `init` receives various arguments.
74
+ #
75
+ # 1. init(name: 'name')
76
+ # 2. init({ name: 'name',reset_interval: 20 }, options: {})
77
+ # 3. init([{ name: 'name1',reset_interval: 20 }, { name: 'name2',reset_interval: 20 }])
78
+ # 4. init([{ name: 'name1',reset_interval: 20 }, { name: 'name2',reset_interval: 20 }], options: {})
79
+ # 5. init([{ name: 'name1',reset_interval: 20 }, { name: 'name2',reset_interval: 20 }]) { |res| ... }
80
+ def init(params, options: {})
81
+ exist_scope!
82
+ params = [params] unless params.is_a?(Array)
83
+ res = send_request('init', @scope, params, options)
84
+
85
+ # if `async` is false or missing, block at this method and return a Future::Result object.
86
+ if block_given?
87
+ Thread.start do
88
+ yield res.get
89
+ end
90
+ else
91
+ res
92
+ end
93
+ end
94
+
95
+ def delete(*params, options: {})
96
+ exist_scope!
97
+ res = send_request('delete', @scope, params, options)
98
+
99
+ if block_given?
100
+ Thread.start do
101
+ yield res.get
102
+ end
103
+ else
104
+ res
105
+ end
106
+ end
107
+
108
+ # === Example
109
+ # `inc` receives various arguments.
110
+ #
111
+ # 1. inc(name: 'name')
112
+ # 2. inc({ name: 'name',value: 20 }, options: {})
113
+ # 3. inc([{ name: 'name1',value: 20 }, { name: 'name2',value: 20 }])
114
+ # 4. inc([{ name: 'name1',value: 20 }, { name: 'name2',value: 20 }], options: {})
115
+ def inc(params, options: {})
116
+ exist_scope!
117
+ params = [params] unless params.is_a?(Array)
118
+ res = send_request('inc', @scope, params, options)
119
+
120
+ if block_given?
121
+ Thread.start do
122
+ yield res.get
123
+ end
124
+ else
125
+ res
126
+ end
127
+ end
128
+
129
+ def get(*params, options: {})
130
+ exist_scope!
131
+ res = send_request('get', @scope, params, options)
132
+
133
+ if block_given?
134
+ Thread.start do
135
+ yield res.get
136
+ end
137
+ else
138
+ res
139
+ end
140
+ end
141
+
142
+ def reset(*params, options: {})
143
+ exist_scope!
144
+ res = send_request('reset', @scope, params, options)
145
+
146
+ if block_given?
147
+ Thread.start do
148
+ yield res.get
149
+ end
150
+ else
151
+ res
152
+ end
153
+ end
154
+
155
+ private
156
+
157
+ def exist_scope!
158
+ raise 'Call `establish` method to get a `scope` before calling this method' unless @scope
159
+ end
160
+
161
+ def on_message(data)
162
+ if response = @responses.delete(data['id'])
163
+ response.set(data)
164
+ else
165
+ @log.warn("Receiving missing id data: #{data}")
166
+ end
167
+ end
168
+
169
+ def send_request(method, scope, params, opt = {})
170
+ id = generate_id
171
+ res = Future.new(@loop, @loop_mutex)
172
+ @responses[id] = res # set a response value to this future object at `on_message`
173
+ request = build_request(method, id, scope, params, opt)
174
+ @log.debug(request)
175
+ @conn.send_data request
176
+ res
177
+ end
178
+
179
+ def build_request(method, id, scope = nil, params = nil, options = nil)
180
+ r = { id: id, method: method }
181
+ r[:scope] = scope if scope
182
+ r[:params] = params if params
183
+ r[:options] = options if options
184
+ r
185
+ end
186
+
187
+ def generate_id
188
+ id = 0
189
+ @id_mutex.synchronize do
190
+ id = @id
191
+ @id += 1
192
+ @id = 0 if ID_LIMIT_COUNT < @id
193
+ end
194
+ id
195
+ end
196
+ end
197
+
198
+ class Connection < Fluent::Counter::BaseSocket
199
+ def initialize(io, on_message)
200
+ super(io)
201
+ @connection = false
202
+ @buffer = ''
203
+ @on_message = on_message
204
+ end
205
+
206
+ def send_data(data)
207
+ if @connection
208
+ packed_write data
209
+ else
210
+ @buffer += pack(data)
211
+ end
212
+ end
213
+
214
+ def on_connect
215
+ @connection = true
216
+ write @buffer
217
+ @buffer = ''
218
+ end
219
+
220
+ def on_close
221
+ @connection = false
222
+ end
223
+
224
+ def on_message(data)
225
+ @on_message.call(data)
226
+ end
227
+ end
228
+
229
+ class Future
230
+ class Result
231
+ attr_reader :data, :errors
232
+
233
+ def initialize(result)
234
+ @errors = result['errors']
235
+ @data = result['data']
236
+ end
237
+
238
+ def success?
239
+ @errors.nil? || @errors.empty?
240
+ end
241
+
242
+ def error?
243
+ !success?
244
+ end
245
+ end
246
+
247
+ def initialize(loop, mutex)
248
+ @set = false
249
+ @result = nil
250
+ @mutex = mutex
251
+ @loop = loop
252
+ end
253
+
254
+ def set(v)
255
+ @result = Result.new(v)
256
+ @set = true
257
+ end
258
+
259
+ def errors
260
+ get.errors
261
+ end
262
+
263
+ def errors?
264
+ es = errors
265
+ es && !es.empty?
266
+ end
267
+
268
+ def data
269
+ get.data
270
+ end
271
+
272
+ def get
273
+ # Block until `set` method is called and @result is set
274
+ join if @result.nil?
275
+ @result
276
+ end
277
+
278
+ def wait
279
+ res = get
280
+ if res.error?
281
+ Fluent::Counter.raise_error(res.errors.first)
282
+ end
283
+ res
284
+ end
285
+
286
+ private
287
+
288
+ def join
289
+ until @set
290
+ @mutex.synchronize do
291
+ @loop.run_once(0.0001) # return a lock as soon as possible
292
+ end
293
+ end
294
+ end
295
+ end
296
+ end
297
+ end