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,133 @@
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 'tzinfo'
18
+
19
+ require 'fluent/config/error'
20
+
21
+ module Fluent
22
+ class Timezone
23
+ # [+-]HH:MM, [+-]HHMM, [+-]HH
24
+ NUMERIC_PATTERN = %r{\A[+-]\d\d(:?\d\d)?\z}
25
+
26
+ # Region/Zone, Region/Zone/Zone
27
+ NAME_PATTERN = %r{\A[^/]+/[^/]+(/[^/]+)?\z}
28
+
29
+ # Validate the format of the specified timezone.
30
+ #
31
+ # Valid formats are as follows. Note that timezone abbreviations
32
+ # such as PST and JST are not supported intentionally.
33
+ #
34
+ # 1. [+-]HH:MM (e.g. "+09:00")
35
+ # 2. [+-]HHMM (e.g. "+0900")
36
+ # 3. [+-]HH (e.g. "+09")
37
+ # 4. Region/Zone (e.g. "Asia/Tokyo")
38
+ # 5. Region/Zone/Zone (e.g. "America/Argentina/Buenos_Aires")
39
+ #
40
+ # In the 4th and 5th cases, it is checked whether the specified
41
+ # timezone exists in the timezone database.
42
+ #
43
+ # When the given timezone is valid, true is returned. Otherwise,
44
+ # false is returned. When nil is given, false is returned.
45
+ def self.validate(timezone)
46
+ # If the specified timezone is nil.
47
+ if timezone.nil?
48
+ # Invalid.
49
+ return false
50
+ end
51
+
52
+ # [+-]HH:MM, [+-]HHMM, [+-]HH
53
+ if NUMERIC_PATTERN === timezone
54
+ # Valid. It can be parsed by Time.zone_offset method.
55
+ return true
56
+ end
57
+
58
+ # Region/Zone, Region/Zone/Zone
59
+ if NAME_PATTERN === timezone
60
+ begin
61
+ # Get a Timezone instance for the specified timezone.
62
+ TZInfo::Timezone.get(timezone)
63
+ rescue
64
+ # Invalid. The string does not exist in the timezone database.
65
+ return false
66
+ else
67
+ # Valid. The string was found in the timezone database.
68
+ return true
69
+ end
70
+ else
71
+ # Invalid. Timezone abbreviations are not supported.
72
+ return false
73
+ end
74
+ end
75
+
76
+ # Validate the format of the specified timezone.
77
+ #
78
+ # The implementation of this method calls validate(timezone) method
79
+ # to check whether the given timezone is valid. When invalid, this
80
+ # method raises a ConfigError.
81
+ def self.validate!(timezone)
82
+ unless validate(timezone)
83
+ raise ConfigError, "Unsupported timezone '#{timezone}'"
84
+ end
85
+ end
86
+
87
+ # Create a formatter for a timezone and optionally a format.
88
+ #
89
+ # An Proc object is returned. If the given timezone is invalid,
90
+ # nil is returned.
91
+ def self.formatter(timezone, format = nil)
92
+ if timezone.nil?
93
+ return nil
94
+ end
95
+
96
+ # [+-]HH:MM, [+-]HHMM, [+-]HH
97
+ if NUMERIC_PATTERN === timezone
98
+ offset = Time.zone_offset(timezone)
99
+
100
+ if format
101
+ return Proc.new {|time|
102
+ Time.at(time).localtime(offset).strftime(format)
103
+ }
104
+ else
105
+ return Proc.new {|time|
106
+ Time.at(time).localtime(offset).iso8601
107
+ }
108
+ end
109
+ end
110
+
111
+ # Region/Zone, Region/Zone/Zone
112
+ if NAME_PATTERN === timezone
113
+ begin
114
+ tz = TZInfo::Timezone.get(timezone)
115
+ rescue
116
+ return nil
117
+ end
118
+
119
+ if format
120
+ return Proc.new {|time|
121
+ Time.at(time).localtime(tz.period_for_utc(time).utc_total_offset).strftime(format)
122
+ }
123
+ else
124
+ return Proc.new {|time|
125
+ Time.at(time).localtime(tz.period_for_utc(time).utc_total_offset).iso8601
126
+ }
127
+ end
128
+ end
129
+
130
+ return nil
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,39 @@
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 UniqueId
19
+ def self.generate
20
+ now = Time.now.utc
21
+ u1 = ((now.to_i * 1000 * 1000 + now.usec) << 12 | rand(0xfff))
22
+ [u1 >> 32, u1 & 0xffffffff, rand(0xffffffff), rand(0xffffffff)].pack('NNNN')
23
+ end
24
+
25
+ def self.hex(unique_id)
26
+ unique_id.unpack('H*').first
27
+ end
28
+
29
+ module Mixin
30
+ def generate_unique_id
31
+ Fluent::UniqueId.generate
32
+ end
33
+
34
+ def dump_unique_id_hex(unique_id)
35
+ Fluent::UniqueId.hex(unique_id)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
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
+
19
+ VERSION = '0.14.4'
20
+
21
+ end
@@ -0,0 +1,71 @@
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
+ INTEVENTOBJ_NAME = "fluentdwinsvc"
18
+
19
+ begin
20
+
21
+ require 'windows/debug'
22
+ require 'Windows/Library'
23
+ require 'win32/daemon'
24
+ require 'win32/event'
25
+
26
+ include Win32
27
+ include Windows::Library
28
+ include Windows::Debug
29
+
30
+ def read_fluentdopt
31
+ require 'win32/Registry'
32
+ Win32::Registry::HKEY_LOCAL_MACHINE.open("SYSTEM\\CurrentControlSet\\Services\\fluentdwinsvc") do |reg|
33
+ reg.read("fluentdopt")[1] rescue ""
34
+ end
35
+ end
36
+
37
+ def service_main_start
38
+ ruby_path = 0.chr * 260
39
+ GetModuleFileName.call(0, ruby_path,260)
40
+ ruby_path = ruby_path.rstrip.gsub(/\\/, '/')
41
+ rubybin_dir = ruby_path[0, ruby_path.rindex("/")]
42
+ opt = read_fluentdopt
43
+ Process.spawn(rubybin_dir + "/ruby.exe " + rubybin_dir + "/fluentd " + opt + " -x " + INTEVENTOBJ_NAME)
44
+ end
45
+
46
+ class FluentdService < Daemon
47
+ @pid = 0
48
+
49
+ def service_main
50
+ @pid = service_main_start
51
+ while running?
52
+ sleep 10
53
+ end
54
+ end
55
+
56
+ def service_stop
57
+ ev = Win32::Event.open(INTEVENTOBJ_NAME)
58
+ ev.set
59
+ ev.close
60
+ if @pid > 0
61
+ Porcess.waitpid(@pid)
62
+ end
63
+ end
64
+ end
65
+
66
+ FluentdService.mainloop
67
+
68
+ rescue Exception => err
69
+ raise
70
+ end
71
+
@@ -0,0 +1,166 @@
1
+ require_relative '../helper'
2
+
3
+ # these are Fluent::Compat::* in fact
4
+ require 'fluent/input'
5
+ require 'fluent/output'
6
+ require 'fluent/filter'
7
+
8
+ class CompatCallsSuperTest < Test::Unit::TestCase
9
+ class DummyGoodInput < Fluent::Input
10
+ def configure(conf); super; end
11
+ def start; super; end
12
+ def before_shutdown; super; end
13
+ def shutdown; super; end
14
+ end
15
+ class DummyBadInput < Fluent::Input
16
+ def configure(conf); super; end
17
+ def start; end
18
+ def before_shutdown; end
19
+ def shutdown; end
20
+ end
21
+ class DummyGoodOutput < Fluent::Output
22
+ def configure(conf); super; end
23
+ def start; super; end
24
+ def before_shutdown; super; end
25
+ def shutdown; super; end
26
+ end
27
+ class DummyBadOutput < Fluent::Output
28
+ def configure(conf); super; end
29
+ def start; end
30
+ def before_shutdown; end
31
+ def shutdown; end
32
+ end
33
+ class DummyGoodFilter < Fluent::Filter
34
+ def configure(conf); super; end
35
+ def filter(tag, time, record); end
36
+ def start; super; end
37
+ def before_shutdown; super; end
38
+ def shutdown; super; end
39
+ end
40
+ class DummyBadFilter < Fluent::Filter
41
+ def configure(conf); super; end
42
+ def filter(tag, time, record); end
43
+ def start; end
44
+ def before_shutdown; end
45
+ def shutdown; end
46
+ end
47
+
48
+ setup do
49
+ Fluent::Test.setup
50
+ end
51
+
52
+ sub_test_case 'old API plugin which calls super properly' do
53
+ test 'Input#start, #before_shutdown and #shutdown calls all superclass methods properly' do
54
+ i = DummyGoodInput.new
55
+ i.configure(config_element())
56
+ assert i.configured?
57
+
58
+ i.start
59
+ assert i.started?
60
+
61
+ i.before_shutdown
62
+ assert i.before_shutdown?
63
+
64
+ i.shutdown
65
+ assert i.shutdown?
66
+
67
+ assert i.log.out.logs.empty?
68
+ end
69
+
70
+ test 'Output#start, #before_shutdown and #shutdown calls all superclass methods properly' do
71
+ i = DummyGoodOutput.new
72
+ i.configure(config_element())
73
+ assert i.configured?
74
+
75
+ i.start
76
+ assert i.started?
77
+
78
+ i.before_shutdown
79
+ assert i.before_shutdown?
80
+
81
+ i.shutdown
82
+ assert i.shutdown?
83
+
84
+ assert i.log.out.logs.empty?
85
+ end
86
+
87
+ test 'Filter#start, #before_shutdown and #shutdown calls all superclass methods properly' do
88
+ i = DummyGoodFilter.new
89
+ i.configure(config_element())
90
+ assert i.configured?
91
+
92
+ i.start
93
+ assert i.started?
94
+
95
+ i.before_shutdown
96
+ assert i.before_shutdown?
97
+
98
+ i.shutdown
99
+ assert i.shutdown?
100
+
101
+ assert i.log.out.logs.empty?
102
+ end
103
+ end
104
+
105
+ sub_test_case 'old API plugin which does not call super' do
106
+ test 'Input#start, #before_shutdown and #shutdown calls superclass methods forcedly with logs' do
107
+ i = DummyBadInput.new
108
+ i.configure(config_element())
109
+ assert i.configured?
110
+
111
+ i.start
112
+ assert i.started?
113
+
114
+ i.before_shutdown
115
+ assert i.before_shutdown?
116
+
117
+ i.shutdown
118
+ assert i.shutdown?
119
+
120
+ logs = i.log.out.logs
121
+ assert{ logs.any?{|l| l.include?("[warn]: super was not called in #start: called it forcedly plugin=CompatCallsSuperTest::DummyBadInput") } }
122
+ assert{ logs.any?{|l| l.include?("[warn]: super was not called in #before_shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadInput") } }
123
+ assert{ logs.any?{|l| l.include?("[warn]: super was not called in #shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadInput") } }
124
+ end
125
+
126
+ test 'Output#start, #before_shutdown and #shutdown calls superclass methods forcedly with logs' do
127
+ i = DummyBadOutput.new
128
+ i.configure(config_element())
129
+ assert i.configured?
130
+
131
+ i.start
132
+ assert i.started?
133
+
134
+ i.before_shutdown
135
+ assert i.before_shutdown?
136
+
137
+ i.shutdown
138
+ assert i.shutdown?
139
+
140
+ logs = i.log.out.logs
141
+ assert{ logs.any?{|l| l.include?("[warn]: super was not called in #start: called it forcedly plugin=CompatCallsSuperTest::DummyBadOutput") } }
142
+ assert{ logs.any?{|l| l.include?("[warn]: super was not called in #before_shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadOutput") } }
143
+ assert{ logs.any?{|l| l.include?("[warn]: super was not called in #shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadOutput") } }
144
+ end
145
+
146
+ test 'Filter#start, #before_shutdown and #shutdown calls superclass methods forcedly with logs' do
147
+ i = DummyBadFilter.new
148
+ i.configure(config_element())
149
+ assert i.configured?
150
+
151
+ i.start
152
+ assert i.started?
153
+
154
+ i.before_shutdown
155
+ assert i.before_shutdown?
156
+
157
+ i.shutdown
158
+ assert i.shutdown?
159
+
160
+ logs = i.log.out.logs
161
+ assert{ logs.any?{|l| l.include?("[warn]: super was not called in #start: called it forcedly plugin=CompatCallsSuperTest::DummyBadFilter") } }
162
+ assert{ logs.any?{|l| l.include?("[warn]: super was not called in #before_shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadFilter") } }
163
+ assert{ logs.any?{|l| l.include?("[warn]: super was not called in #shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadFilter") } }
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,82 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin/parser'
3
+
4
+ class TextParserTest < ::Test::Unit::TestCase
5
+ def setup
6
+ Fluent::Test.setup
7
+ end
8
+
9
+ class MultiEventTestParser < ::Fluent::Parser
10
+ include Fluent::Configurable
11
+
12
+ def parse(text)
13
+ 2.times { |i|
14
+ record = {}
15
+ record['message'] = text
16
+ record['number'] = i
17
+ yield Fluent::Engine.now, record
18
+ }
19
+ end
20
+ end
21
+
22
+ Fluent::TextParser.register_template('multi_event_test', Proc.new { MultiEventTestParser.new })
23
+
24
+ def test_lookup_unknown_format
25
+ assert_raise Fluent::ConfigError do
26
+ Fluent::Plugin.new_parser('unknown')
27
+ end
28
+ end
29
+
30
+ data('register_formatter' => 'known', 'register_template' => 'known_old')
31
+ def test_lookup_known_parser(data)
32
+ $LOAD_PATH.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'scripts'))
33
+ assert_nothing_raised Fluent::ConfigError do
34
+ Fluent::Plugin.new_parser(data)
35
+ end
36
+ $LOAD_PATH.shift
37
+ end
38
+
39
+ def test_parse_with_return
40
+ parser = Fluent::TextParser.new
41
+ parser.configure('format' => 'none')
42
+ _time, record = parser.parse('log message!')
43
+ assert_equal({'message' => 'log message!'}, record)
44
+ end
45
+
46
+ def test_parse_with_block
47
+ parser = Fluent::TextParser.new
48
+ parser.configure('format' => 'none')
49
+ parser.parse('log message!') { |time, record|
50
+ assert_equal({'message' => 'log message!'}, record)
51
+ }
52
+ end
53
+
54
+ def test_multi_event_parser
55
+ parser = Fluent::TextParser.new
56
+ parser.configure('format' => 'multi_event_test')
57
+ i = 0
58
+ parser.parse('log message!') { |time, record|
59
+ assert_equal('log message!', record['message'])
60
+ assert_equal(i, record['number'])
61
+ i += 1
62
+ }
63
+ end
64
+
65
+ def test_setting_estimate_current_event_value
66
+ p1 = Fluent::TextParser.new
67
+ assert_nil p1.estimate_current_event
68
+ assert_nil p1.parser
69
+
70
+ p1.configure('format' => 'none')
71
+ assert_equal true, p1.parser.estimate_current_event
72
+
73
+ p2 = Fluent::TextParser.new
74
+ assert_nil p2.estimate_current_event
75
+ assert_nil p2.parser
76
+
77
+ p2.estimate_current_event = false
78
+
79
+ p2.configure('format' => 'none')
80
+ assert_equal false, p2.parser.estimate_current_event
81
+ end
82
+ end