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,273 @@
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 'optparse'
18
+
19
+ require 'fluent/supervisor'
20
+ require 'fluent/log'
21
+ require 'fluent/env'
22
+ require 'fluent/version'
23
+
24
+ $fluentdargv = Marshal.load(Marshal.dump(ARGV))
25
+
26
+ op = OptionParser.new
27
+ op.version = Fluent::VERSION
28
+
29
+ opts = Fluent::Supervisor.default_options
30
+
31
+ op.on('-s', "--setup [DIR=#{File.dirname(Fluent::DEFAULT_CONFIG_PATH)}]", "install sample configuration file to the directory") {|s|
32
+ opts[:setup_path] = s || File.dirname(Fluent::DEFAULT_CONFIG_PATH)
33
+ }
34
+
35
+ op.on('-c', '--config PATH', "config file path (default: #{Fluent::DEFAULT_CONFIG_PATH})") {|s|
36
+ opts[:config_path] = s
37
+ }
38
+
39
+ op.on('--dry-run', "Check fluentd setup is correct or not", TrueClass) {|b|
40
+ opts[:dry_run] = b
41
+ }
42
+
43
+ op.on('--show-plugin-config=PLUGIN', "Show PLUGIN configuration and exit(ex: input:dummy)") {|plugin|
44
+ opts[:show_plugin_config] = plugin
45
+ }
46
+
47
+ op.on('-p', '--plugin DIR', "add plugin directory") {|s|
48
+ opts[:plugin_dirs] << s
49
+ }
50
+
51
+ op.on('-I PATH', "add library path") {|s|
52
+ $LOAD_PATH << s
53
+ }
54
+
55
+ op.on('-r NAME', "load library") {|s|
56
+ opts[:libs] << s
57
+ }
58
+
59
+ op.on('-d', '--daemon PIDFILE', "daemonize fluent process") {|s|
60
+ opts[:daemonize] = s
61
+ }
62
+
63
+ op.on('--under-supervisor', "run fluent worker under supervisor (this option is NOT for users)") {
64
+ opts[:supervise] = false
65
+ }
66
+
67
+ op.on('--no-supervisor', "run fluent worker without supervisor") {
68
+ opts[:supervise] = false
69
+ opts[:standalone_worker] = true
70
+ }
71
+
72
+ op.on('--user USER', "change user") {|s|
73
+ opts[:chuser] = s
74
+ }
75
+
76
+ op.on('--group GROUP', "change group") {|s|
77
+ opts[:chgroup] = s
78
+ }
79
+
80
+ op.on('-o', '--log PATH', "log file path") {|s|
81
+ opts[:log_path] = s
82
+ }
83
+
84
+ op.on('-i', '--inline-config CONFIG_STRING', "inline config which is appended to the config file on-the-fly") {|s|
85
+ opts[:inline_config] = s
86
+ }
87
+
88
+ op.on('--emit-error-log-interval SECONDS', "suppress interval seconds of emit error logs") {|s|
89
+ opts[:suppress_interval] = s.to_i
90
+ }
91
+
92
+ op.on('--suppress-repeated-stacktrace [VALUE]', "suppress repeated stacktrace", TrueClass) {|b|
93
+ b = true if b.nil?
94
+ opts[:suppress_repeated_stacktrace] = b
95
+ }
96
+
97
+ op.on('--without-source', "invoke a fluentd without input plugins", TrueClass) {|b|
98
+ opts[:without_source] = b
99
+ }
100
+
101
+ op.on('--use-v1-config', "Use v1 configuration format (default)", TrueClass) {|b|
102
+ opts[:use_v1_config] = b
103
+ }
104
+
105
+ op.on('--use-v0-config', "Use v0 configuration format", TrueClass) {|b|
106
+ opts[:use_v1_config] = !b
107
+ }
108
+
109
+ op.on('-v', '--verbose', "increase verbose level (-v: debug, -vv: trace)", TrueClass) {|b|
110
+ if b
111
+ opts[:log_level] = [opts[:log_level] - 1, Fluent::Log::LEVEL_TRACE].max
112
+ end
113
+ }
114
+
115
+ op.on('-q', '--quiet', "decrease verbose level (-q: warn, -qq: error)", TrueClass) {|b|
116
+ if b
117
+ opts[:log_level] = [opts[:log_level] + 1, Fluent::Log::LEVEL_ERROR].min
118
+ end
119
+ }
120
+
121
+ op.on('--suppress-config-dump', "suppress config dumping when fluentd starts", TrueClass) {|b|
122
+ opts[:suppress_config_dump] = b
123
+ }
124
+
125
+ op.on('-g', '--gemfile GEMFILE', "Gemfile path") {|s|
126
+ opts[:gemfile] = s
127
+ }
128
+
129
+ op.on('-G', '--gem-path GEM_INSTALL_PATH', "Gemfile install path (default: $(dirname $gemfile)/vendor/bundle)") {|s|
130
+ opts[:gem_install_path] = s
131
+ }
132
+
133
+ if Fluent.windows?
134
+ require 'windows/library'
135
+ include Windows::Library
136
+
137
+ op.on('-x', '--signame INTSIGNAME', "an object name which is used for Windows Service signal (Windows only)") {|s|
138
+ opts[:signame] = s
139
+ }
140
+
141
+ op.on('--reg-winsvc MODE', "install/uninstall as Windows Service. (i: install, u: uninstall) (Windows only)") {|s|
142
+ opts[:regwinsvc] = s
143
+ }
144
+
145
+ op.on('--[no-]reg-winsvc-auto-start', "Automatically start the Windows Service at boot. (only effective with '--reg-winsvc i') (Windows only)") {|s|
146
+ opts[:regwinsvcautostart] = s
147
+ }
148
+
149
+ op.on('--reg-winsvc-fluentdopt OPTION', "specify fluentd option paramters for Windows Service. (Windows only)") {|s|
150
+ opts[:fluentdopt] = s
151
+ }
152
+ end
153
+
154
+
155
+ (class << self; self; end).module_eval do
156
+ define_method(:usage) do |msg|
157
+ puts op.to_s
158
+ puts "error: #{msg}" if msg
159
+ exit 1
160
+ end
161
+ end
162
+
163
+ begin
164
+ rest = op.parse(ARGV)
165
+
166
+ if rest.length != 0
167
+ usage nil
168
+ end
169
+ rescue
170
+ usage $!.to_s
171
+ end
172
+
173
+
174
+ ##
175
+ ## Bundler injection
176
+ #
177
+ if ENV['FLUENTD_DISABLE_BUNDLER_INJECTION'] != '1' && gemfile = opts[:gemfile]
178
+ ENV['BUNDLE_GEMFILE'] = gemfile
179
+ if path = opts[:gem_install_path]
180
+ ENV['BUNDLE_PATH'] = path
181
+ else
182
+ ENV['BUNDLE_PATH'] = File.expand_path(File.join(File.dirname(gemfile), 'vendor/bundle'))
183
+ end
184
+ ENV['FLUENTD_DISABLE_BUNDLER_INJECTION'] = '1'
185
+ load File.expand_path(File.join(File.dirname(__FILE__), 'bundler_injection.rb'))
186
+ end
187
+
188
+ if setup_path = opts[:setup_path]
189
+ require 'fileutils'
190
+ FileUtils.mkdir_p File.join(setup_path, "plugin")
191
+ confpath = File.join(setup_path, "fluent.conf")
192
+ if File.exist?(confpath)
193
+ puts "#{confpath} already exists."
194
+ else
195
+ File.open(confpath, "w") {|f|
196
+ conf = File.read File.join(File.dirname(__FILE__), "..", "..", "..", "fluent.conf")
197
+ f.write conf
198
+ }
199
+ puts "Installed #{confpath}."
200
+ end
201
+ exit 0
202
+ end
203
+
204
+ early_exit = false
205
+ start_service = false
206
+ if winsvcinstmode = opts[:regwinsvc]
207
+ FLUENTD_WINSVC_NAME="fluentdwinsvc"
208
+ FLUENTD_WINSVC_DISPLAYNAME="Fluentd Windows Service"
209
+ FLUENTD_WINSVC_DESC="Fluentd is an event collector system."
210
+ require 'fileutils'
211
+ require "win32/service"
212
+ require "win32/registry"
213
+ include Win32
214
+
215
+ case winsvcinstmode
216
+ when 'i'
217
+ binary_path = File.join(File.dirname(__FILE__), "..")
218
+ ruby_path = "\0" * 256
219
+ GetModuleFileName.call(0,ruby_path,256)
220
+ ruby_path = ruby_path.rstrip.gsub(/\\/, '/')
221
+ start_type = Service::DEMAND_START
222
+ if opts[:regwinsvcautostart]
223
+ start_type = Service::AUTO_START
224
+ start_service = true
225
+ end
226
+
227
+ Service.create(
228
+ service_name: FLUENTD_WINSVC_NAME,
229
+ host: nil,
230
+ service_type: Service::WIN32_OWN_PROCESS,
231
+ description: FLUENTD_WINSVC_DESC,
232
+ start_type: start_type,
233
+ error_control: Service::ERROR_NORMAL,
234
+ binary_path_name: ruby_path+" -C "+binary_path+" winsvc.rb",
235
+ load_order_group: "",
236
+ dependencies: [""],
237
+ display_name: FLUENTD_WINSVC_DISPLAYNAME
238
+ )
239
+ when 'u'
240
+ if Service.status(FLUENTD_WINSVC_NAME).current_state != 'stopped'
241
+ begin
242
+ Service.stop(FLUENTD_WINSVC_NAME)
243
+ rescue => ex
244
+ puts "Warning: Failed to stop service: ", ex
245
+ end
246
+ end
247
+ Service.delete(FLUENTD_WINSVC_NAME)
248
+ else
249
+ # none
250
+ end
251
+ early_exit = true
252
+ end
253
+
254
+ if fluentdopt = opts[:fluentdopt]
255
+ Win32::Registry::HKEY_LOCAL_MACHINE.open("SYSTEM\\CurrentControlSet\\Services\\fluentdwinsvc", Win32::Registry::KEY_ALL_ACCESS) do |reg|
256
+ reg['fluentdopt', Win32::Registry::REG_SZ] = fluentdopt
257
+ end
258
+ early_exit = true
259
+ end
260
+
261
+ if start_service
262
+ Service.start(FLUENTD_WINSVC_NAME)
263
+ end
264
+
265
+ exit 0 if early_exit
266
+
267
+ require 'fluent/supervisor'
268
+ if opts[:supervise]
269
+ Fluent::Supervisor.new(opts).run_supervisor
270
+ else
271
+ Fluent::Supervisor.new(opts).run_worker
272
+ end
273
+
@@ -0,0 +1,67 @@
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
18
+ module Compat
19
+ module CallSuperMixin
20
+ # This mixin is to prepend to 3rd party plugins of v0.12 APIs.
21
+ # In past, there were not strong rule to call super in #start, #before_shutdown and #shutdown.
22
+ # But v0.14 API requires to call super in these methods to setup/teardown plugin helpers and others.
23
+ # This mixin prepends method calls to call super forcedly if checker returns false (it shows Fluent::Plugin::Base#methods wasn't called)
24
+
25
+ def self.prepended(klass)
26
+ @@_super_start ||= {}
27
+ @@_super_before_shutdown ||= {}
28
+ @@_super_shutdown ||= {}
29
+
30
+ # ancestors[0]: this module
31
+ # ancestors[1]: prepended class (plugin itself)
32
+ method_search = ->(ancestors, method){
33
+ closest = ancestors[2, ancestors.size - 2].index{|m| m.method_defined?(method) }
34
+ ancestors[2 + closest].instance_method(method)
35
+ }
36
+ @@_super_start[klass] = method_search.call(klass.ancestors, :start) # this returns Fluent::Compat::*#start (or helpers on it)
37
+ @@_super_before_shutdown[klass] = method_search.call(klass.ancestors, :before_shutdown)
38
+ @@_super_shutdown[klass] = method_search.call(klass.ancestors, :shutdown)
39
+ end
40
+
41
+ def start
42
+ super
43
+ unless self.started?
44
+ @@_super_start[self.class].bind(self).call
45
+ # #super will reset logdev (especially in test), so this warn should be after calling it
46
+ log.warn "super was not called in #start: called it forcedly", plugin: self.class
47
+ end
48
+ end
49
+
50
+ def before_shutdown
51
+ super
52
+ unless self.before_shutdown?
53
+ log.warn "super was not called in #before_shutdown: calling it forcedly", plugin: self.class
54
+ @@_super_before_shutdown[self.class].bind(self).call
55
+ end
56
+ end
57
+
58
+ def shutdown
59
+ super
60
+ unless self.shutdown?
61
+ log.warn "super was not called in #shutdown: calling it forcedly", plugin: self.class
62
+ @@_super_shutdown[self.class].bind(self).call
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,129 @@
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 'msgpack'
18
+ require 'yajl'
19
+
20
+ require 'fluent/engine'
21
+ require 'fluent/plugin'
22
+ require 'fluent/parser'
23
+
24
+ module Fluent
25
+ module Compat
26
+ module ExecUtil
27
+ SUPPORTED_FORMAT = {
28
+ 'tsv' => :tsv,
29
+ 'json' => :json,
30
+ 'msgpack' => :msgpack,
31
+ }
32
+
33
+ class Parser
34
+ def initialize(on_message)
35
+ @on_message = on_message
36
+ end
37
+ end
38
+
39
+ class TextParserWrapperParser < Parser
40
+ def initialize(conf, on_message)
41
+ @parser = Plugin.new_parser(conf['format'])
42
+ @parser.configure(conf)
43
+ super(on_message)
44
+ end
45
+
46
+ def call(io)
47
+ io.each_line(&method(:each_line))
48
+ end
49
+
50
+ def each_line(line)
51
+ line.chomp!
52
+ @parser.parse(line) { |time, record|
53
+ @on_message.call(record, time)
54
+ }
55
+ end
56
+ end
57
+
58
+ class TSVParser < Parser
59
+ def initialize(keys, on_message)
60
+ @keys = keys
61
+ super(on_message)
62
+ end
63
+
64
+ def call(io)
65
+ io.each_line(&method(:each_line))
66
+ end
67
+
68
+ def each_line(line)
69
+ line.chomp!
70
+ vals = line.split("\t")
71
+
72
+ record = Hash[@keys.zip(vals)]
73
+
74
+ @on_message.call(record)
75
+ end
76
+ end
77
+
78
+ class JSONParser < Parser
79
+ def call(io)
80
+ y = Yajl::Parser.new
81
+ y.on_parse_complete = @on_message
82
+ y.parse(io)
83
+ end
84
+ end
85
+
86
+ class MessagePackParser < Parser
87
+ def call(io)
88
+ @u = Fluent::Engine.msgpack_factory.unpacker(io)
89
+ begin
90
+ @u.each(&@on_message)
91
+ rescue EOFError
92
+ end
93
+ end
94
+ end
95
+
96
+ class Formatter
97
+ end
98
+
99
+ class TSVFormatter < Formatter
100
+ def initialize(in_keys)
101
+ @in_keys = in_keys
102
+ super()
103
+ end
104
+
105
+ def call(record, out)
106
+ last = @in_keys.length-1
107
+ for i in 0..last
108
+ key = @in_keys[i]
109
+ out << record[key].to_s
110
+ out << "\t" if i != last
111
+ end
112
+ out << "\n"
113
+ end
114
+ end
115
+
116
+ class JSONFormatter < Formatter
117
+ def call(record, out)
118
+ out << Yajl.dump(record) << "\n"
119
+ end
120
+ end
121
+
122
+ class MessagePackFormatter < Formatter
123
+ def call(record, out)
124
+ record.to_msgpack(out)
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end