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,54 @@
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 FileUtil
20
+ # Check file is writable if file exists
21
+ # Check directory is writable if file does not exist
22
+ #
23
+ # @param [String] path File path
24
+ # @return [Boolean] file is writable or not
25
+ def writable?(path)
26
+ return false if File.directory?(path)
27
+ return File.writable?(path) if File.exist?(path)
28
+
29
+ dirname = File.dirname(path)
30
+ return false if !File.directory?(dirname)
31
+ File.writable?(dirname)
32
+ end
33
+ module_function :writable?
34
+
35
+ # Check file is writable in conjunction wtih mkdir_p(dirname(path))
36
+ #
37
+ # @param [String] path File path
38
+ # @return [Boolean] file writable or not
39
+ def writable_p?(path)
40
+ return false if File.directory?(path)
41
+ return File.writable?(path) if File.exist?(path)
42
+
43
+ dirname = File.dirname(path)
44
+ until File.exist?(dirname)
45
+ dirname = File.dirname(dirname)
46
+ end
47
+
48
+ return false if !File.directory?(dirname)
49
+ File.writable?(dirname)
50
+ end
51
+ module_function :writable_p?
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,68 @@
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'
18
+ require 'fluent/plugin/filter'
19
+ require 'fluent/compat/call_super_mixin'
20
+ require 'fluent/compat/formatter_utils'
21
+ require 'fluent/compat/parser_utils'
22
+
23
+ module Fluent
24
+ module Compat
25
+ class Filter < Fluent::Plugin::Filter
26
+ # TODO: warn when deprecated
27
+
28
+ helpers :inject
29
+
30
+ def initialize
31
+ super
32
+ unless self.class.ancestors.include?(Fluent::Compat::CallSuperMixin)
33
+ self.class.prepend Fluent::Compat::CallSuperMixin
34
+ end
35
+ end
36
+
37
+ def configure(conf)
38
+ ParserUtils.convert_parser_conf(conf)
39
+ FormatterUtils.convert_formatter_conf(conf)
40
+
41
+ super
42
+ end
43
+
44
+ # These definitions are to get instance methods of superclass of 3rd party plugins
45
+ # to make it sure to call super
46
+ def start
47
+ super
48
+
49
+ if instance_variable_defined?(:@formatter) && @inject_config
50
+ unless @formatter.class.ancestors.include?(Fluent::Compat::HandleTagAndTimeMixin)
51
+ if @formatter.respond_to?(:owner) && !@formatter.owner
52
+ @formatter.owner = self
53
+ @formatter.singleton_class.prepend FormatterUtils::InjectMixin
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ def before_shutdown
60
+ super
61
+ end
62
+
63
+ def shutdown
64
+ super
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,111 @@
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'
18
+ require 'fluent/plugin/formatter'
19
+ require 'fluent/compat/handle_tag_and_time_mixin'
20
+ require 'fluent/compat/structured_format_mixin'
21
+
22
+ require 'fluent/plugin/formatter_out_file'
23
+ require 'fluent/plugin/formatter_stdout'
24
+ require 'fluent/plugin/formatter_json'
25
+ require 'fluent/plugin/formatter_hash'
26
+ require 'fluent/plugin/formatter_msgpack'
27
+ require 'fluent/plugin/formatter_ltsv'
28
+ require 'fluent/plugin/formatter_csv'
29
+ require 'fluent/plugin/formatter_single_value'
30
+
31
+ module Fluent
32
+ module Compat
33
+ class Formatter < Fluent::Plugin::Formatter
34
+ # TODO: warn when deprecated
35
+ end
36
+
37
+ module TextFormatter
38
+ def self.register_template(type, template)
39
+ # TODO: warn when deprecated to use Plugin.register_formatter directly
40
+ if template.is_a?(Class)
41
+ Fluent::Plugin.register_formatter(type, template)
42
+ elsif template.respond_to?(:call) && template.arity == 3 # Proc.new { |tag, time, record| }
43
+ Fluent::Plugin.register_formatter(type, Proc.new { ProcWrappedFormatter.new(template) })
44
+ elsif template.respond_to?(:call)
45
+ Fluent::Plugin.register_formatter(type, template)
46
+ else
47
+ raise ArgumentError, "Template for formatter must be a Class or callable object"
48
+ end
49
+ end
50
+
51
+ def self.lookup(type)
52
+ # TODO: warn when deprecated to use Plugin.new_formatter(type, parent: plugin)
53
+ Fluent::Plugin.new_formatter(type)
54
+ end
55
+
56
+ # Keep backward-compatibility
57
+ def self.create(conf)
58
+ # TODO: warn when deprecated
59
+ format = conf['format']
60
+ if format.nil?
61
+ raise ConfigError, "'format' parameter is required"
62
+ end
63
+
64
+ formatter = lookup(format)
65
+ if formatter.respond_to?(:configure)
66
+ formatter.configure(conf)
67
+ end
68
+ formatter
69
+ end
70
+
71
+ HandleTagAndTimeMixin = Fluent::Compat::HandleTagAndTimeMixin
72
+ StructuredFormatMixin = Fluent::Compat::StructuredFormatMixin
73
+
74
+ class ProcWrappedFormatter < Fluent::Plugin::ProcWrappedFormatter
75
+ # TODO: warn when deprecated
76
+ end
77
+
78
+ class OutFileFormatter < Fluent::Plugin::OutFileFormatter
79
+ # TODO: warn when deprecated
80
+ end
81
+
82
+ class StdoutFormatter < Fluent::Plugin::StdoutFormatter
83
+ # TODO: warn when deprecated
84
+ end
85
+
86
+ class JSONFormatter < Fluent::Plugin::JSONFormatter
87
+ # TODO: warn when deprecated
88
+ end
89
+
90
+ class HashFormatter < Fluent::Plugin::HashFormatter
91
+ # TODO: warn when deprecated
92
+ end
93
+
94
+ class MessagePackFormatter < Fluent::Plugin::MessagePackFormatter
95
+ # TODO: warn when deprecated
96
+ end
97
+
98
+ class LabeledTSVFormatter < Fluent::Plugin::LabeledTSVFormatter
99
+ # TODO: warn when deprecated
100
+ end
101
+
102
+ class CsvFormatter < Fluent::Plugin::CsvFormatter
103
+ # TODO: warn when deprecated
104
+ end
105
+
106
+ class SingleValueFormatter < Fluent::Plugin::SingleValueFormatter
107
+ # TODO: warn when deprecated
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,85 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/plugin_helper/compat_parameters'
18
+
19
+ module Fluent
20
+ module Compat
21
+ module FormatterUtils
22
+ INJECT_PARAMS = Fluent::PluginHelper::CompatParameters::INJECT_PARAMS
23
+ FORMATTER_PARAMS = Fluent::PluginHelper::CompatParameters::FORMATTER_PARAMS
24
+
25
+ module InjectMixin
26
+ def format(tag, time, record)
27
+ r = owner.inject_values_to_record(tag, time, record)
28
+ super(tag, time, r)
29
+ end
30
+ end
31
+
32
+ def self.convert_formatter_conf(conf)
33
+ return if conf.elements(name: 'inject').first || conf.elements(name: 'format').first
34
+
35
+ inject_params = {}
36
+ INJECT_PARAMS.each do |older, newer|
37
+ next unless newer
38
+ if conf.has_key?(older)
39
+ inject_params[newer] = conf[older]
40
+ end
41
+ end
42
+
43
+ if conf.has_key?('include_time_key') && Fluent::Config.bool_value(conf['include_time_key'])
44
+ inject_params['time_key'] ||= 'time'
45
+ inject_params['time_type'] ||= 'string'
46
+ end
47
+ if conf.has_key?('time_as_epoch') && Fluent::Config.bool_value(conf['time_as_epoch'])
48
+ inject_params['time_type'] = 'unixtime'
49
+ end
50
+ if conf.has_key?('localtime') || conf.has_key?('utc')
51
+ if conf.has_key?('localtime') && conf.has_key?('utc')
52
+ raise Fluent::ConfigError, "both of utc and localtime are specified, use only one of them"
53
+ elsif conf.has_key?('localtime')
54
+ inject_params['localtime'] = Fluent::Config.bool_value(conf['localtime'])
55
+ elsif conf.has_key?('utc')
56
+ inject_params['localtime'] = !(Fluent::Config.bool_value(conf['utc']))
57
+ # Specifying "localtime false" means using UTC in TimeFormatter
58
+ # And specifying "utc" is different from specifying "timezone +0000"(it's not always UTC).
59
+ # There are difference between "Z" and "+0000" in timezone formatting.
60
+ # TODO: add kwargs to TimeFormatter to specify "using localtime", "using UTC" or "using specified timezone" in more explicit way
61
+ end
62
+ end
63
+
64
+ if conf.has_key?('include_tag_key') && Fluent::Config.bool_value(conf['include_tag_key'])
65
+ inject_params['tag_key'] ||= 'tag'
66
+ end
67
+
68
+ unless inject_params.empty?
69
+ conf.elements << Fluent::Config::Element.new('inject', '', inject_params, [])
70
+ end
71
+
72
+ formatter_params = {}
73
+ FORMATTER_PARAMS.each do |older, newer|
74
+ next unless newer
75
+ if conf.has_key?(older)
76
+ formatter_params[newer] = conf[older]
77
+ end
78
+ end
79
+ unless formatter_params.empty?
80
+ conf.elements << Fluent::Config::Element.new('format', '', formatter_params, [])
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,62 @@
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/time' # TimeFormatter
18
+
19
+ module Fluent
20
+ module Compat
21
+ module HandleTagAndTimeMixin
22
+ def self.included(klass)
23
+ klass.instance_eval {
24
+ config_param :include_time_key, :bool, default: false
25
+ config_param :time_key, :string, default: 'time'
26
+ config_param :time_format, :string, default: nil
27
+ config_param :time_as_epoch, :bool, default: false
28
+ config_param :include_tag_key, :bool, default: false
29
+ config_param :tag_key, :string, default: 'tag'
30
+ config_param :localtime, :bool, default: true
31
+ config_param :timezone, :string, default: nil
32
+ }
33
+ end
34
+
35
+ def configure(conf)
36
+ super
37
+
38
+ if conf['utc']
39
+ @localtime = false
40
+ end
41
+ @timef = Fluent::TimeFormatter.new(@time_format, @localtime, @timezone)
42
+ if @time_as_epoch && !@include_time_key
43
+ log.warn "time_as_epoch will be ignored because include_time_key is false"
44
+ end
45
+ end
46
+
47
+ def filter_record(tag, time, record)
48
+ if @include_tag_key
49
+ record[@tag_key] = tag
50
+ end
51
+ if @include_time_key
52
+ if @time_as_epoch
53
+ record[@time_key] = time.to_i
54
+ else
55
+ record[@time_key] = @timef.format(time)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+
@@ -0,0 +1,53 @@
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/compat/record_filter_mixin'
18
+
19
+ module Fluent
20
+ module Compat
21
+ module HandleTagNameMixin
22
+ include RecordFilterMixin
23
+
24
+ attr_accessor :remove_tag_prefix, :remove_tag_suffix, :add_tag_prefix, :add_tag_suffix
25
+ def configure(conf)
26
+ super
27
+
28
+ @remove_tag_prefix = if conf.has_key?('remove_tag_prefix')
29
+ Regexp.new('^' + Regexp.escape(conf['remove_tag_prefix']))
30
+ else
31
+ nil
32
+ end
33
+
34
+ @remove_tag_suffix = if conf.has_key?('remove_tag_suffix')
35
+ Regexp.new(Regexp.escape(conf['remove_tag_suffix']) + '$')
36
+ else
37
+ nil
38
+ end
39
+
40
+ @add_tag_prefix = conf['add_tag_prefix']
41
+ @add_tag_suffix = conf['add_tag_suffix']
42
+ end
43
+
44
+ def filter_record(tag, time, record)
45
+ tag.sub!(@remove_tag_prefix, '') if @remove_tag_prefix
46
+ tag.sub!(@remove_tag_suffix, '') if @remove_tag_suffix
47
+ tag.insert(0, @add_tag_prefix) if @add_tag_prefix
48
+ tag << @add_tag_suffix if @add_tag_suffix
49
+ super(tag, time, record)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,49 @@
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'
18
+ require 'fluent/plugin/input'
19
+ require 'fluent/compat/call_super_mixin'
20
+ require 'fluent/process' # to load Fluent::DetachProcessMixin
21
+
22
+ module Fluent
23
+ module Compat
24
+ class Input < Fluent::Plugin::Input
25
+ # TODO: warn when deprecated
26
+
27
+ def initialize
28
+ super
29
+ unless self.class.ancestors.include?(Fluent::Compat::CallSuperMixin)
30
+ self.class.prepend Fluent::Compat::CallSuperMixin
31
+ end
32
+ end
33
+
34
+ # These definitions are to get instance methods of superclass of 3rd party plugins
35
+ # to make it sure to call super
36
+ def start
37
+ super
38
+ end
39
+
40
+ def before_shutdown
41
+ super
42
+ end
43
+
44
+ def shutdown
45
+ super
46
+ end
47
+ end
48
+ end
49
+ end