fluentd 0.14.4-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

Files changed (328) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE.md +6 -0
  3. data/.gitignore +26 -0
  4. data/.travis.yml +45 -0
  5. data/AUTHORS +2 -0
  6. data/CONTRIBUTING.md +35 -0
  7. data/COPYING +14 -0
  8. data/ChangeLog +276 -0
  9. data/Gemfile +9 -0
  10. data/README.md +51 -0
  11. data/Rakefile +53 -0
  12. data/Vagrantfile +17 -0
  13. data/appveyor.yml +41 -0
  14. data/bin/fluent-debug +5 -0
  15. data/example/copy_roundrobin.conf +39 -0
  16. data/example/filter_stdout.conf +22 -0
  17. data/example/in_forward.conf +11 -0
  18. data/example/in_http.conf +14 -0
  19. data/example/in_out_forward.conf +17 -0
  20. data/example/in_syslog.conf +15 -0
  21. data/example/in_tail.conf +14 -0
  22. data/example/in_tcp.conf +13 -0
  23. data/example/in_udp.conf +13 -0
  24. data/example/multi_filters.conf +61 -0
  25. data/example/out_buffered_null.conf +32 -0
  26. data/example/out_copy.conf +20 -0
  27. data/example/out_file.conf +13 -0
  28. data/example/out_forward.conf +35 -0
  29. data/example/out_forward_buf_file.conf +23 -0
  30. data/example/v0_12_filter.conf +78 -0
  31. data/example/v1_literal_example.conf +36 -0
  32. data/fluent.conf +139 -0
  33. data/fluentd.gemspec +51 -0
  34. data/lib/fluent/agent.rb +194 -0
  35. data/lib/fluent/command/bundler_injection.rb +45 -0
  36. data/lib/fluent/command/cat.rb +319 -0
  37. data/lib/fluent/command/debug.rb +102 -0
  38. data/lib/fluent/command/fluentd.rb +273 -0
  39. data/lib/fluent/compat/call_super_mixin.rb +67 -0
  40. data/lib/fluent/compat/exec_util.rb +129 -0
  41. data/lib/fluent/compat/file_util.rb +54 -0
  42. data/lib/fluent/compat/filter.rb +68 -0
  43. data/lib/fluent/compat/formatter.rb +111 -0
  44. data/lib/fluent/compat/formatter_utils.rb +85 -0
  45. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  46. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  47. data/lib/fluent/compat/input.rb +49 -0
  48. data/lib/fluent/compat/output.rb +677 -0
  49. data/lib/fluent/compat/output_chain.rb +60 -0
  50. data/lib/fluent/compat/parser.rb +180 -0
  51. data/lib/fluent/compat/parser_utils.rb +40 -0
  52. data/lib/fluent/compat/propagate_default.rb +62 -0
  53. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  54. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  55. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  56. data/lib/fluent/compat/socket_util.rb +165 -0
  57. data/lib/fluent/compat/string_util.rb +34 -0
  58. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  59. data/lib/fluent/compat/type_converter.rb +90 -0
  60. data/lib/fluent/config.rb +56 -0
  61. data/lib/fluent/config/basic_parser.rb +123 -0
  62. data/lib/fluent/config/configure_proxy.rb +366 -0
  63. data/lib/fluent/config/dsl.rb +149 -0
  64. data/lib/fluent/config/element.rb +218 -0
  65. data/lib/fluent/config/error.rb +26 -0
  66. data/lib/fluent/config/literal_parser.rb +251 -0
  67. data/lib/fluent/config/parser.rb +107 -0
  68. data/lib/fluent/config/section.rb +212 -0
  69. data/lib/fluent/config/types.rb +136 -0
  70. data/lib/fluent/config/v1_parser.rb +190 -0
  71. data/lib/fluent/configurable.rb +176 -0
  72. data/lib/fluent/daemon.rb +15 -0
  73. data/lib/fluent/engine.rb +220 -0
  74. data/lib/fluent/env.rb +27 -0
  75. data/lib/fluent/event.rb +287 -0
  76. data/lib/fluent/event_router.rb +259 -0
  77. data/lib/fluent/filter.rb +21 -0
  78. data/lib/fluent/formatter.rb +23 -0
  79. data/lib/fluent/input.rb +21 -0
  80. data/lib/fluent/label.rb +38 -0
  81. data/lib/fluent/load.rb +36 -0
  82. data/lib/fluent/log.rb +445 -0
  83. data/lib/fluent/match.rb +141 -0
  84. data/lib/fluent/mixin.rb +31 -0
  85. data/lib/fluent/msgpack_factory.rb +62 -0
  86. data/lib/fluent/output.rb +26 -0
  87. data/lib/fluent/output_chain.rb +23 -0
  88. data/lib/fluent/parser.rb +23 -0
  89. data/lib/fluent/plugin.rb +161 -0
  90. data/lib/fluent/plugin/bare_output.rb +63 -0
  91. data/lib/fluent/plugin/base.rb +130 -0
  92. data/lib/fluent/plugin/buf_file.rb +154 -0
  93. data/lib/fluent/plugin/buf_memory.rb +34 -0
  94. data/lib/fluent/plugin/buffer.rb +603 -0
  95. data/lib/fluent/plugin/buffer/chunk.rb +160 -0
  96. data/lib/fluent/plugin/buffer/file_chunk.rb +323 -0
  97. data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
  98. data/lib/fluent/plugin/exec_util.rb +22 -0
  99. data/lib/fluent/plugin/file_util.rb +22 -0
  100. data/lib/fluent/plugin/file_wrapper.rb +120 -0
  101. data/lib/fluent/plugin/filter.rb +93 -0
  102. data/lib/fluent/plugin/filter_grep.rb +75 -0
  103. data/lib/fluent/plugin/filter_record_transformer.rb +342 -0
  104. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  105. data/lib/fluent/plugin/formatter.rb +45 -0
  106. data/lib/fluent/plugin/formatter_csv.rb +47 -0
  107. data/lib/fluent/plugin/formatter_hash.rb +29 -0
  108. data/lib/fluent/plugin/formatter_json.rb +44 -0
  109. data/lib/fluent/plugin/formatter_ltsv.rb +41 -0
  110. data/lib/fluent/plugin/formatter_msgpack.rb +29 -0
  111. data/lib/fluent/plugin/formatter_out_file.rb +78 -0
  112. data/lib/fluent/plugin/formatter_single_value.rb +34 -0
  113. data/lib/fluent/plugin/formatter_stdout.rb +74 -0
  114. data/lib/fluent/plugin/in_debug_agent.rb +64 -0
  115. data/lib/fluent/plugin/in_dummy.rb +135 -0
  116. data/lib/fluent/plugin/in_exec.rb +149 -0
  117. data/lib/fluent/plugin/in_forward.rb +366 -0
  118. data/lib/fluent/plugin/in_gc_stat.rb +52 -0
  119. data/lib/fluent/plugin/in_http.rb +422 -0
  120. data/lib/fluent/plugin/in_monitor_agent.rb +401 -0
  121. data/lib/fluent/plugin/in_object_space.rb +90 -0
  122. data/lib/fluent/plugin/in_syslog.rb +204 -0
  123. data/lib/fluent/plugin/in_tail.rb +838 -0
  124. data/lib/fluent/plugin/in_tcp.rb +41 -0
  125. data/lib/fluent/plugin/in_udp.rb +37 -0
  126. data/lib/fluent/plugin/in_unix.rb +201 -0
  127. data/lib/fluent/plugin/input.rb +33 -0
  128. data/lib/fluent/plugin/multi_output.rb +95 -0
  129. data/lib/fluent/plugin/out_buffered_null.rb +59 -0
  130. data/lib/fluent/plugin/out_buffered_stdout.rb +70 -0
  131. data/lib/fluent/plugin/out_copy.rb +42 -0
  132. data/lib/fluent/plugin/out_exec.rb +114 -0
  133. data/lib/fluent/plugin/out_exec_filter.rb +393 -0
  134. data/lib/fluent/plugin/out_file.rb +167 -0
  135. data/lib/fluent/plugin/out_forward.rb +646 -0
  136. data/lib/fluent/plugin/out_null.rb +27 -0
  137. data/lib/fluent/plugin/out_relabel.rb +28 -0
  138. data/lib/fluent/plugin/out_roundrobin.rb +80 -0
  139. data/lib/fluent/plugin/out_stdout.rb +48 -0
  140. data/lib/fluent/plugin/out_stream.rb +130 -0
  141. data/lib/fluent/plugin/output.rb +1020 -0
  142. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  143. data/lib/fluent/plugin/parser.rb +175 -0
  144. data/lib/fluent/plugin/parser_apache.rb +28 -0
  145. data/lib/fluent/plugin/parser_apache2.rb +84 -0
  146. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  147. data/lib/fluent/plugin/parser_csv.rb +33 -0
  148. data/lib/fluent/plugin/parser_json.rb +79 -0
  149. data/lib/fluent/plugin/parser_ltsv.rb +50 -0
  150. data/lib/fluent/plugin/parser_multiline.rb +104 -0
  151. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  152. data/lib/fluent/plugin/parser_none.rb +36 -0
  153. data/lib/fluent/plugin/parser_regexp.rb +73 -0
  154. data/lib/fluent/plugin/parser_syslog.rb +82 -0
  155. data/lib/fluent/plugin/parser_tsv.rb +37 -0
  156. data/lib/fluent/plugin/socket_util.rb +22 -0
  157. data/lib/fluent/plugin/storage.rb +84 -0
  158. data/lib/fluent/plugin/storage_local.rb +132 -0
  159. data/lib/fluent/plugin/string_util.rb +22 -0
  160. data/lib/fluent/plugin_helper.rb +42 -0
  161. data/lib/fluent/plugin_helper/child_process.rb +298 -0
  162. data/lib/fluent/plugin_helper/compat_parameters.rb +224 -0
  163. data/lib/fluent/plugin_helper/event_emitter.rb +80 -0
  164. data/lib/fluent/plugin_helper/event_loop.rb +118 -0
  165. data/lib/fluent/plugin_helper/formatter.rb +149 -0
  166. data/lib/fluent/plugin_helper/inject.rb +125 -0
  167. data/lib/fluent/plugin_helper/parser.rb +147 -0
  168. data/lib/fluent/plugin_helper/retry_state.rb +177 -0
  169. data/lib/fluent/plugin_helper/storage.rb +331 -0
  170. data/lib/fluent/plugin_helper/thread.rb +147 -0
  171. data/lib/fluent/plugin_helper/timer.rb +90 -0
  172. data/lib/fluent/plugin_id.rb +63 -0
  173. data/lib/fluent/process.rb +504 -0
  174. data/lib/fluent/registry.rb +99 -0
  175. data/lib/fluent/root_agent.rb +314 -0
  176. data/lib/fluent/rpc.rb +94 -0
  177. data/lib/fluent/supervisor.rb +680 -0
  178. data/lib/fluent/system_config.rb +122 -0
  179. data/lib/fluent/test.rb +56 -0
  180. data/lib/fluent/test/base.rb +85 -0
  181. data/lib/fluent/test/driver/base.rb +179 -0
  182. data/lib/fluent/test/driver/base_owned.rb +70 -0
  183. data/lib/fluent/test/driver/base_owner.rb +125 -0
  184. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  185. data/lib/fluent/test/driver/filter.rb +57 -0
  186. data/lib/fluent/test/driver/formatter.rb +30 -0
  187. data/lib/fluent/test/driver/input.rb +31 -0
  188. data/lib/fluent/test/driver/multi_output.rb +52 -0
  189. data/lib/fluent/test/driver/output.rb +76 -0
  190. data/lib/fluent/test/driver/parser.rb +30 -0
  191. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  192. data/lib/fluent/test/filter_test.rb +77 -0
  193. data/lib/fluent/test/formatter_test.rb +65 -0
  194. data/lib/fluent/test/helpers.rb +79 -0
  195. data/lib/fluent/test/input_test.rb +172 -0
  196. data/lib/fluent/test/log.rb +73 -0
  197. data/lib/fluent/test/output_test.rb +156 -0
  198. data/lib/fluent/test/parser_test.rb +70 -0
  199. data/lib/fluent/time.rb +175 -0
  200. data/lib/fluent/timezone.rb +133 -0
  201. data/lib/fluent/unique_id.rb +39 -0
  202. data/lib/fluent/version.rb +21 -0
  203. data/lib/fluent/winsvc.rb +71 -0
  204. data/test/compat/test_calls_super.rb +166 -0
  205. data/test/compat/test_parser.rb +82 -0
  206. data/test/config/assertions.rb +42 -0
  207. data/test/config/test_config_parser.rb +507 -0
  208. data/test/config/test_configurable.rb +1194 -0
  209. data/test/config/test_configure_proxy.rb +386 -0
  210. data/test/config/test_dsl.rb +415 -0
  211. data/test/config/test_element.rb +403 -0
  212. data/test/config/test_literal_parser.rb +297 -0
  213. data/test/config/test_section.rb +184 -0
  214. data/test/config/test_system_config.rb +120 -0
  215. data/test/config/test_types.rb +171 -0
  216. data/test/helper.rb +119 -0
  217. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  218. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  219. data/test/plugin/data/2010/01/20100102.log +0 -0
  220. data/test/plugin/data/log/bar +0 -0
  221. data/test/plugin/data/log/foo/bar.log +0 -0
  222. data/test/plugin/data/log/test.log +0 -0
  223. data/test/plugin/test_bare_output.rb +118 -0
  224. data/test/plugin/test_base.rb +75 -0
  225. data/test/plugin/test_buf_file.rb +571 -0
  226. data/test/plugin/test_buf_memory.rb +42 -0
  227. data/test/plugin/test_buffer.rb +1200 -0
  228. data/test/plugin/test_buffer_chunk.rb +168 -0
  229. data/test/plugin/test_buffer_file_chunk.rb +771 -0
  230. data/test/plugin/test_buffer_memory_chunk.rb +265 -0
  231. data/test/plugin/test_file_util.rb +96 -0
  232. data/test/plugin/test_filter.rb +353 -0
  233. data/test/plugin/test_filter_grep.rb +119 -0
  234. data/test/plugin/test_filter_record_transformer.rb +600 -0
  235. data/test/plugin/test_filter_stdout.rb +211 -0
  236. data/test/plugin/test_formatter_csv.rb +94 -0
  237. data/test/plugin/test_formatter_json.rb +30 -0
  238. data/test/plugin/test_formatter_ltsv.rb +52 -0
  239. data/test/plugin/test_formatter_msgpack.rb +28 -0
  240. data/test/plugin/test_formatter_out_file.rb +95 -0
  241. data/test/plugin/test_formatter_single_value.rb +38 -0
  242. data/test/plugin/test_in_debug_agent.rb +28 -0
  243. data/test/plugin/test_in_dummy.rb +188 -0
  244. data/test/plugin/test_in_exec.rb +133 -0
  245. data/test/plugin/test_in_forward.rb +635 -0
  246. data/test/plugin/test_in_gc_stat.rb +39 -0
  247. data/test/plugin/test_in_http.rb +442 -0
  248. data/test/plugin/test_in_monitor_agent.rb +329 -0
  249. data/test/plugin/test_in_object_space.rb +64 -0
  250. data/test/plugin/test_in_syslog.rb +205 -0
  251. data/test/plugin/test_in_tail.rb +1001 -0
  252. data/test/plugin/test_in_tcp.rb +102 -0
  253. data/test/plugin/test_in_udp.rb +121 -0
  254. data/test/plugin/test_in_unix.rb +126 -0
  255. data/test/plugin/test_input.rb +122 -0
  256. data/test/plugin/test_multi_output.rb +180 -0
  257. data/test/plugin/test_out_buffered_null.rb +79 -0
  258. data/test/plugin/test_out_buffered_stdout.rb +122 -0
  259. data/test/plugin/test_out_copy.rb +160 -0
  260. data/test/plugin/test_out_exec.rb +155 -0
  261. data/test/plugin/test_out_exec_filter.rb +262 -0
  262. data/test/plugin/test_out_file.rb +383 -0
  263. data/test/plugin/test_out_forward.rb +590 -0
  264. data/test/plugin/test_out_null.rb +29 -0
  265. data/test/plugin/test_out_relabel.rb +28 -0
  266. data/test/plugin/test_out_roundrobin.rb +146 -0
  267. data/test/plugin/test_out_stdout.rb +92 -0
  268. data/test/plugin/test_out_stream.rb +93 -0
  269. data/test/plugin/test_output.rb +568 -0
  270. data/test/plugin/test_output_as_buffered.rb +1604 -0
  271. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  272. data/test/plugin/test_output_as_buffered_retries.rb +839 -0
  273. data/test/plugin/test_output_as_buffered_secondary.rb +817 -0
  274. data/test/plugin/test_output_as_standard.rb +374 -0
  275. data/test/plugin/test_owned_by.rb +35 -0
  276. data/test/plugin/test_parser_apache.rb +42 -0
  277. data/test/plugin/test_parser_apache2.rb +38 -0
  278. data/test/plugin/test_parser_apache_error.rb +45 -0
  279. data/test/plugin/test_parser_base.rb +32 -0
  280. data/test/plugin/test_parser_csv.rb +104 -0
  281. data/test/plugin/test_parser_json.rb +107 -0
  282. data/test/plugin/test_parser_labeled_tsv.rb +129 -0
  283. data/test/plugin/test_parser_multiline.rb +100 -0
  284. data/test/plugin/test_parser_nginx.rb +48 -0
  285. data/test/plugin/test_parser_none.rb +53 -0
  286. data/test/plugin/test_parser_regexp.rb +277 -0
  287. data/test/plugin/test_parser_syslog.rb +66 -0
  288. data/test/plugin/test_parser_time.rb +46 -0
  289. data/test/plugin/test_parser_tsv.rb +121 -0
  290. data/test/plugin/test_storage.rb +167 -0
  291. data/test/plugin/test_storage_local.rb +8 -0
  292. data/test/plugin/test_string_util.rb +26 -0
  293. data/test/plugin_helper/test_child_process.rb +608 -0
  294. data/test/plugin_helper/test_compat_parameters.rb +242 -0
  295. data/test/plugin_helper/test_event_emitter.rb +51 -0
  296. data/test/plugin_helper/test_event_loop.rb +52 -0
  297. data/test/plugin_helper/test_formatter.rb +252 -0
  298. data/test/plugin_helper/test_inject.rb +487 -0
  299. data/test/plugin_helper/test_parser.rb +263 -0
  300. data/test/plugin_helper/test_retry_state.rb +399 -0
  301. data/test/plugin_helper/test_storage.rb +521 -0
  302. data/test/plugin_helper/test_thread.rb +164 -0
  303. data/test/plugin_helper/test_timer.rb +131 -0
  304. data/test/scripts/exec_script.rb +32 -0
  305. data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
  306. data/test/scripts/fluent/plugin/out_test.rb +81 -0
  307. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  308. data/test/scripts/fluent/plugin/parser_known.rb +4 -0
  309. data/test/test_config.rb +179 -0
  310. data/test/test_configdsl.rb +148 -0
  311. data/test/test_event.rb +329 -0
  312. data/test/test_event_router.rb +331 -0
  313. data/test/test_event_time.rb +184 -0
  314. data/test/test_filter.rb +121 -0
  315. data/test/test_formatter.rb +319 -0
  316. data/test/test_input.rb +31 -0
  317. data/test/test_log.rb +572 -0
  318. data/test/test_match.rb +137 -0
  319. data/test/test_mixin.rb +351 -0
  320. data/test/test_output.rb +214 -0
  321. data/test/test_plugin_classes.rb +136 -0
  322. data/test/test_plugin_helper.rb +81 -0
  323. data/test/test_process.rb +48 -0
  324. data/test/test_root_agent.rb +278 -0
  325. data/test/test_supervisor.rb +339 -0
  326. data/test/test_time_formatter.rb +186 -0
  327. data/test/test_unique_id.rb +47 -0
  328. metadata +823 -0
