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,242 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin_helper/compat_parameters'
3
+ require 'fluent/plugin/base'
4
+
5
+ require 'time'
6
+
7
+ class CompatParameterTest < Test::Unit::TestCase
8
+ setup do
9
+ Fluent::Test.setup
10
+ @i = nil
11
+ end
12
+
13
+ teardown do
14
+ if @i
15
+ @i.stop unless @i.stopped?
16
+ @i.before_shutdown unless @i.before_shutdown?
17
+ @i.shutdown unless @i.shutdown?
18
+ @i.after_shutdown unless @i.after_shutdown?
19
+ @i.close unless @i.closed?
20
+ @i.terminate unless @i.terminated?
21
+ end
22
+ end
23
+
24
+ class DummyO0 < Fluent::Plugin::Output
25
+ helpers :compat_parameters
26
+ def configure(conf)
27
+ compat_parameters_buffer(conf, default_chunk_key: '')
28
+ super
29
+ end
30
+ def write(chunk); end # dummy
31
+ end
32
+ class DummyO1 < Fluent::Plugin::Output
33
+ helpers :compat_parameters
34
+ def configure(conf)
35
+ compat_parameters_buffer(conf, default_chunk_key: 'time')
36
+ super
37
+ end
38
+ def write(chunk); end # dummy
39
+ end
40
+ class DummyO2 < Fluent::Plugin::Output
41
+ helpers :compat_parameters
42
+ def configure(conf)
43
+ compat_parameters_buffer(conf, default_chunk_key: 'time')
44
+ super
45
+ end
46
+ def write(chunk); end # dummy
47
+ end
48
+ class DummyO3 < Fluent::Plugin::Output
49
+ helpers :compat_parameters
50
+ def configure(conf)
51
+ compat_parameters_buffer(conf, default_chunk_key: 'tag')
52
+ super
53
+ end
54
+ def write(chunk); end # dummy
55
+ end
56
+ class DummyO4 < Fluent::Plugin::Output
57
+ helpers :compat_parameters, :inject, :formatter
58
+ attr_reader :f
59
+ def configure(conf)
60
+ compat_parameters_convert(conf, :buffer, :inject, :formatter, default_chunk_key: 'tag')
61
+ super
62
+ end
63
+ def start
64
+ super
65
+ @f = formatter_create()
66
+ end
67
+ def write(chunk); end # dummy
68
+ end
69
+
70
+ sub_test_case 'output plugins which does not have default chunk key' do
71
+ test 'plugin helper converts parameters into plugin configuration parameters' do
72
+ hash = {
73
+ 'num_threads' => 8,
74
+ 'flush_interval' => '10s',
75
+ 'buffer_chunk_limit' => '8m',
76
+ 'buffer_queue_limit' => '1024',
77
+ 'flush_at_shutdown' => 'yes',
78
+ }
79
+ conf = config_element('ROOT', '', hash)
80
+ @i = DummyO0.new
81
+ @i.configure(conf)
82
+
83
+ assert_equal 'memory', @i.buffer_config[:@type]
84
+ assert_equal [], @i.buffer_config.chunk_keys
85
+ assert_equal 8, @i.buffer_config.flush_thread_count
86
+ assert_equal 10, @i.buffer_config.flush_interval
87
+ assert @i.buffer_config.flush_at_shutdown
88
+
89
+ assert_equal 8*1024*1024, @i.buffer.chunk_limit_size
90
+ assert_equal 1024, @i.buffer.queue_length_limit
91
+ end
92
+ end
93
+
94
+ sub_test_case 'output plugins which has default chunk key: time' do
95
+ test 'plugin helper converts parameters into plugin configuration parameters' do
96
+ hash = {
97
+ 'buffer_type' => 'file',
98
+ 'buffer_path' => '/tmp/mybuffer',
99
+ 'disable_retry_limit' => 'yes',
100
+ 'max_retry_wait' => '1h',
101
+ 'buffer_queue_full_action' => 'block',
102
+ }
103
+ conf = config_element('ROOT', '', hash)
104
+ @i = DummyO1.new
105
+ @i.configure(conf)
106
+
107
+ assert_equal 'file', @i.buffer_config[:@type]
108
+ assert_equal 24*60*60, @i.buffer_config.timekey
109
+ assert @i.buffer_config.retry_forever
110
+ assert_equal 60*60, @i.buffer_config.retry_max_interval
111
+ assert_equal :block, @i.buffer_config.overflow_action
112
+
113
+ assert !@i.chunk_key_tag
114
+ assert_equal [], @i.chunk_keys
115
+
116
+ assert_equal '/tmp/mybuffer/buffer.*.log', @i.buffer.path
117
+ end
118
+ end
119
+
120
+ sub_test_case 'output plugins which does not have default chunk key' do
121
+ test 'plugin helper converts parameters into plugin configuration parameters' do
122
+ hash = {
123
+ 'buffer_type' => 'file',
124
+ 'buffer_path' => '/tmp/mybuffer',
125
+ 'time_slice_format' => '%Y%m%d%H',
126
+ 'time_slice_wait' => '10',
127
+ 'retry_limit' => '1024',
128
+ 'buffer_queue_full_action' => 'drop_oldest_chunk',
129
+ }
130
+ conf = config_element('ROOT', '', hash)
131
+ @i = DummyO2.new
132
+ @i.configure(conf)
133
+
134
+ assert_equal 'file', @i.buffer_config[:@type]
135
+ assert_equal 60*60, @i.buffer_config.timekey
136
+ assert_equal 10, @i.buffer_config.timekey_wait
137
+ assert_equal 1024, @i.buffer_config.retry_max_times
138
+ assert_equal :drop_oldest_chunk, @i.buffer_config.overflow_action
139
+
140
+ assert @i.chunk_key_time
141
+ assert !@i.chunk_key_tag
142
+ assert_equal [], @i.chunk_keys
143
+
144
+ assert_equal '/tmp/mybuffer/buffer.*.log', @i.buffer.path
145
+ end
146
+ end
147
+
148
+ sub_test_case 'output plugins which has default chunk key: tag' do
149
+ test 'plugin helper converts parameters into plugin configuration parameters' do
150
+ hash = {
151
+ 'buffer_type' => 'memory',
152
+ 'num_threads' => '10',
153
+ 'flush_interval' => '10s',
154
+ 'try_flush_interval' => '0.1',
155
+ 'queued_chunk_flush_interval' => '0.5',
156
+ }
157
+ conf = config_element('ROOT', '', hash)
158
+ @i = DummyO3.new
159
+ @i.configure(conf)
160
+
161
+ assert_equal 'memory', @i.buffer_config[:@type]
162
+ assert_equal 10, @i.buffer_config.flush_thread_count
163
+ assert_equal 10, @i.buffer_config.flush_interval
164
+ assert_equal 0.1, @i.buffer_config.flush_thread_interval
165
+ assert_equal 0.5, @i.buffer_config.flush_thread_burst_interval
166
+
167
+ assert !@i.chunk_key_time
168
+ assert @i.chunk_key_tag
169
+ assert_equal [], @i.chunk_keys
170
+ end
171
+ end
172
+
173
+ sub_test_case 'output plugins which has default chunk key: tag, and enables inject and formatter' do
174
+ test 'plugin helper converts parameters into plugin configuration parameters for all of buffer, inject and formatter' do
175
+ hash = {
176
+ 'buffer_type' => 'file',
177
+ 'buffer_path' => File.expand_path('../../tmp/compat_parameters/mybuffer.*.log', __FILE__),
178
+ 'num_threads' => '10',
179
+ 'format' => 'ltsv',
180
+ 'delimiter' => ',',
181
+ 'label_delimiter' => '%',
182
+ 'include_time_key' => 'true', # default time_key 'time' and default time format (iso8601: 2016-06-24T15:57:38) at localtime
183
+ 'include_tag_key' => 'yes', # default tag_key 'tag'
184
+ }
185
+ conf = config_element('ROOT', '', hash)
186
+ @i = DummyO4.new
187
+ @i.configure(conf)
188
+ @i.start
189
+ @i.after_start
190
+
191
+ assert_equal 'file', @i.buffer_config[:@type]
192
+ assert_equal 10, @i.buffer_config.flush_thread_count
193
+ formatter = @i.f
194
+ assert{ formatter.is_a? Fluent::Plugin::LabeledTSVFormatter }
195
+ assert_equal ',', @i.f.delimiter
196
+ assert_equal '%', @i.f.label_delimiter
197
+
198
+ assert !@i.chunk_key_time
199
+ assert @i.chunk_key_tag
200
+ assert_equal [], @i.chunk_keys
201
+
202
+ t = event_time('2016-06-24 16:05:01') # localtime
203
+ iso8601str = Time.at(t.to_i).iso8601
204
+ formatted = @i.f.format('tag.test', t, @i.inject_values_to_record('tag.test', t, {"value" => 1}))
205
+ assert_equal "value%1,tag%tag.test,time%#{iso8601str}\n", formatted
206
+ end
207
+
208
+ test 'plugin helper setups time injecting as unix time (integer from epoch)' do
209
+ hash = {
210
+ 'buffer_type' => 'file',
211
+ 'buffer_path' => File.expand_path('../../tmp/compat_parameters/mybuffer.*.log', __FILE__),
212
+ 'num_threads' => '10',
213
+ 'format' => 'ltsv',
214
+ 'delimiter' => ',',
215
+ 'label_delimiter' => '%',
216
+ 'include_time_key' => 'true', # default time_key 'time' and default time format (iso8601: 2016-06-24T15:57:38) at localtime
217
+ 'include_tag_key' => 'yes', # default tag_key 'tag'
218
+ }
219
+ conf = config_element('ROOT', '', hash)
220
+ @i = DummyO4.new
221
+ @i.configure(conf)
222
+ @i.start
223
+ @i.after_start
224
+
225
+ assert_equal 'file', @i.buffer_config[:@type]
226
+ assert_equal 10, @i.buffer_config.flush_thread_count
227
+ formatter = @i.f
228
+ assert{ formatter.is_a? Fluent::Plugin::LabeledTSVFormatter }
229
+ assert_equal ',', @i.f.delimiter
230
+ assert_equal '%', @i.f.label_delimiter
231
+
232
+ assert !@i.chunk_key_time
233
+ assert @i.chunk_key_tag
234
+ assert_equal [], @i.chunk_keys
235
+
236
+ t = event_time('2016-06-24 16:05:01') # localtime
237
+ iso8601str = Time.at(t.to_i).iso8601
238
+ formatted = @i.f.format('tag.test', t, @i.inject_values_to_record('tag.test', t, {"value" => 1}))
239
+ assert_equal "value%1,tag%tag.test,time%#{iso8601str}\n", formatted
240
+ end
241
+ end
242
+ end
@@ -0,0 +1,51 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin_helper/event_emitter'
3
+ require 'fluent/plugin/base'
4
+
5
+ class EventEmitterTest < Test::Unit::TestCase
6
+ setup do
7
+ Fluent::Test.setup
8
+ end
9
+
10
+ class Dummy0 < Fluent::Plugin::TestBase
11
+ end
12
+
13
+ class Dummy < Fluent::Plugin::TestBase
14
+ helpers :event_emitter
15
+ end
16
+
17
+ test 'can be instantiated to be able to emit with router' do
18
+ d0 = Dummy0.new
19
+ assert d0.respond_to?(:has_router?)
20
+ assert !d0.has_router?
21
+ assert !d0.respond_to?(:router)
22
+
23
+ d1 = Dummy.new
24
+ assert d1.respond_to?(:has_router?)
25
+ assert d1.has_router?
26
+ assert d1.respond_to?(:router)
27
+ d1.stop; d1.shutdown; d1.close; d1.terminate
28
+ end
29
+
30
+ test 'can be configured with valid router' do
31
+ d1 = Dummy.new
32
+ assert d1.has_router?
33
+ assert_nil d1.router
34
+
35
+ assert_nothing_raised do
36
+ d1.configure(config_element())
37
+ end
38
+
39
+ assert d1.router
40
+
41
+ d1.shutdown
42
+
43
+ assert d1.router
44
+
45
+ d1.close
46
+
47
+ assert_nil d1.router
48
+
49
+ d1.terminate
50
+ end
51
+ end
@@ -0,0 +1,52 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin_helper/event_loop'
3
+ require 'fluent/plugin/base'
4
+
5
+ class EventLoopTest < Test::Unit::TestCase
6
+ class Dummy < Fluent::Plugin::TestBase
7
+ helpers :event_loop
8
+ def configure(conf)
9
+ super
10
+ @_event_loop_run_timeout = 0.1
11
+ end
12
+ end
13
+
14
+ test 'can be instantiated to be able to create event loop' do
15
+ d1 = Dummy.new
16
+ assert d1.respond_to?(:event_loop_attach)
17
+ assert d1.respond_to?(:event_loop_running?)
18
+ assert d1.respond_to?(:_event_loop)
19
+ assert d1._event_loop
20
+ assert !d1.event_loop_running?
21
+ end
22
+
23
+ test 'can be configured' do
24
+ d1 = Dummy.new
25
+ assert_nothing_raised do
26
+ d1.configure(config_element())
27
+ end
28
+ assert d1.plugin_id
29
+ assert d1.log
30
+ end
31
+
32
+ test 'can run event loop by start, stop by shutdown/close and clear by terminate' do
33
+ d1 = Dummy.new
34
+ d1.configure(config_element())
35
+ assert !d1.event_loop_running?
36
+
37
+ d1.start
38
+ d1.event_loop_wait_until_start
39
+
40
+ assert d1.event_loop_running?
41
+ assert_equal 1, d1._event_loop.watchers.size
42
+
43
+ d1.shutdown
44
+ d1.close
45
+
46
+ assert !d1.event_loop_running?
47
+
48
+ d1.terminate
49
+
50
+ assert_nil d1._event_loop
51
+ end
52
+ end
@@ -0,0 +1,252 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin_helper/formatter'
3
+ require 'fluent/plugin/base'
4
+
5
+ class FormatterHelperTest < Test::Unit::TestCase
6
+ class ExampleFormatter < Fluent::Plugin::Formatter
7
+ Fluent::Plugin.register_formatter('example', self)
8
+ def format(tag, time, record)
9
+ "#{tag},#{time.to_i},#{record.keys.sort.join(',')}" # hey, you miss values! :P
10
+ end
11
+ end
12
+ class Example2Formatter < Fluent::Plugin::Formatter
13
+ Fluent::Plugin.register_formatter('example2', self)
14
+ def format(tag, time, record)
15
+ "#{tag},#{time.to_i},#{record.values.sort.join(',')}" # key...
16
+ end
17
+ end
18
+ class Dummy < Fluent::Plugin::TestBase
19
+ helpers :formatter
20
+ end
21
+
22
+ class Dummy2 < Fluent::Plugin::TestBase
23
+ helpers :formatter
24
+ config_section :format do
25
+ config_set_default :@type, 'example2'
26
+ end
27
+ end
28
+
29
+ setup do
30
+ @d = nil
31
+ end
32
+
33
+ teardown do
34
+ if @d
35
+ @d.stop unless @d.stopped?
36
+ @d.shutdown unless @d.shutdown?
37
+ @d.close unless @d.closed?
38
+ @d.terminate unless @d.terminated?
39
+ end
40
+ end
41
+
42
+ test 'can be initialized without any formatters at first' do
43
+ d = Dummy.new
44
+ assert_equal 0, d._formatters.size
45
+ end
46
+
47
+ test 'can override default configuration parameters, but not overwrite whole definition' do
48
+ d = Dummy.new
49
+ assert_equal [], d.formatter_configs
50
+
51
+ d = Dummy2.new
52
+ d.configure(config_element('ROOT', '', {}, [config_element('format', '', {}, [])]))
53
+ assert_raise NoMethodError do
54
+ d.format
55
+ end
56
+ assert_equal 1, d.formatter_configs.size
57
+ assert_equal 'example2', d.formatter_configs.first[:@type]
58
+ end
59
+
60
+ test 'creates instance of type specified by conf, or default_type if @type is missing in conf' do
61
+ d = Dummy2.new
62
+ d.configure(config_element())
63
+ i = d.formatter_create(conf: config_element('format', '', {'@type' => 'example'}), default_type: 'example2')
64
+ assert{ i.is_a?(ExampleFormatter) }
65
+
66
+ d = Dummy2.new
67
+ d.configure(config_element())
68
+ i = d.formatter_create(conf: nil, default_type: 'example2')
69
+ assert{ i.is_a?(Example2Formatter) }
70
+ end
71
+
72
+ test 'raises config error if config section is specified, but @type is not specified' do
73
+ d = Dummy2.new
74
+ d.configure(config_element())
75
+ assert_raise Fluent::ConfigError.new("@type is required in <format>") do
76
+ d.formatter_create(conf: config_element('format', '', {}), default_type: 'example2')
77
+ end
78
+ end
79
+
80
+ test 'can be configured without format sections' do
81
+ d = Dummy.new
82
+ assert_nothing_raised do
83
+ d.configure(config_element())
84
+ end
85
+ assert_equal 0, d._formatters.size
86
+ end
87
+
88
+ test 'can be configured with a format section' do
89
+ d = Dummy.new
90
+ conf = config_element('ROOT', '', {}, [
91
+ config_element('format', '', {'@type' => 'example'})
92
+ ])
93
+ assert_nothing_raised do
94
+ d.configure(conf)
95
+ end
96
+ assert_equal 1, d._formatters.size
97
+ assert{ d._formatters.values.all?{ |formatter| !formatter.started? } }
98
+ end
99
+
100
+ test 'can be configured with 2 or more format sections with different usages with each other' do
101
+ d = Dummy.new
102
+ conf = config_element('ROOT', '', {}, [
103
+ config_element('format', 'default', {'@type' => 'example'}),
104
+ config_element('format', 'extra', {'@type' => 'example2'}),
105
+ ])
106
+ assert_nothing_raised do
107
+ d.configure(conf)
108
+ end
109
+ assert_equal 2, d._formatters.size
110
+ assert{ d._formatters.values.all?{ |formatter| !formatter.started? } }
111
+ end
112
+
113
+ test 'cannot be configured with 2 format sections with same usage' do
114
+ d = Dummy.new
115
+ conf = config_element('ROOT', '', {}, [
116
+ config_element('format', 'default', {'@type' => 'example'}),
117
+ config_element('format', 'extra', {'@type' => 'example2'}),
118
+ config_element('format', 'extra', {'@type' => 'example2'}),
119
+ ])
120
+ assert_raises Fluent::ConfigError do
121
+ d.configure(conf)
122
+ end
123
+ end
124
+
125
+ test 'creates a format plugin instance which is already configured without usage' do
126
+ @d = d = Dummy.new
127
+ conf = config_element('ROOT', '', {}, [
128
+ config_element('format', '', {'@type' => 'example'})
129
+ ])
130
+ d.configure(conf)
131
+ d.start
132
+
133
+ formatter = d.formatter_create
134
+ assert{ formatter.is_a? ExampleFormatter }
135
+ assert formatter.started?
136
+ end
137
+
138
+ test 'creates a formatter plugin instance which is already configured with usage' do
139
+ @d = d = Dummy.new
140
+ conf = config_element('ROOT', '', {}, [
141
+ config_element('format', 'mydata', {'@type' => 'example'})
142
+ ])
143
+ d.configure(conf)
144
+ d.start
145
+
146
+ formatter = d.formatter_create(usage: 'mydata')
147
+ assert{ formatter.is_a? ExampleFormatter }
148
+ assert formatter.started?
149
+ end
150
+
151
+ test 'creates a formatter plugin without configurations' do
152
+ @d = d = Dummy.new
153
+ d.configure(config_element())
154
+ d.start
155
+
156
+ formatter = d.formatter_create(usage: 'mydata', type: 'example', conf: config_element('format', 'mydata'))
157
+ assert{ formatter.is_a? ExampleFormatter }
158
+ assert formatter.started?
159
+ end
160
+
161
+ test 'creates 2 or more formatter plugin instances' do
162
+ @d = d = Dummy.new
163
+ conf = config_element('ROOT', '', {}, [
164
+ config_element('format', 'mydata', {'@type' => 'example'}),
165
+ config_element('format', 'secret', {'@type' => 'example2'})
166
+ ])
167
+ d.configure(conf)
168
+ d.start
169
+
170
+ p1 = d.formatter_create(usage: 'mydata')
171
+ p2 = d.formatter_create(usage: 'secret')
172
+ assert{ p1.is_a? ExampleFormatter }
173
+ assert p1.started?
174
+ assert{ p2.is_a? Example2Formatter }
175
+ assert p2.started?
176
+ end
177
+
178
+ test 'calls lifecycle methods for all plugin instances via owner plugin' do
179
+ @d = d = Dummy.new
180
+ conf = config_element('ROOT', '', {}, [ config_element('format', '', {'@type' => 'example'}), config_element('format', 'e2', {'@type' => 'example'}) ])
181
+ d.configure(conf)
182
+ d.start
183
+
184
+ i1 = d.formatter_create(usage: '')
185
+ i2 = d.formatter_create(usage: 'e2')
186
+ i3 = d.formatter_create(usage: 'e3', type: 'example2')
187
+
188
+ assert i1.started?
189
+ assert i2.started?
190
+ assert i3.started?
191
+
192
+ assert !i1.stopped?
193
+ assert !i2.stopped?
194
+ assert !i3.stopped?
195
+
196
+ d.stop
197
+
198
+ assert i1.stopped?
199
+ assert i2.stopped?
200
+ assert i3.stopped?
201
+
202
+ assert !i1.before_shutdown?
203
+ assert !i2.before_shutdown?
204
+ assert !i3.before_shutdown?
205
+
206
+ d.before_shutdown
207
+
208
+ assert i1.before_shutdown?
209
+ assert i2.before_shutdown?
210
+ assert i3.before_shutdown?
211
+
212
+ assert !i1.shutdown?
213
+ assert !i2.shutdown?
214
+ assert !i3.shutdown?
215
+
216
+ d.shutdown
217
+
218
+ assert i1.shutdown?
219
+ assert i2.shutdown?
220
+ assert i3.shutdown?
221
+
222
+ assert !i1.after_shutdown?
223
+ assert !i2.after_shutdown?
224
+ assert !i3.after_shutdown?
225
+
226
+ d.after_shutdown
227
+
228
+ assert i1.after_shutdown?
229
+ assert i2.after_shutdown?
230
+ assert i3.after_shutdown?
231
+
232
+ assert !i1.closed?
233
+ assert !i2.closed?
234
+ assert !i3.closed?
235
+
236
+ d.close
237
+
238
+ assert i1.closed?
239
+ assert i2.closed?
240
+ assert i3.closed?
241
+
242
+ assert !i1.terminated?
243
+ assert !i2.terminated?
244
+ assert !i3.terminated?
245
+
246
+ d.terminate
247
+
248
+ assert i1.terminated?
249
+ assert i2.terminated?
250
+ assert i3.terminated?
251
+ end
252
+ end