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,205 @@
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'
18
+ require 'fluent/counter/error'
19
+ require 'fluent/plugin/storage_local'
20
+ require 'fluent/time'
21
+
22
+ module Fluent
23
+ module Counter
24
+ class Store
25
+ def self.gen_key(scope, key)
26
+ "#{scope}\t#{key}"
27
+ end
28
+
29
+ def initialize(opt = {})
30
+ @log = opt[:log] || $log
31
+
32
+ # Notice: This storage is not be implemented auto save.
33
+ @storage = Plugin.new_storage('local', parent: DummyParent.new(@log))
34
+ conf = if opt[:path]
35
+ {'persistent' => true, 'path' => opt[:path] }
36
+ else
37
+ {'persistent' => false }
38
+ end
39
+ @storage.configure(Fluent::Config::Element.new('storage', {}, conf, []))
40
+ end
41
+
42
+ # This class behaves as a configurable plugin for using in storage (OwnedByMixin).
43
+ class DummyParent
44
+ include Configurable
45
+
46
+ attr_reader :log
47
+
48
+ def initialize(log)
49
+ @log = log
50
+ end
51
+
52
+ def plugin_id
53
+ 'dummy_parent_store'
54
+ end
55
+
56
+ def plugin_id_configured?
57
+ false
58
+ end
59
+
60
+ # storage_local calls PluginId#plugin_root_dir
61
+ def plugin_root_dir
62
+ nil
63
+ end
64
+ end
65
+
66
+ def start
67
+ @storage.load
68
+ end
69
+
70
+ def stop
71
+ @storage.save
72
+ end
73
+
74
+ def init(key, data, ignore: false)
75
+ ret = if v = get(key)
76
+ raise InvalidParams.new("#{key} already exists in counter") unless ignore
77
+ v
78
+ else
79
+ @storage.put(key, build_value(data))
80
+ end
81
+
82
+ build_response(ret)
83
+ end
84
+
85
+ def get(key, raise_error: false, raw: false)
86
+ ret = if raise_error
87
+ @storage.get(key) or raise UnknownKey.new("`#{key}` doesn't exist in counter")
88
+ else
89
+ @storage.get(key)
90
+ end
91
+ if raw
92
+ ret
93
+ else
94
+ ret && build_response(ret)
95
+ end
96
+ end
97
+
98
+ def key?(key)
99
+ !!@storage.get(key)
100
+ end
101
+
102
+ def delete(key)
103
+ ret = @storage.delete(key) or raise UnknownKey.new("`#{key}` doesn't exist in counter")
104
+ build_response(ret)
105
+ end
106
+
107
+ def inc(key, data, force: false)
108
+ value = data.delete('value')
109
+ init(key, data) if !key?(key) && force
110
+ v = get(key, raise_error: true, raw: true)
111
+ valid_type!(v, value)
112
+
113
+ v['total'] += value
114
+ v['current'] += value
115
+ t = EventTime.now
116
+ v['last_modified_at'] = [t.sec, t.nsec]
117
+ @storage.put(key, v)
118
+
119
+ build_response(v)
120
+ end
121
+
122
+ def reset(key)
123
+ v = get(key, raise_error: true, raw: true)
124
+ success = false
125
+ old_data = v.dup
126
+ now = EventTime.now
127
+ last_reset_at = EventTime.new(*v['last_reset_at'])
128
+
129
+ # Does it need reset?
130
+ if (last_reset_at + v['reset_interval']) <= now
131
+ success = true
132
+ v['current'] = initial_value(v['type'])
133
+ t = [now.sec, now.nsec]
134
+ v['last_reset_at'] = t
135
+ v['last_modified_at'] = t
136
+ @storage.put(key, v)
137
+ end
138
+
139
+ {
140
+ 'elapsed_time' => now - last_reset_at,
141
+ 'success' => success,
142
+ 'counter_data' => build_response(old_data)
143
+ }
144
+ end
145
+
146
+ private
147
+
148
+ def build_response(d)
149
+ {
150
+ 'name' => d['name'],
151
+ 'total' => d['total'],
152
+ 'current' => d['current'],
153
+ 'type' => d['type'],
154
+ 'reset_interval' => d['reset_interval'],
155
+ 'last_reset_at' => EventTime.new(*d['last_reset_at']),
156
+ }
157
+ end
158
+
159
+ # value is Hash. value requires these fields.
160
+ # :name, :total, :current, :type, :reset_interval, :last_reset_at, :last_modified_at
161
+ def build_value(data)
162
+ type = data['type'] || 'numeric'
163
+ now = EventTime.now
164
+ t = [now.sec, now.nsec]
165
+
166
+ v = initial_value(type)
167
+
168
+ data.merge(
169
+ 'type' => type,
170
+ 'last_reset_at' => t,
171
+ 'last_modified_at' => t,
172
+ 'current' => v,
173
+ 'total' => v,
174
+ )
175
+ end
176
+
177
+ def initial_value(type)
178
+ case type
179
+ when 'numeric', 'integer' then 0
180
+ when 'float' then 0.0
181
+ else raise InvalidParams.new('`type` should be integer, float, or numeric')
182
+ end
183
+ end
184
+
185
+ def valid_type!(v, value)
186
+ type = v['type']
187
+ return unless (type != 'numeric') && (type_str(value) != type)
188
+ raise InvalidParams.new("`type` is #{type}. You should pass #{type} value as a `value`")
189
+ end
190
+
191
+ def type_str(v)
192
+ case v
193
+ when Integer
194
+ 'integer'
195
+ when Float
196
+ 'float'
197
+ when Numeric
198
+ 'numeric'
199
+ else
200
+ raise InvalidParams.new("`type` should be integer, float, or numeric")
201
+ end
202
+ end
203
+ end
204
+ end
205
+ end
@@ -0,0 +1,145 @@
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/counter/error'
18
+
19
+ module Fluent
20
+ module Counter
21
+ class Validator
22
+ VALID_NAME = /\A[a-z][a-zA-Z0-9\-_]*\Z/
23
+ VALID_SCOPE_NAME = /\A[a-z][\ta-zA-Z0-9\-_]*\Z/
24
+ VALID_METHODS = %w(establish init delete inc get reset)
25
+
26
+ def self.request(data)
27
+ errors = []
28
+ raise "Received data is not Hash: #{data}" unless data.is_a?(Hash)
29
+
30
+ unless data['id']
31
+ errors << Fluent::Counter::InvalidRequest.new('Request should include `id`')
32
+ end
33
+
34
+ if !data['method']
35
+ errors << Fluent::Counter::InvalidRequest.new('Request should include `method`')
36
+ elsif !(VALID_NAME =~ data['method'])
37
+ errors << Fluent::Counter::InvalidRequest.new('`method` is the invalid format')
38
+ elsif !VALID_METHODS.include?(data['method'])
39
+ errors << Fluent::Counter::MethodNotFound.new("Unknown method name passed: #{data['method']}")
40
+ end
41
+
42
+ errors.map(&:to_hash)
43
+ end
44
+
45
+ def initialize(*types)
46
+ @types = types.map(&:to_s)
47
+ @empty = @types.delete('empty')
48
+ end
49
+
50
+ def call(data)
51
+ success = []
52
+ errors = []
53
+
54
+ if @empty && data.empty?
55
+ errors << Fluent::Counter::InvalidParams.new('One or more `params` are required')
56
+ else
57
+ data.each do |d|
58
+ begin
59
+ @types.each { |type| dispatch(type, d) }
60
+ success << d
61
+ rescue => e
62
+ errors << e
63
+ end
64
+ end
65
+ end
66
+
67
+ [success, errors]
68
+ end
69
+
70
+ private
71
+
72
+ def dispatch(type, data)
73
+ send("validate_#{type}!", data)
74
+ rescue NoMethodError => e
75
+ raise Fluent::Counter::InternalServerError.new(e)
76
+ end
77
+ end
78
+
79
+ class ArrayValidator < Validator
80
+ def validate_key!(name)
81
+ unless name.is_a?(String)
82
+ raise Fluent::Counter::InvalidParams.new('The type of `key` should be String')
83
+ end
84
+
85
+ unless VALID_NAME.match?(name)
86
+ raise Fluent::Counter::InvalidParams.new('`key` is the invalid format')
87
+ end
88
+ end
89
+
90
+ def validate_scope!(name)
91
+ unless name.is_a?(String)
92
+ raise Fluent::Counter::InvalidParams.new('The type of `scope` should be String')
93
+ end
94
+
95
+ unless VALID_SCOPE_NAME.match?(name)
96
+ raise Fluent::Counter::InvalidParams.new('`scope` is the invalid format')
97
+ end
98
+ end
99
+ end
100
+
101
+ class HashValidator < Validator
102
+ def validate_name!(hash)
103
+ name = hash['name']
104
+ unless name
105
+ raise Fluent::Counter::InvalidParams.new('`name` is required')
106
+ end
107
+
108
+ unless name.is_a?(String)
109
+ raise Fluent::Counter::InvalidParams.new('The type of `name` should be String')
110
+ end
111
+
112
+ unless VALID_NAME.match?(name)
113
+ raise Fluent::Counter::InvalidParams.new("`name` is the invalid format")
114
+ end
115
+ end
116
+
117
+ def validate_value!(hash)
118
+ value = hash['value']
119
+ unless value
120
+ raise Fluent::Counter::InvalidParams.new('`value` is required')
121
+ end
122
+
123
+ unless value.is_a?(Numeric)
124
+ raise Fluent::Counter::InvalidParams.new("The type of `value` type should be Numeric")
125
+ end
126
+ end
127
+
128
+ def validate_reset_interval!(hash)
129
+ interval = hash['reset_interval']
130
+
131
+ unless interval
132
+ raise Fluent::Counter::InvalidParams.new('`reset_interval` is required')
133
+ end
134
+
135
+ unless interval.is_a?(Numeric)
136
+ raise Fluent::Counter::InvalidParams.new('The type of `reset_interval` should be Numeric')
137
+ end
138
+
139
+ if interval < 0
140
+ raise Fluent::Counter::InvalidParams.new('`reset_interval` should be a positive number')
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,23 @@
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/counter/client'
18
+ require 'fluent/counter/server'
19
+
20
+ module Fluent
21
+ module Counter
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ here = File.dirname(__FILE__)
5
+ $LOAD_PATH << File.expand_path(File.join(here, '..'))
6
+
7
+ require 'serverengine'
8
+ require 'fluent/env'
9
+ require 'fluent/supervisor'
10
+
11
+ server_module = Fluent.const_get(ARGV[0])
12
+ worker_module = Fluent.const_get(ARGV[1])
13
+ params = JSON.parse(ARGV[2], **Fluent::DEFAULT_JSON_PARSE_OPTIONS)
14
+ ServerEngine::Daemon.run_server(server_module, worker_module) { Fluent::Supervisor.serverengine_config(params) }
@@ -0,0 +1,88 @@
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
+
19
+ module Fluent
20
+ class Daemonizer
21
+ def self.daemonize(pid_path, args = [], &block)
22
+ new.daemonize(pid_path, args, &block)
23
+ end
24
+
25
+ def daemonize(pid_path, args = [])
26
+ pid_fullpath = File.absolute_path(pid_path)
27
+ check_pidfile(pid_fullpath)
28
+
29
+ begin
30
+ Process.daemon(false, false)
31
+
32
+ File.write(pid_fullpath, Process.pid.to_s)
33
+
34
+ # install signal and set process name are performed by supervisor
35
+ install_at_exit_handlers(pid_fullpath)
36
+
37
+ yield
38
+ rescue NotImplementedError
39
+ daemonize_with_spawn(pid_fullpath, args)
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def daemonize_with_spawn(pid_fullpath, args)
46
+ pid = Process.spawn(*['fluentd'].concat(args))
47
+
48
+ File.write(pid_fullpath, pid.to_s)
49
+
50
+ pid
51
+ end
52
+
53
+ def check_pidfile(pid_path)
54
+ if File.exist?(pid_path)
55
+ if !File.readable?(pid_path) || !File.writable?(pid_path)
56
+ raise Fluent::ConfigError, "Cannot access pid file: #{pid_path}"
57
+ end
58
+
59
+ pid =
60
+ begin
61
+ Integer(File.read(pid_path), 10)
62
+ rescue TypeError, ArgumentError
63
+ return # ignore
64
+ end
65
+
66
+ begin
67
+ Process.kill(0, pid)
68
+ raise Fluent::ConfigError, "pid(#{pid}) is running"
69
+ rescue Errno::EPERM
70
+ raise Fluent::ConfigError, "pid(#{pid}) is running"
71
+ rescue Errno::ESRCH
72
+ end
73
+ else
74
+ unless File.writable?(File.dirname(pid_path))
75
+ raise Fluent::ConfigError, "Cannot access directory for pid file: #{File.dirname(pid_path)}"
76
+ end
77
+ end
78
+ end
79
+
80
+ def install_at_exit_handlers(pidfile)
81
+ at_exit do
82
+ if File.exist?(pidfile)
83
+ File.delete(pidfile)
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end