fluentd 0.14.4-x64-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,164 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin_helper/thread'
3
+ require 'fluent/plugin/base'
4
+ require 'timeout'
5
+
6
+ class ThreadTest < Test::Unit::TestCase
7
+ class Dummy < Fluent::Plugin::TestBase
8
+ helpers :thread
9
+ def configure(conf)
10
+ super
11
+ @_thread_wait_seconds = 0.1
12
+ self
13
+ end
14
+ end
15
+
16
+ test 'can be instantiated to be able to create threads' do
17
+ d1 = Dummy.new
18
+ assert d1.respond_to?(:thread_current_running?)
19
+ assert d1.respond_to?(:thread_create)
20
+ assert d1.respond_to?(:_threads)
21
+ assert !d1.thread_current_running?
22
+ assert d1._threads.empty?
23
+ end
24
+
25
+ test 'can be configured' do
26
+ d1 = Dummy.new
27
+ assert_nothing_raised do
28
+ d1.configure(config_element())
29
+ end
30
+ assert d1.plugin_id
31
+ assert d1.log
32
+ end
33
+
34
+ test 'can create thread after prepared' do
35
+ d1 = Dummy.new
36
+ d1.configure(config_element())
37
+ d1.start
38
+
39
+ m1 = Mutex.new
40
+ m2 = Mutex.new
41
+
42
+ m1.lock
43
+ thread_run = false
44
+
45
+ Timeout.timeout(10) do
46
+ t = d1.thread_create(:test1) do
47
+ m2.lock
48
+
49
+ assert !d1._threads.empty? # this must be true always
50
+ assert d1.thread_current_running?
51
+
52
+ thread_run = true
53
+ m2.unlock
54
+ m1.lock
55
+ end
56
+ Thread.pass until m2.locked? || thread_run
57
+
58
+ m2.lock; m2.unlock
59
+ assert_equal 1, d1._threads.size
60
+
61
+ assert_equal :test1, t[:_fluentd_plugin_helper_thread_title]
62
+ assert t[:_fluentd_plugin_helper_thread_running]
63
+ assert !d1._threads.empty?
64
+
65
+ m1.unlock
66
+
67
+ while t[:_fluentd_plugin_helper_thread_running]
68
+ Thread.pass
69
+ end
70
+ end
71
+
72
+ assert d1._threads.empty?
73
+
74
+ d1.stop; d1.shutdown; d1.close; d1.terminate
75
+ end
76
+
77
+ test 'can wait until all threads start' do
78
+ d1 = Dummy.new.configure(config_element()).start
79
+ ary = []
80
+ d1.thread_create(:t1) do
81
+ ary << 1
82
+ end
83
+ d1.thread_create(:t2) do
84
+ ary << 2
85
+ end
86
+ d1.thread_create(:t3) do
87
+ ary << 3
88
+ end
89
+ Timeout.timeout(10) do
90
+ d1.thread_wait_until_start
91
+ end
92
+ assert_equal [1,2,3], ary.sort
93
+
94
+ d1.stop; d1.shutdown; d1.close; d1.terminate
95
+ end
96
+
97
+ test 'can stop threads which is watching thread_current_running?, and then close it' do
98
+ d1 = Dummy.new.configure(config_element()).start
99
+
100
+ m1 = Mutex.new
101
+ thread_in_run = false
102
+ Timeout.timeout(10) do
103
+ t = d1.thread_create(:test2) do
104
+ thread_in_run = true
105
+ m1.lock
106
+ while d1.thread_current_running?
107
+ Thread.pass
108
+ end
109
+ thread_in_run = false
110
+ m1.unlock
111
+ end
112
+ Thread.pass until m1.locked?
113
+
114
+ assert thread_in_run
115
+ assert !d1._threads.empty?
116
+
117
+ d1.stop
118
+ Thread.pass while m1.locked?
119
+ assert !t[:_fluentd_plugin_helper_thread_running]
120
+ assert t.stop?
121
+ end
122
+
123
+ assert d1._threads.empty?
124
+
125
+ d1.stop; d1.shutdown; d1.close; d1.terminate
126
+ end
127
+
128
+ test 'can terminate threads forcedly which is running forever' do
129
+ d1 = Dummy.new.configure(config_element()).start
130
+
131
+ m1 = Mutex.new
132
+ thread_in_run = false
133
+ Timeout.timeout(10) do
134
+ t = d1.thread_create(:test2) do
135
+ thread_in_run = true
136
+ m1.lock
137
+ while true
138
+ Thread.pass
139
+ end
140
+ thread_in_run = false
141
+ end
142
+ Thread.pass until m1.locked?
143
+
144
+ assert thread_in_run
145
+ assert !d1._threads.empty?
146
+
147
+ d1.stop
148
+ assert !t[:_fluentd_plugin_helper_thread_running]
149
+ assert t.alive?
150
+
151
+ d1.shutdown
152
+ assert t.alive?
153
+ assert !d1._threads.empty?
154
+
155
+ d1.close
156
+ assert t.alive?
157
+ assert !d1._threads.empty?
158
+
159
+ d1.terminate
160
+ assert t.stop?
161
+ assert d1._threads.empty?
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,131 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin_helper/timer'
3
+ require 'fluent/plugin/base'
4
+
5
+ class TimerTest < Test::Unit::TestCase
6
+ class Dummy < Fluent::Plugin::TestBase
7
+ helpers :timer
8
+ end
9
+
10
+ test 'can be instantiated under state that timer is not running' do
11
+ d1 = Dummy.new
12
+ assert d1.respond_to?(:timer_running?)
13
+ assert !d1.timer_running?
14
+ end
15
+
16
+ test 'can be configured' do
17
+ d1 = Dummy.new
18
+ assert_nothing_raised do
19
+ d1.configure(config_element())
20
+ end
21
+ assert d1.plugin_id
22
+ assert d1.log
23
+ end
24
+
25
+ test 'can start timers by start' do
26
+ d1 = Dummy.new
27
+ d1.configure(config_element())
28
+ assert !d1.timer_running?
29
+ d1.start
30
+ assert d1.timer_running?
31
+
32
+ counter = 0
33
+ d1.timer_execute(:test, 1) do
34
+ counter += 1
35
+ end
36
+
37
+ sleep 5
38
+
39
+ d1.stop
40
+ assert !d1.timer_running?
41
+
42
+ assert{ counter >= 3 && counter <= 6 }
43
+
44
+ d1.shutdown; d1.close; d1.terminate
45
+ end
46
+
47
+ test 'can run many timers' do
48
+ d1 = Dummy.new
49
+ d1.configure(config_element())
50
+ d1.start
51
+
52
+ counter1 = 0
53
+ counter2 = 0
54
+
55
+ d1.timer_execute(:t1, 1) do
56
+ counter1 += 1
57
+ end
58
+ d1.timer_execute(:t2, 2) do
59
+ counter2 += 1
60
+ end
61
+
62
+ sleep 6
63
+
64
+ d1.stop
65
+
66
+ assert{ counter1 >= 4 && counter1 <= 7 }
67
+ assert{ counter2 >= 2 && counter2 <= 4 }
68
+
69
+ d1.shutdown; d1.close; d1.terminate
70
+ end
71
+
72
+ test 'aborts timer which raises exceptions' do
73
+ d1 = Dummy.new
74
+ d1.configure(config_element())
75
+ d1.start
76
+
77
+ counter1 = 0
78
+ counter2 = 0
79
+
80
+ d1.timer_execute(:t1, 1) do
81
+ counter1 += 1
82
+ end
83
+ d1.timer_execute(:t2, 1) do
84
+ raise "abort!!!!!!" if counter2 > 1
85
+ counter2 += 1
86
+ end
87
+
88
+ sleep 5
89
+
90
+ d1.stop
91
+
92
+ assert{ counter1 >= 3 && counter1 <= 6 }
93
+ assert{ counter2 == 2 }
94
+ msg = "Unexpected error raised. Stopping the timer. title=:t2"
95
+ assert{ d1.log.out.logs.any?{|line| line.include?("[error]:") && line.include?(msg) && line.include?("abort!!!!!!") } }
96
+ assert{ d1.log.out.logs.any?{|line| line.include?("[error]:") && line.include?("Timer detached. title=:t2") } }
97
+
98
+ d1.shutdown; d1.close; d1.terminate
99
+ end
100
+
101
+ test 'can run at once' do
102
+ d1 = Dummy.new
103
+ d1.configure(config_element())
104
+ assert !d1.timer_running?
105
+ d1.start
106
+ assert d1.timer_running?
107
+
108
+ waiting_assertion = true
109
+ waiting_timer = true
110
+ counter = 0
111
+ d1.timer_execute(:test, 1, repeat: false) do
112
+ sleep(0.1) while waiting_assertion
113
+ counter += 1
114
+ waiting_timer = false
115
+ end
116
+
117
+ watchers = d1._event_loop.watchers.reject {|w| w.is_a?(Fluent::PluginHelper::EventLoop::DefaultWatcher) }
118
+ assert_equal(1, watchers.size)
119
+ assert(watchers.first.attached?)
120
+
121
+ waiting_assertion = false
122
+ sleep(0.1) while waiting_timer
123
+
124
+ assert_equal(1, counter)
125
+ assert_false(watchers.first.attached?)
126
+ watchers = d1._event_loop.watchers.reject {|w| w.is_a?(Fluent::PluginHelper::EventLoop::DefaultWatcher) }
127
+ assert_equal(0, watchers.size)
128
+
129
+ d1.shutdown; d1.close; d1.terminate
130
+ end
131
+ end
@@ -0,0 +1,32 @@
1
+ require 'json'
2
+ require 'msgpack'
3
+
4
+ def gen_tsv(time)
5
+ "#{time}\ttag1\tok"
6
+ end
7
+
8
+ def gen_json(time)
9
+ {'tag' => 'tag1', 'time' => time, 'k1' => 'ok'}.to_json
10
+ end
11
+
12
+ def gen_msgpack(time)
13
+ {'tagger' => 'tag1', 'datetime' => time, 'k1' => 'ok'}.to_msgpack
14
+ end
15
+
16
+ def gen_raw_string(time)
17
+ "#{time} hello"
18
+ end
19
+
20
+ time = ARGV.first
21
+ time = Integer(time) rescue time
22
+
23
+ case ARGV.last.to_i
24
+ when 0
25
+ puts gen_tsv(time)
26
+ when 1
27
+ puts gen_json(time)
28
+ when 2
29
+ print gen_msgpack(time)
30
+ when 3
31
+ print gen_raw_string(time)
32
+ end
@@ -0,0 +1,8 @@
1
+ module Fluent
2
+ TextFormatter.register_template('known_old', Proc.new { |tag, time, record|
3
+ "#{tag}:#{time}:#{record.size}"
4
+ })
5
+ Plugin.register_formatter('known', Proc.new { |tag, time, record|
6
+ "#{tag}:#{time}:#{record.size}"
7
+ })
8
+ end
@@ -0,0 +1,81 @@
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/plugin/output'
18
+ require 'fluent/event'
19
+
20
+ module Fluent::Plugin
21
+ class TestOutput < Output
22
+ Fluent::Plugin.register_output('test', self)
23
+
24
+ config_param :name, :string
25
+
26
+ config_section :buffer do
27
+ config_set_default :chunk_keys, ['tag']
28
+ end
29
+
30
+ def initialize
31
+ super
32
+ @emit_streams = []
33
+ end
34
+
35
+ attr_reader :emit_streams
36
+
37
+ def emits
38
+ all = []
39
+ @emit_streams.each {|tag,events|
40
+ events.each {|time,record|
41
+ all << [tag, time, record]
42
+ }
43
+ }
44
+ all
45
+ end
46
+
47
+ def events
48
+ all = []
49
+ @emit_streams.each {|tag,events|
50
+ all.concat events
51
+ }
52
+ all
53
+ end
54
+
55
+ def records
56
+ all = []
57
+ @emit_streams.each {|tag,events|
58
+ events.each {|time,record|
59
+ all << record
60
+ }
61
+ }
62
+ all
63
+ end
64
+
65
+ def prefer_buffered_processing
66
+ false
67
+ end
68
+
69
+ def process(tag, es)
70
+ @emit_streams << [tag, es.to_a]
71
+ end
72
+
73
+ def write(chunk)
74
+ es = Fluent::ArrayEventStream.new
75
+ chunk.each do |time, record|
76
+ es.add(time, record)
77
+ end
78
+ @emit_streams << [tag, es]
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,80 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Fluent::Plugin
18
+ class Test2Output < Output
19
+ Fluent::Plugin.register_output('test2', self)
20
+
21
+ helpers :event_emitter
22
+
23
+ config_param :name, :string
24
+
25
+ config_section :buffer do
26
+ config_set_default :chunk_keys, ['tag']
27
+ end
28
+
29
+ def initialize
30
+ super
31
+ @emit_streams = []
32
+ end
33
+
34
+ attr_reader :emit_streams
35
+
36
+ def emits
37
+ all = []
38
+ @emit_streams.each {|tag,events|
39
+ events.each {|time,record|
40
+ all << [tag, time, record]
41
+ }
42
+ }
43
+ all
44
+ end
45
+
46
+ def events
47
+ all = []
48
+ @emit_streams.each {|tag,events|
49
+ all.concat events
50
+ }
51
+ all
52
+ end
53
+
54
+ def records
55
+ all = []
56
+ @emit_streams.each {|tag,events|
57
+ events.each {|time,record|
58
+ all << record
59
+ }
60
+ }
61
+ all
62
+ end
63
+
64
+ def prefer_buffered_processing
65
+ false
66
+ end
67
+
68
+ def process(tag, es)
69
+ @emit_streams << [tag, es.to_a]
70
+ end
71
+
72
+ def write(chunk)
73
+ es = Fluent::ArrayEventStream.new
74
+ chunk.each do |time, record|
75
+ es.add(time, record)
76
+ end
77
+ @emit_streams << [tag, es]
78
+ end
79
+ end
80
+ end