@@ -0,0 +1,122 @@
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/configurable'
18
+ require 'fluent/config/element'
19
+
20
+ module Fluent
21
+ class SystemConfig
22
+ include Configurable
23
+
24
+ config_param :log_level, default: nil do |level|
25
+ Log.str_to_level(level)
26
+ end
27
+ config_param :suppress_repeated_stacktrace, :bool, default: nil
28
+ config_param :emit_error_log_interval, :time, default: nil
29
+ config_param :suppress_config_dump, :bool, default: nil
30
+ config_param :without_source, :bool, default: nil
31
+ config_param :rpc_endpoint, :string, default: nil
32
+ config_param :enable_get_dump, :bool, default: nil
33
+ config_param :process_name, default: nil
34
+ config_param :file_permission, default: nil do |v|
35
+ v.to_i(8)
36
+ end
37
+ config_param :dir_permission, default: nil do |v|
38
+ v.to_i(8)
39
+ end
40
+
41
+ def self.create(conf)
42
+ systems = conf.elements(name: 'system')
43
+ return SystemConfig.new if systems.empty?
44
+ raise Fluent::ConfigError, "<system> is duplicated. <system> should be only one" if systems.size > 1
45
+
46
+ SystemConfig.new(systems.first)
47
+ end
48
+
49
+ def self.blank_system_config
50
+ Fluent::Config::Element.new('<SYSTEM>', '', {}, [])
51
+ end
52
+
53
+ def self.overwrite_system_config(hash)
54
+ older = defined?($_system_config) ? $_system_config : nil
55
+ begin
56
+ $_system_config = SystemConfig.new(Fluent::Config::Element.new('system', '', hash, []))
57
+ yield
58
+ ensure
59
+ $_system_config = older
60
+ end
61
+ end
62
+
63
+ def initialize(conf=nil)
64
+ super()
65
+ conf ||= SystemConfig.blank_system_config
66
+ configure(conf)
67
+ end
68
+
69
+ def dup
70
+ s = SystemConfig.new
71
+ s.log_level = @log_level
72
+ s.suppress_repeated_stacktrace = @suppress_repeated_stacktrace
73
+ s.emit_error_log_interval = @emit_error_log_interval
74
+ s.suppress_config_dump = @suppress_config_dump
75
+ s.without_source = @without_source
76
+ s.rpc_endpoint = @rpc_endpoint
77
+ s.enable_get_dump = @enable_get_dump
78
+ s.process_name = @process_name
79
+ s.file_permission = @file_permission
80
+ s.dir_permission = @dir_permission
81
+
82
+ s
83
+ end
84
+
85
+ def apply(supervisor)
86
+ system = self
87
+ supervisor.instance_eval {
88
+ @log.level = @log_level = system.log_level unless system.log_level.nil?
89
+ @suppress_interval = system.emit_error_log_interval unless system.emit_error_log_interval.nil?
90
+ @suppress_config_dump = system.suppress_config_dump unless system.suppress_config_dump.nil?
91
+ @suppress_repeated_stacktrace = system.suppress_repeated_stacktrace unless system.suppress_repeated_stacktrace.nil?
92
+ @without_source = system.without_source unless system.without_source.nil?
93
+ @rpc_endpoint = system.rpc_endpoint unless system.rpc_endpoint.nil?
94
+ @enable_get_dump = system.enable_get_dump unless system.enable_get_dump.nil?
95
+ @process_name = system.process_name unless system.process_name.nil?
96
+ @file_permission = system.file_permission unless system.file_permission.nil?
97
+ @dir_permission = system.dir_permission unless system.dir_permission.nil?
98
+ }
99
+ end
100
+
101
+ module Mixin
102
+ def system_config
103
+ require 'fluent/engine'
104
+ unless defined?($_system_config)
105
+ $_system_config = nil
106
+ end
107
+ (instance_variable_defined?("@_system_config") && @_system_config) ||
108
+ $_system_config || Fluent::Engine.system_config
109
+ end
110
+
111
+ def system_config_override(opts={})
112
+ require 'fluent/engine'
113
+ if !instance_variable_defined?("@_system_config") || @_system_config.nil?
114
+ @_system_config = (defined?($_system_config) && $_system_config ? $_system_config : Fluent::Engine.system_config).dup
115
+ end
116
+ opts.each_pair do |key, value|
117
+ @_system_config.send(:"#{key.to_s}=", value)
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -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 'test/unit'
18
+ require 'fluent/env' # for Fluent.windows?
19
+ require 'fluent/test/log'
20
+ require 'fluent/test/base'
21
+ require 'fluent/test/input_test'
22
+ require 'fluent/test/output_test'
23
+ require 'fluent/test/filter_test'
24
+ require 'fluent/test/parser_test'
25
+ require 'fluent/test/formatter_test'
26
+ require 'serverengine'
27
+
28
+
29
+ module Fluent
30
+ module Test
31
+ def self.dummy_logger
32
+ dl_opts = {log_level: ServerEngine::DaemonLogger::INFO}
33
+ logdev = Fluent::Test::DummyLogDevice.new
34
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
35
+ Fluent::Log.new(logger)
36
+ end
37
+
38
+ def self.setup
39
+ $log = dummy_logger
40
+
41
+ Fluent.__send__(:remove_const, :Engine)
42
+ engine = Fluent.const_set(:Engine, EngineClass.new).init(SystemConfig.new)
43
+
44
+ engine.define_singleton_method(:now=) {|n|
45
+ @now = n
46
+ }
47
+ engine.define_singleton_method(:now) {
48
+ @now ||= super()
49
+ }
50
+
51
+ nil
52
+ end
53
+ end
54
+ end
55
+
56
+ $log ||= Fluent::Test.dummy_logger
@@ -0,0 +1,85 @@
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/engine'
19
+ require 'fluent/system_config'
20
+ require 'fluent/test/log'
21
+ require 'serverengine'
22
+
23
+ module Fluent
24
+ module Test
25
+ class TestDriver
26
+ include ::Test::Unit::Assertions
27
+
28
+ def initialize(klass, &block)
29
+ if klass.is_a?(Class)
30
+ if block
31
+ # Create new class for test w/ overwritten methods
32
+ # klass.dup is worse because its ancestors does NOT include original class name
33
+ klass_name = klass.name
34
+ klass = Class.new(klass)
35
+ klass.define_singleton_method("name") { klass_name }
36
+ klass.module_eval(&block)
37
+ end
38
+ @instance = klass.new
39
+ else
40
+ @instance = klass
41
+ end
42
+ @instance.router = Engine.root_agent.event_router
43
+ @instance.log = TestLogger.new
44
+ Engine.root_agent.instance_variable_set(:@log, @instance.log)
45
+
46
+ @config = Config.new
47
+ end
48
+
49
+ attr_reader :instance, :config
50
+
51
+ def configure(str, use_v1 = false)
52
+ if str.is_a?(Fluent::Config::Element)
53
+ @config = str
54
+ else
55
+ @config = Config.parse(str, "(test)", "(test_dir)", use_v1)
56
+ end
57
+ if label_name = @config['@label']
58
+ Engine.root_agent.add_label(label_name)
59
+ end
60
+ @instance.configure(@config)
61
+ self
62
+ end
63
+
64
+ # num_waits is for checking thread status. This will be removed after improved plugin API
65
+ def run(num_waits = 10, &block)
66
+ @instance.start
67
+ @instance.after_start
68
+ begin
69
+ # wait until thread starts
70
+ num_waits.times { sleep 0.05 }
71
+ return yield
72
+ ensure
73
+ @instance.shutdown
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ Test::Unit::Assertions.module_eval do
81
+ def assert_equal_event_time(a, b)
82
+ assert_equal(a.sec, b.sec)
83
+ assert_equal(a.nsec, b.nsec)
84
+ end
85
+ end
@@ -0,0 +1,179 @@
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/config/element'
19
+ require 'fluent/log'
20
+
21
+ require 'timeout'
22
+
23
+ module Fluent
24
+ module Test
25
+ module Driver
26
+ class Base
27
+ attr_reader :instance, :logs
28
+
29
+ def initialize(klass, opts: {}, &block)
30
+ if klass.is_a?(Class)
31
+ if block
32
+ # Create new class for test w/ overwritten methods
33
+ # klass.dup is worse because its ancestors does NOT include original class name
34
+ klass_name = klass.name
35
+ klass = Class.new(klass)
36
+ klass.define_singleton_method("name") { klass_name }
37
+ klass.module_eval(&block)
38
+ end
39
+ @instance = klass.new
40
+ else
41
+ @instance = klass
42
+ end
43
+
44
+ @logs = []
45
+
46
+ @run_post_conditions = []
47
+ @run_breaking_conditions = []
48
+ @broken = false
49
+ end
50
+
51
+ def configure(conf, syntax: :v1)
52
+ raise NotImplementedError
53
+ end
54
+
55
+ def end_if(&block)
56
+ raise ArgumentError, "block is not given" unless block_given?
57
+ @run_post_conditions << block
58
+ end
59
+
60
+ def break_if(&block)
61
+ raise ArgumentError, "block is not given" unless block_given?
62
+ @run_breaking_conditions << block
63
+ end
64
+
65
+ def broken?
66
+ @broken
67
+ end
68
+
69
+ def run(timeout: nil, start: true, shutdown: true, &block)
70
+ instance_start if start
71
+
72
+ if @instance.respond_to?(:thread_wait_until_start)
73
+ @instance.thread_wait_until_start
74
+ end
75
+ if @instance.respond_to?(:event_loop_wait_until_start)
76
+ @instance.event_loop_wait_until_start
77
+ end
78
+
79
+ begin
80
+ run_actual(timeout: timeout, &block)
81
+ ensure
82
+ instance_shutdown if shutdown
83
+ end
84
+ end
85
+
86
+ def instance_start
87
+ unless @instance.started?
88
+ @instance.start
89
+ instance_hook_after_started
90
+ end
91
+ unless @instance.after_started?
92
+ @instance.after_start
93
+ end
94
+ end
95
+
96
+ def instance_hook_after_started
97
+ # insert hooks for tests available after instance.start
98
+ end
99
+
100
+ def instance_shutdown
101
+ @instance.stop unless @instance.stopped?
102
+ @instance.before_shutdown unless @instance.before_shutdown?
103
+ @instance.shutdown unless @instance.shutdown?
104
+
105
+ if @instance.respond_to?(:event_loop_wait_until_stop)
106
+ @instance.event_loop_wait_until_stop
107
+ end
108
+
109
+ @instance.after_shutdown unless @instance.after_shutdown?
110
+ @instance.close unless @instance.closed?
111
+
112
+ if @instance.respond_to?(:thread_wait_until_stop)
113
+ @instance.thread_wait_until_stop
114
+ end
115
+
116
+ @instance.terminate unless @instance.terminated?
117
+ end
118
+
119
+ def run_actual(timeout: nil, &block)
120
+ if @instance.respond_to?(:_threads)
121
+ until @instance._threads.values.all?(&:alive?)
122
+ sleep 0.01
123
+ end
124
+ end
125
+
126
+ if @instance.respond_to?(:event_loop_running?)
127
+ until @instance.event_loop_running?
128
+ sleep 0.01
129
+ end
130
+ end
131
+
132
+ if timeout
133
+ stop_at = Time.now + timeout
134
+ @run_breaking_conditions << ->(){ Time.now >= stop_at }
135
+ end
136
+
137
+ if !block_given? && @run_post_conditions.empty? && @run_breaking_conditions.empty?
138
+ raise ArgumentError, "no stop conditions nor block specified"
139
+ end
140
+
141
+ proc = if block_given?
142
+ ->(){ block.call; sleep(0.1) until stop? }
143
+ else
144
+ ->(){ sleep(0.1) until stop? }
145
+ end
146
+
147
+ if timeout
148
+ begin
149
+ Timeout.timeout(timeout * 1.1) do |sec|
150
+ proc.call
151
+ end
152
+ rescue Timeout::Error
153
+ @broken = true
154
+ end
155
+ else
156
+ proc.call
157
+ end
158
+ end
159
+
160
+ def stop?
161
+ # Should stop running if post conditions are not registered.
162
+ return true unless @run_post_conditions
163
+
164
+ # Should stop running if all of the post conditions are true.
165
+ return true if @run_post_conditions.all? {|proc| proc.call }
166
+
167
+ # Should stop running if some of the breaking conditions is true.
168
+ # In this case, some post conditions may be not true.
169
+ if @run_breaking_conditions.any? {|proc| proc.call }
170
+ @broken = true
171
+ return true
172
+ end
173
+
174
+ false
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,70 @@
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/test/driver/base'
18
+
19
+ require 'fluent/plugin/base'
20
+ require 'fluent/plugin_id'
21
+ require 'fluent/log'
22
+ require 'fluent/plugin_helper'
23
+
24
+ module Fluent
25
+ module Test
26
+ module Driver
27
+ class OwnerDummy < Fluent::Plugin::Base
28
+ include PluginId
29
+ include PluginLoggerMixin
30
+ include PluginHelper::Mixin
31
+ end
32
+
33
+ class BaseOwned < Base
34
+ attr_accessor :section_name
35
+
36
+ def initialize(klass, opts: {}, &block)
37
+ super
38
+
39
+ owner = OwnerDummy.new
40
+ if opts
41
+ owner.system_config_override(opts)
42
+ end
43
+ owner.log = TestLogger.new
44
+
45
+ if @instance.respond_to?(:owner=)
46
+ @instance.owner = owner
47
+ if opts
48
+ @instance.system_config_override(opts)
49
+ end
50
+ end
51
+
52
+ @logs = owner.log.out.logs
53
+ @section_name = ''
54
+ end
55
+
56
+ def configure(conf, syntax: :v1)
57
+ if conf.is_a?(Fluent::Config::Element)
58
+ @config = conf
59
+ elsif conf.is_a?(Hash)
60
+ @config = Fluent::Config::Element.new(@section_name, "", Hash[conf.map{|k,v| [k.to_s, v]}], [])
61
+ else
62
+ @config = Fluent::Config.parse(conf, @section_name, "", syntax: syntax)
63
+ end
64
+ @instance.configure(@config)
65
+ self
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end