fluentd 0.12.40 → 1.6.2

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 (428) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  6. data/.gitignore +5 -0
  7. data/.gitlab/cicd-template.yaml +10 -0
  8. data/.gitlab-ci.yml +147 -0
  9. data/.travis.yml +56 -20
  10. data/ADOPTERS.md +5 -0
  11. data/CHANGELOG.md +1369 -0
  12. data/CONTRIBUTING.md +16 -5
  13. data/GOVERNANCE.md +55 -0
  14. data/Gemfile +5 -0
  15. data/GithubWorkflow.md +78 -0
  16. data/LICENSE +202 -0
  17. data/MAINTAINERS.md +7 -0
  18. data/README.md +23 -11
  19. data/Rakefile +48 -2
  20. data/Vagrantfile +17 -0
  21. data/appveyor.yml +37 -0
  22. data/bin/fluent-binlog-reader +7 -0
  23. data/bin/fluent-ca-generate +6 -0
  24. data/bin/fluent-plugin-config-format +5 -0
  25. data/bin/fluent-plugin-generate +5 -0
  26. data/bin/fluentd +3 -0
  27. data/code-of-conduct.md +3 -0
  28. data/example/copy_roundrobin.conf +39 -0
  29. data/example/counter.conf +18 -0
  30. data/example/in_dummy_blocks.conf +17 -0
  31. data/example/in_dummy_with_compression.conf +23 -0
  32. data/example/in_forward.conf +7 -0
  33. data/example/in_forward_client.conf +37 -0
  34. data/example/in_forward_shared_key.conf +15 -0
  35. data/example/in_forward_tls.conf +14 -0
  36. data/example/in_forward_users.conf +24 -0
  37. data/example/in_forward_workers.conf +21 -0
  38. data/example/in_http.conf +3 -1
  39. data/example/in_out_forward.conf +17 -0
  40. data/example/logevents.conf +25 -0
  41. data/example/multi_filters.conf +61 -0
  42. data/example/out_exec_filter.conf +42 -0
  43. data/example/out_forward.conf +13 -13
  44. data/example/out_forward_buf_file.conf +23 -0
  45. data/example/out_forward_client.conf +109 -0
  46. data/example/out_forward_heartbeat_none.conf +16 -0
  47. data/example/out_forward_shared_key.conf +36 -0
  48. data/example/out_forward_tls.conf +18 -0
  49. data/example/out_forward_users.conf +65 -0
  50. data/example/out_null.conf +36 -0
  51. data/example/secondary_file.conf +42 -0
  52. data/example/suppress_config_dump.conf +7 -0
  53. data/example/worker_section.conf +36 -0
  54. data/fluent.conf +29 -0
  55. data/fluentd.gemspec +21 -11
  56. data/lib/fluent/agent.rb +67 -90
  57. data/lib/fluent/clock.rb +62 -0
  58. data/lib/fluent/command/binlog_reader.rb +244 -0
  59. data/lib/fluent/command/ca_generate.rb +181 -0
  60. data/lib/fluent/command/cat.rb +42 -18
  61. data/lib/fluent/command/debug.rb +12 -10
  62. data/lib/fluent/command/fluentd.rb +153 -5
  63. data/lib/fluent/command/plugin_config_formatter.rb +292 -0
  64. data/lib/fluent/command/plugin_generator.rb +324 -0
  65. data/lib/fluent/compat/call_super_mixin.rb +67 -0
  66. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  67. data/lib/fluent/compat/exec_util.rb +129 -0
  68. data/lib/fluent/compat/file_util.rb +54 -0
  69. data/lib/fluent/compat/filter.rb +68 -0
  70. data/lib/fluent/compat/formatter.rb +111 -0
  71. data/lib/fluent/compat/formatter_utils.rb +85 -0
  72. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  73. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  74. data/lib/fluent/compat/input.rb +49 -0
  75. data/lib/fluent/compat/output.rb +718 -0
  76. data/lib/fluent/compat/output_chain.rb +60 -0
  77. data/lib/fluent/compat/parser.rb +310 -0
  78. data/lib/fluent/compat/parser_utils.rb +40 -0
  79. data/lib/fluent/compat/propagate_default.rb +62 -0
  80. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  81. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  82. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  83. data/lib/fluent/compat/socket_util.rb +165 -0
  84. data/lib/fluent/compat/string_util.rb +34 -0
  85. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  86. data/lib/fluent/compat/type_converter.rb +90 -0
  87. data/lib/fluent/config/configure_proxy.rb +210 -62
  88. data/lib/fluent/config/dsl.rb +12 -5
  89. data/lib/fluent/config/element.rb +107 -9
  90. data/lib/fluent/config/literal_parser.rb +9 -3
  91. data/lib/fluent/config/parser.rb +4 -4
  92. data/lib/fluent/config/section.rb +51 -14
  93. data/lib/fluent/config/types.rb +28 -13
  94. data/lib/fluent/config/v1_parser.rb +3 -5
  95. data/lib/fluent/config.rb +23 -20
  96. data/lib/fluent/configurable.rb +79 -21
  97. data/lib/fluent/counter/base_socket.rb +46 -0
  98. data/lib/fluent/counter/client.rb +297 -0
  99. data/lib/fluent/counter/error.rb +86 -0
  100. data/lib/fluent/counter/mutex_hash.rb +163 -0
  101. data/lib/fluent/counter/server.rb +273 -0
  102. data/lib/fluent/counter/store.rb +205 -0
  103. data/lib/fluent/counter/validator.rb +145 -0
  104. data/lib/fluent/counter.rb +23 -0
  105. data/lib/fluent/daemon.rb +15 -0
  106. data/lib/fluent/engine.rb +102 -65
  107. data/lib/fluent/env.rb +7 -3
  108. data/lib/fluent/error.rb +30 -0
  109. data/lib/fluent/event.rb +197 -21
  110. data/lib/fluent/event_router.rb +93 -10
  111. data/lib/fluent/filter.rb +2 -50
  112. data/lib/fluent/formatter.rb +4 -293
  113. data/lib/fluent/input.rb +2 -32
  114. data/lib/fluent/label.rb +10 -2
  115. data/lib/fluent/load.rb +3 -3
  116. data/lib/fluent/log.rb +348 -81
  117. data/lib/fluent/match.rb +37 -36
  118. data/lib/fluent/mixin.rb +12 -176
  119. data/lib/fluent/msgpack_factory.rb +62 -0
  120. data/lib/fluent/output.rb +10 -612
  121. data/lib/fluent/output_chain.rb +23 -0
  122. data/lib/fluent/parser.rb +4 -800
  123. data/lib/fluent/plugin/bare_output.rb +63 -0
  124. data/lib/fluent/plugin/base.rb +192 -0
  125. data/lib/fluent/plugin/buf_file.rb +128 -174
  126. data/lib/fluent/plugin/buf_memory.rb +9 -92
  127. data/lib/fluent/plugin/buffer/chunk.rb +221 -0
  128. data/lib/fluent/plugin/buffer/file_chunk.rb +383 -0
  129. data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
  130. data/lib/fluent/plugin/buffer.rb +779 -0
  131. data/lib/fluent/plugin/compressable.rb +92 -0
  132. data/lib/fluent/plugin/exec_util.rb +3 -108
  133. data/lib/fluent/plugin/file_util.rb +4 -34
  134. data/lib/fluent/plugin/file_wrapper.rb +120 -0
  135. data/lib/fluent/plugin/filter.rb +93 -0
  136. data/lib/fluent/plugin/filter_grep.rb +117 -34
  137. data/lib/fluent/plugin/filter_parser.rb +85 -62
  138. data/lib/fluent/plugin/filter_record_transformer.rb +27 -39
  139. data/lib/fluent/plugin/filter_stdout.rb +15 -12
  140. data/lib/fluent/plugin/formatter.rb +50 -0
  141. data/lib/fluent/plugin/formatter_csv.rb +52 -0
  142. data/lib/fluent/plugin/formatter_hash.rb +33 -0
  143. data/lib/fluent/plugin/formatter_json.rb +55 -0
  144. data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
  145. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  146. data/lib/fluent/plugin/formatter_out_file.rb +51 -0
  147. data/lib/fluent/plugin/formatter_single_value.rb +34 -0
  148. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  149. data/lib/fluent/plugin/formatter_tsv.rb +38 -0
  150. data/lib/fluent/plugin/in_debug_agent.rb +17 -6
  151. data/lib/fluent/plugin/in_dummy.rb +47 -20
  152. data/lib/fluent/plugin/in_exec.rb +55 -123
  153. data/lib/fluent/plugin/in_forward.rb +299 -216
  154. data/lib/fluent/plugin/in_gc_stat.rb +14 -36
  155. data/lib/fluent/plugin/in_http.rb +204 -91
  156. data/lib/fluent/plugin/in_monitor_agent.rb +186 -258
  157. data/lib/fluent/plugin/in_object_space.rb +13 -41
  158. data/lib/fluent/plugin/in_syslog.rb +112 -134
  159. data/lib/fluent/plugin/in_tail.rb +408 -745
  160. data/lib/fluent/plugin/in_tcp.rb +66 -9
  161. data/lib/fluent/plugin/in_udp.rb +60 -11
  162. data/lib/fluent/plugin/{in_stream.rb → in_unix.rb} +8 -4
  163. data/lib/fluent/plugin/input.rb +37 -0
  164. data/lib/fluent/plugin/multi_output.rb +158 -0
  165. data/lib/fluent/plugin/out_copy.rb +23 -35
  166. data/lib/fluent/plugin/out_exec.rb +67 -70
  167. data/lib/fluent/plugin/out_exec_filter.rb +204 -271
  168. data/lib/fluent/plugin/out_file.rb +267 -73
  169. data/lib/fluent/plugin/out_forward.rb +854 -325
  170. data/lib/fluent/plugin/out_null.rb +42 -9
  171. data/lib/fluent/plugin/out_relabel.rb +9 -5
  172. data/lib/fluent/plugin/out_roundrobin.rb +18 -37
  173. data/lib/fluent/plugin/out_secondary_file.rb +133 -0
  174. data/lib/fluent/plugin/out_stdout.rb +43 -10
  175. data/lib/fluent/plugin/out_stream.rb +7 -2
  176. data/lib/fluent/plugin/output.rb +1498 -0
  177. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  178. data/lib/fluent/plugin/parser.rb +191 -0
  179. data/lib/fluent/plugin/parser_apache.rb +28 -0
  180. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  181. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  182. data/lib/fluent/plugin/parser_csv.rb +39 -0
  183. data/lib/fluent/plugin/parser_json.rb +94 -0
  184. data/lib/fluent/plugin/parser_ltsv.rb +49 -0
  185. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  186. data/lib/fluent/plugin/parser_multiline.rb +106 -0
  187. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  188. data/lib/fluent/plugin/parser_none.rb +36 -0
  189. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  190. data/lib/fluent/plugin/parser_syslog.rb +142 -0
  191. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  192. data/lib/fluent/plugin/socket_util.rb +3 -143
  193. data/lib/fluent/plugin/storage.rb +84 -0
  194. data/lib/fluent/plugin/storage_local.rb +164 -0
  195. data/lib/fluent/plugin/string_util.rb +3 -15
  196. data/lib/fluent/plugin.rb +122 -121
  197. data/lib/fluent/plugin_helper/cert_option.rb +178 -0
  198. data/lib/fluent/plugin_helper/child_process.rb +364 -0
  199. data/lib/fluent/plugin_helper/compat_parameters.rb +333 -0
  200. data/lib/fluent/plugin_helper/counter.rb +51 -0
  201. data/lib/fluent/plugin_helper/event_emitter.rb +93 -0
  202. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  203. data/lib/fluent/plugin_helper/extract.rb +104 -0
  204. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  205. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  206. data/lib/fluent/plugin_helper/http_server/compat/server.rb +81 -0
  207. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  208. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  209. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  210. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  211. data/lib/fluent/plugin_helper/http_server/server.rb +87 -0
  212. data/lib/fluent/plugin_helper/http_server.rb +76 -0
  213. data/lib/fluent/plugin_helper/inject.rb +151 -0
  214. data/lib/fluent/plugin_helper/parser.rb +147 -0
  215. data/lib/fluent/plugin_helper/record_accessor.rb +210 -0
  216. data/lib/fluent/plugin_helper/retry_state.rb +205 -0
  217. data/lib/fluent/plugin_helper/server.rb +807 -0
  218. data/lib/fluent/plugin_helper/socket.rb +250 -0
  219. data/lib/fluent/plugin_helper/socket_option.rb +80 -0
  220. data/lib/fluent/plugin_helper/storage.rb +349 -0
  221. data/lib/fluent/plugin_helper/thread.rb +179 -0
  222. data/lib/fluent/plugin_helper/timer.rb +92 -0
  223. data/lib/fluent/plugin_helper.rb +73 -0
  224. data/lib/fluent/plugin_id.rb +80 -0
  225. data/lib/fluent/process.rb +3 -489
  226. data/lib/fluent/registry.rb +52 -10
  227. data/lib/fluent/root_agent.rb +204 -42
  228. data/lib/fluent/supervisor.rb +597 -359
  229. data/lib/fluent/system_config.rb +131 -42
  230. data/lib/fluent/test/base.rb +6 -54
  231. data/lib/fluent/test/driver/base.rb +224 -0
  232. data/lib/fluent/test/driver/base_owned.rb +70 -0
  233. data/lib/fluent/test/driver/base_owner.rb +135 -0
  234. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  235. data/lib/fluent/test/driver/filter.rb +57 -0
  236. data/lib/fluent/test/driver/formatter.rb +30 -0
  237. data/lib/fluent/test/driver/input.rb +31 -0
  238. data/lib/fluent/test/driver/multi_output.rb +53 -0
  239. data/lib/fluent/test/driver/output.rb +102 -0
  240. data/lib/fluent/test/driver/parser.rb +30 -0
  241. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  242. data/lib/fluent/test/filter_test.rb +0 -1
  243. data/lib/fluent/test/formatter_test.rb +4 -1
  244. data/lib/fluent/test/helpers.rb +58 -10
  245. data/lib/fluent/test/input_test.rb +27 -19
  246. data/lib/fluent/test/log.rb +79 -0
  247. data/lib/fluent/test/output_test.rb +28 -39
  248. data/lib/fluent/test/parser_test.rb +3 -1
  249. data/lib/fluent/test/startup_shutdown.rb +46 -0
  250. data/lib/fluent/test.rb +33 -1
  251. data/lib/fluent/time.rb +450 -1
  252. data/lib/fluent/timezone.rb +27 -3
  253. data/lib/fluent/{status.rb → unique_id.rb} +15 -24
  254. data/lib/fluent/version.rb +1 -1
  255. data/lib/fluent/winsvc.rb +85 -0
  256. data/templates/new_gem/Gemfile +3 -0
  257. data/templates/new_gem/README.md.erb +43 -0
  258. data/templates/new_gem/Rakefile +13 -0
  259. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  260. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  261. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  262. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  263. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  264. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  265. data/templates/new_gem/test/helper.rb.erb +8 -0
  266. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  267. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  268. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  269. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  270. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  271. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  272. data/templates/plugin_config_formatter/param.md.erb +34 -0
  273. data/templates/plugin_config_formatter/section.md.erb +12 -0
  274. data/test/command/test_binlog_reader.rb +346 -0
  275. data/test/command/test_ca_generate.rb +70 -0
  276. data/test/command/test_fluentd.rb +901 -0
  277. data/test/command/test_plugin_config_formatter.rb +276 -0
  278. data/test/command/test_plugin_generator.rb +92 -0
  279. data/test/compat/test_calls_super.rb +166 -0
  280. data/test/compat/test_parser.rb +92 -0
  281. data/test/config/test_config_parser.rb +126 -2
  282. data/test/config/test_configurable.rb +946 -187
  283. data/test/config/test_configure_proxy.rb +424 -74
  284. data/test/config/test_dsl.rb +11 -11
  285. data/test/config/test_element.rb +500 -0
  286. data/test/config/test_literal_parser.rb +8 -0
  287. data/test/config/test_plugin_configuration.rb +56 -0
  288. data/test/config/test_section.rb +79 -7
  289. data/test/config/test_system_config.rb +122 -35
  290. data/test/config/test_types.rb +38 -0
  291. data/test/counter/test_client.rb +559 -0
  292. data/test/counter/test_error.rb +44 -0
  293. data/test/counter/test_mutex_hash.rb +179 -0
  294. data/test/counter/test_server.rb +589 -0
  295. data/test/counter/test_store.rb +258 -0
  296. data/test/counter/test_validator.rb +137 -0
  297. data/test/helper.rb +89 -6
  298. data/test/helpers/fuzzy_assert.rb +89 -0
  299. data/test/plugin/test_bare_output.rb +118 -0
  300. data/test/plugin/test_base.rb +115 -0
  301. data/test/plugin/test_buf_file.rb +823 -460
  302. data/test/plugin/test_buf_memory.rb +32 -194
  303. data/test/plugin/test_buffer.rb +1233 -0
  304. data/test/plugin/test_buffer_chunk.rb +198 -0
  305. data/test/plugin/test_buffer_file_chunk.rb +844 -0
  306. data/test/plugin/test_buffer_memory_chunk.rb +338 -0
  307. data/test/plugin/test_compressable.rb +84 -0
  308. data/test/plugin/test_filter.rb +357 -0
  309. data/test/plugin/test_filter_grep.rb +540 -29
  310. data/test/plugin/test_filter_parser.rb +439 -452
  311. data/test/plugin/test_filter_record_transformer.rb +123 -166
  312. data/test/plugin/test_filter_stdout.rb +160 -72
  313. data/test/plugin/test_formatter_csv.rb +111 -0
  314. data/test/plugin/test_formatter_hash.rb +35 -0
  315. data/test/plugin/test_formatter_json.rb +51 -0
  316. data/test/plugin/test_formatter_ltsv.rb +62 -0
  317. data/test/plugin/test_formatter_msgpack.rb +28 -0
  318. data/test/plugin/test_formatter_out_file.rb +95 -0
  319. data/test/plugin/test_formatter_single_value.rb +38 -0
  320. data/test/plugin/test_formatter_tsv.rb +68 -0
  321. data/test/plugin/test_in_debug_agent.rb +24 -1
  322. data/test/plugin/test_in_dummy.rb +111 -18
  323. data/test/plugin/test_in_exec.rb +200 -113
  324. data/test/plugin/test_in_forward.rb +990 -387
  325. data/test/plugin/test_in_gc_stat.rb +10 -8
  326. data/test/plugin/test_in_http.rb +600 -224
  327. data/test/plugin/test_in_monitor_agent.rb +690 -0
  328. data/test/plugin/test_in_object_space.rb +24 -8
  329. data/test/plugin/test_in_syslog.rb +154 -215
  330. data/test/plugin/test_in_tail.rb +1006 -707
  331. data/test/plugin/test_in_tcp.rb +125 -48
  332. data/test/plugin/test_in_udp.rb +204 -63
  333. data/test/plugin/{test_in_stream.rb → test_in_unix.rb} +14 -13
  334. data/test/plugin/test_input.rb +126 -0
  335. data/test/plugin/test_metadata.rb +89 -0
  336. data/test/plugin/test_multi_output.rb +180 -0
  337. data/test/plugin/test_out_copy.rb +117 -112
  338. data/test/plugin/test_out_exec.rb +258 -53
  339. data/test/plugin/test_out_exec_filter.rb +538 -115
  340. data/test/plugin/test_out_file.rb +865 -178
  341. data/test/plugin/test_out_forward.rb +998 -210
  342. data/test/plugin/test_out_null.rb +105 -0
  343. data/test/plugin/test_out_relabel.rb +28 -0
  344. data/test/plugin/test_out_roundrobin.rb +36 -29
  345. data/test/plugin/test_out_secondary_file.rb +458 -0
  346. data/test/plugin/test_out_stdout.rb +135 -37
  347. data/test/plugin/test_out_stream.rb +18 -0
  348. data/test/plugin/test_output.rb +984 -0
  349. data/test/plugin/test_output_as_buffered.rb +2021 -0
  350. data/test/plugin/test_output_as_buffered_backup.rb +312 -0
  351. data/test/plugin/test_output_as_buffered_compress.rb +165 -0
  352. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  353. data/test/plugin/test_output_as_buffered_retries.rb +911 -0
  354. data/test/plugin/test_output_as_buffered_secondary.rb +874 -0
  355. data/test/plugin/test_output_as_standard.rb +374 -0
  356. data/test/plugin/test_owned_by.rb +35 -0
  357. data/test/plugin/test_parser.rb +359 -0
  358. data/test/plugin/test_parser_apache.rb +42 -0
  359. data/test/plugin/test_parser_apache2.rb +47 -0
  360. data/test/plugin/test_parser_apache_error.rb +45 -0
  361. data/test/plugin/test_parser_csv.rb +103 -0
  362. data/test/plugin/test_parser_json.rb +138 -0
  363. data/test/plugin/test_parser_labeled_tsv.rb +145 -0
  364. data/test/plugin/test_parser_multiline.rb +100 -0
  365. data/test/plugin/test_parser_nginx.rb +88 -0
  366. data/test/plugin/test_parser_none.rb +52 -0
  367. data/test/plugin/test_parser_regexp.rb +289 -0
  368. data/test/plugin/test_parser_syslog.rb +441 -0
  369. data/test/plugin/test_parser_tsv.rb +122 -0
  370. data/test/plugin/test_storage.rb +167 -0
  371. data/test/plugin/test_storage_local.rb +335 -0
  372. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  373. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  374. data/test/plugin_helper/data/cert/cert.pem +19 -0
  375. data/test/plugin_helper/http_server/test_app.rb +65 -0
  376. data/test/plugin_helper/http_server/test_route.rb +32 -0
  377. data/test/plugin_helper/test_cert_option.rb +16 -0
  378. data/test/plugin_helper/test_child_process.rb +794 -0
  379. data/test/plugin_helper/test_compat_parameters.rb +353 -0
  380. data/test/plugin_helper/test_event_emitter.rb +51 -0
  381. data/test/plugin_helper/test_event_loop.rb +52 -0
  382. data/test/plugin_helper/test_extract.rb +194 -0
  383. data/test/plugin_helper/test_formatter.rb +255 -0
  384. data/test/plugin_helper/test_http_server_helper.rb +205 -0
  385. data/test/plugin_helper/test_inject.rb +519 -0
  386. data/test/plugin_helper/test_parser.rb +264 -0
  387. data/test/plugin_helper/test_record_accessor.rb +197 -0
  388. data/test/plugin_helper/test_retry_state.rb +442 -0
  389. data/test/plugin_helper/test_server.rb +1714 -0
  390. data/test/plugin_helper/test_storage.rb +542 -0
  391. data/test/plugin_helper/test_thread.rb +164 -0
  392. data/test/plugin_helper/test_timer.rb +132 -0
  393. data/test/scripts/exec_script.rb +0 -6
  394. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  395. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  396. data/test/scripts/fluent/plugin/out_test.rb +23 -15
  397. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  398. data/test/test_clock.rb +164 -0
  399. data/test/test_config.rb +16 -7
  400. data/test/test_configdsl.rb +2 -2
  401. data/test/test_event.rb +360 -13
  402. data/test/test_event_router.rb +108 -11
  403. data/test/test_event_time.rb +199 -0
  404. data/test/test_filter.rb +48 -6
  405. data/test/test_formatter.rb +11 -391
  406. data/test/test_input.rb +1 -1
  407. data/test/test_log.rb +591 -31
  408. data/test/test_mixin.rb +1 -1
  409. data/test/test_output.rb +121 -185
  410. data/test/test_plugin.rb +251 -0
  411. data/test/test_plugin_classes.rb +177 -10
  412. data/test/test_plugin_helper.rb +81 -0
  413. data/test/test_plugin_id.rb +101 -0
  414. data/test/test_process.rb +8 -42
  415. data/test/test_root_agent.rb +766 -21
  416. data/test/test_supervisor.rb +481 -0
  417. data/test/test_test_drivers.rb +135 -0
  418. data/test/test_time_formatter.rb +282 -0
  419. data/test/test_time_parser.rb +231 -0
  420. data/test/test_unique_id.rb +47 -0
  421. metadata +454 -60
  422. data/COPYING +0 -14
  423. data/ChangeLog +0 -666
  424. data/lib/fluent/buffer.rb +0 -365
  425. data/lib/fluent/plugin/in_status.rb +0 -76
  426. data/test/plugin/test_in_status.rb +0 -38
  427. data/test/test_buffer.rb +0 -624
  428. data/test/test_parser.rb +0 -1305
@@ -0,0 +1,106 @@
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/parser'
18
+ require 'fluent/plugin/parser_regexp'
19
+
20
+ module Fluent
21
+ module Plugin
22
+ class MultilineParser < Parser
23
+ Plugin.register_parser('multiline', self)
24
+
25
+ desc 'Specify regexp pattern for start line of multiple lines'
26
+ config_param :format_firstline, :string, default: nil
27
+
28
+ FORMAT_MAX_NUM = 20
29
+
30
+ def configure(conf)
31
+ super
32
+
33
+ formats = parse_formats(conf).compact.map { |f| f[1..-2] }.join
34
+ begin
35
+ regexp = Regexp.new(formats, Regexp::MULTILINE)
36
+ if regexp.named_captures.empty?
37
+ raise "No named captures"
38
+ end
39
+ regexp_conf = Fluent::Config::Element.new("", "", { "expression" => "/#{formats}/m" }, [])
40
+ @parser = Fluent::Plugin::RegexpParser.new
41
+ @parser.configure(conf + regexp_conf)
42
+ rescue => e
43
+ raise Fluent::ConfigError, "Invalid regexp '#{formats}': #{e}"
44
+ end
45
+
46
+ if @format_firstline
47
+ check_format_regexp(@format_firstline, 'format_firstline')
48
+ @firstline_regex = Regexp.new(@format_firstline[1..-2])
49
+ end
50
+ end
51
+
52
+ def parse(text, &block)
53
+ @parser.call(text, &block)
54
+ end
55
+
56
+ def has_firstline?
57
+ !!@format_firstline
58
+ end
59
+
60
+ def firstline?(text)
61
+ @firstline_regex.match(text)
62
+ end
63
+
64
+ private
65
+
66
+ def parse_formats(conf)
67
+ check_format_range(conf)
68
+
69
+ prev_format = nil
70
+ (1..FORMAT_MAX_NUM).map { |i|
71
+ format = conf["format#{i}"]
72
+ if (i > 1) && prev_format.nil? && !format.nil?
73
+ raise Fluent::ConfigError, "Jump of format index found. format#{i - 1} is missing."
74
+ end
75
+ prev_format = format
76
+ next if format.nil?
77
+
78
+ check_format_regexp(format, "format#{i}")
79
+ format
80
+ }
81
+ end
82
+
83
+ def check_format_range(conf)
84
+ invalid_formats = conf.keys.select { |k|
85
+ m = k.match(/^format(\d+)$/)
86
+ m ? !((1..FORMAT_MAX_NUM).include?(m[1].to_i)) : false
87
+ }
88
+ unless invalid_formats.empty?
89
+ raise Fluent::ConfigError, "Invalid formatN found. N should be 1 - #{FORMAT_MAX_NUM}: " + invalid_formats.join(",")
90
+ end
91
+ end
92
+
93
+ def check_format_regexp(format, key)
94
+ if format[0] == '/' && format[-1] == '/'
95
+ begin
96
+ Regexp.new(format[1..-2], Regexp::MULTILINE)
97
+ rescue => e
98
+ raise Fluent::ConfigError, "Invalid regexp in #{key}: #{e}"
99
+ end
100
+ else
101
+ raise Fluent::ConfigError, "format should be Regexp, need //, in #{key}: '#{format}'"
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,28 @@
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/parser_regexp'
18
+
19
+ module Fluent
20
+ module Plugin
21
+ class NginxParser < RegexpParser
22
+ Plugin.register_parser("nginx", self)
23
+
24
+ config_set_default :expression, /^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)"(?:\s+\"?(?<http_x_forwarded_for>[^\"]*)\"?)?)?$/
25
+ config_set_default :time_format, "%d/%b/%Y:%H:%M:%S %z"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,36 @@
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/parser'
18
+
19
+ require 'fluent/time'
20
+
21
+ module Fluent
22
+ module Plugin
23
+ class NoneParser < Parser
24
+ Plugin.register_parser('none', self)
25
+
26
+ desc 'Field name to contain logs'
27
+ config_param :message_key, :string, default: 'message'
28
+
29
+ def parse(text)
30
+ record = {@message_key => text}
31
+ time = @estimate_current_event ? Fluent::EventTime.now : nil
32
+ yield time, record
33
+ end
34
+ end
35
+ end
36
+ 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/parser'
18
+
19
+ module Fluent
20
+ module Plugin
21
+ class RegexpParser < Parser
22
+ Plugin.register_parser("regexp", self)
23
+
24
+ desc 'Regular expression for matching logs'
25
+ config_param :expression, :regexp
26
+ desc 'Ignore case in matching'
27
+ config_param :ignorecase, :bool, default: false, deprecated: "Use /pattern/i instead, this option is no longer effective"
28
+ desc 'Build regular expression as a multline mode'
29
+ config_param :multiline, :bool, default: false, deprecated: "Use /pattern/m instead, this option is no longer effective"
30
+
31
+ config_set_default :time_key, 'time'
32
+
33
+ def configure(conf)
34
+ super
35
+ # For compat layer
36
+ if @ignorecase || @multiline
37
+ options = 0
38
+ options |= Regexp::IGNORECASE if @ignorecase
39
+ options |= Regexp::MULTILINE if @multiline
40
+ @expression = Regexp.compile(@expression.source, options)
41
+ end
42
+ @regexp = @expression # For backward compatibility
43
+
44
+ if @expression.named_captures.empty?
45
+ raise Fluent::ConfigError, "No named captures in 'expression' parameter. The regexp must have at least one named capture"
46
+ end
47
+ end
48
+
49
+ def parse(text)
50
+ m = @expression.match(text)
51
+ unless m
52
+ yield nil, nil
53
+ return
54
+ end
55
+
56
+ r = {}
57
+ m.names.each do |name|
58
+ if value = m[name]
59
+ r[name] = value
60
+ end
61
+ end
62
+
63
+ time, record = convert_values(parse_time(r), r)
64
+ yield time, record
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,142 @@
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/parser'
18
+
19
+ require 'fluent/time'
20
+
21
+ module Fluent
22
+ module Plugin
23
+ class SyslogParser < Parser
24
+ Plugin.register_parser('syslog', self)
25
+
26
+ # From existence TextParser pattern
27
+ REGEXP = /^(?<time>[^ ]*\s*[^ ]* [^ ]*) (?<host>[^ ]*) (?<ident>[^ :\[]*)(?:\[(?<pid>[0-9]+)\])?(?:[^\:]*\:)? *(?<message>.*)$/
28
+ # From in_syslog default pattern
29
+ REGEXP_WITH_PRI = /^\<(?<pri>[0-9]+)\>(?<time>[^ ]* {1,2}[^ ]* [^ ]*) (?<host>[^ ]*) (?<ident>[^ :\[]*)(?:\[(?<pid>[0-9]+)\])?(?:[^\:]*\:)? *(?<message>.*)$/
30
+ REGEXP_RFC5424 = /\A^(?<time>[^ ]+) (?<host>[!-~]{1,255}) (?<ident>[!-~]{1,48}) (?<pid>[!-~]{1,128}) (?<msgid>[!-~]{1,32}) (?<extradata>(?:\-|\[(.*)\]))(?: (?<message>.+))?$\z/
31
+ REGEXP_RFC5424_WITH_PRI = /\A^\<(?<pri>[0-9]{1,3})\>[1-9]\d{0,2} (?<time>[^ ]+) (?<host>[!-~]{1,255}) (?<ident>[!-~]{1,48}) (?<pid>[!-~]{1,128}) (?<msgid>[!-~]{1,32}) (?<extradata>(?:\-|\[(.*)\]))(?: (?<message>.+))?$\z/
32
+ REGEXP_DETECT_RFC5424 = /^\<.*\>[1-9]\d{0,2}/
33
+
34
+ config_set_default :time_format, "%b %d %H:%M:%S"
35
+ desc 'If the incoming logs have priority prefix, e.g. <9>, set true'
36
+ config_param :with_priority, :bool, default: false
37
+ desc 'Specify protocol format'
38
+ config_param :message_format, :enum, list: [:rfc3164, :rfc5424, :auto], default: :rfc3164
39
+ desc 'Specify time format for event time for rfc5424 protocol'
40
+ config_param :rfc5424_time_format, :string, default: "%Y-%m-%dT%H:%M:%S.%L%z"
41
+
42
+ def initialize
43
+ super
44
+ @mutex = Mutex.new
45
+ end
46
+
47
+ def configure(conf)
48
+ super
49
+
50
+ @time_parser_rfc3164 = @time_parser_rfc5424 = nil
51
+ @time_parser_rfc5424_without_subseconds = nil
52
+ @support_rfc5424_without_subseconds = false
53
+ @regexp = case @message_format
54
+ when :rfc3164
55
+ class << self
56
+ alias_method :parse, :parse_plain
57
+ end
58
+ @with_priority ? REGEXP_WITH_PRI : REGEXP
59
+ when :rfc5424
60
+ class << self
61
+ alias_method :parse, :parse_plain
62
+ end
63
+ @time_format = @rfc5424_time_format unless conf.has_key?('time_format')
64
+ @support_rfc5424_without_subseconds = true
65
+ @with_priority ? REGEXP_RFC5424_WITH_PRI : REGEXP_RFC5424
66
+ when :auto
67
+ class << self
68
+ alias_method :parse, :parse_auto
69
+ end
70
+ @time_parser_rfc3164 = time_parser_create(format: @time_format)
71
+ @time_parser_rfc5424 = time_parser_create(format: @rfc5424_time_format)
72
+ nil
73
+ end
74
+ @time_parser = time_parser_create
75
+ @time_parser_rfc5424_without_subseconds = time_parser_create(format: "%Y-%m-%dT%H:%M:%S%z")
76
+ end
77
+
78
+ def patterns
79
+ {'format' => @regexp, 'time_format' => @time_format}
80
+ end
81
+
82
+ def parse(text)
83
+ # This is overwritten in configure
84
+ end
85
+
86
+ def parse_auto(text, &block)
87
+ if REGEXP_DETECT_RFC5424.match(text)
88
+ @regexp = @with_priority ? REGEXP_RFC5424_WITH_PRI : REGEXP_RFC5424
89
+ @time_parser = @time_parser_rfc5424
90
+ @support_rfc5424_without_subseconds = true
91
+ else
92
+ @regexp = @with_priority ? REGEXP_WITH_PRI : REGEXP
93
+ @time_parser = @time_parser_rfc3164
94
+ end
95
+ parse_plain(text, &block)
96
+ end
97
+
98
+ def parse_plain(text, &block)
99
+ m = @regexp.match(text)
100
+ unless m
101
+ yield nil, nil
102
+ return
103
+ end
104
+
105
+ time = nil
106
+ record = {}
107
+
108
+ m.names.each { |name|
109
+ if value = m[name]
110
+ case name
111
+ when "pri"
112
+ record['pri'] = value.to_i
113
+ when "time"
114
+ time = @mutex.synchronize do
115
+ time_str = value.squeeze(' ')
116
+ begin
117
+ @time_parser.parse(time_str)
118
+ rescue Fluent::TimeParser::TimeParseError => e
119
+ if @support_rfc5424_without_subseconds
120
+ log.trace(e)
121
+ @time_parser_rfc5424_without_subseconds.parse(time_str)
122
+ else
123
+ raise
124
+ end
125
+ end
126
+ end
127
+ record[name] = value if @keep_time_key
128
+ else
129
+ record[name] = value
130
+ end
131
+ end
132
+ }
133
+
134
+ if @estimate_current_event
135
+ time ||= Fluent::EventTime.now
136
+ end
137
+
138
+ yield time, record
139
+ end
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,42 @@
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/parser'
18
+
19
+ module Fluent
20
+ module Plugin
21
+ class TSVParser < Parser
22
+ Plugin.register_parser('tsv', self)
23
+
24
+ desc 'Names of fields included in each lines'
25
+ config_param :keys, :array, value_type: :string
26
+ desc 'The delimiter character (or string) of TSV values'
27
+ config_param :delimiter, :string, default: "\t"
28
+
29
+ def configure(conf)
30
+ super
31
+ @key_num = @keys.length
32
+ end
33
+
34
+ def parse(text)
35
+ values = text.split(@delimiter, @key_num)
36
+ r = Hash[@keys.zip(values)]
37
+ time, record = convert_values(parse_time(r), r)
38
+ yield time, record
39
+ end
40
+ end
41
+ end
42
+ end
@@ -14,149 +14,9 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
- require 'ipaddr'
18
-
19
- require 'cool.io'
20
-
21
- require 'fluent/plugin'
17
+ require 'fluent/compat/socket_util'
22
18
 
23
19
  module Fluent
24
- module SocketUtil
25
- def create_udp_socket(host)
26
- if IPAddr.new(IPSocket.getaddress(host)).ipv4?
27
- UDPSocket.new
28
- else
29
- UDPSocket.new(Socket::AF_INET6)
30
- end
31
- end
32
- module_function :create_udp_socket
33
-
34
- class UdpHandler < Coolio::IO
35
- def initialize(io, log, body_size_limit, callback, resolve_hostname = false)
36
- super(io)
37
- @io = io
38
- @io.do_not_reverse_lookup = !resolve_hostname
39
- @log = log
40
- @body_size_limit = body_size_limit
41
- @callback = callback
42
- end
43
-
44
- def on_readable
45
- msg, addr = @io.recvfrom_nonblock(@body_size_limit)
46
- msg.chomp!
47
- @callback.call(msg, addr)
48
- rescue => e
49
- @log.error "unexpected error", error: e, error_class: e.class
50
- end
51
- end
52
-
53
- class TcpHandler < Coolio::Socket
54
- PEERADDR_FAILED = ["?", "?", "name resolusion failed", "?"]
55
-
56
- def initialize(io, log, delimiter, callback, resolve_hostname = false)
57
- super(io)
58
- if io.is_a?(TCPSocket)
59
- io.do_not_reverse_lookup = resolve_hostname
60
- @addr = (io.peeraddr rescue PEERADDR_FAILED)
61
-
62
- opt = [1, @timeout.to_i].pack('I!I!') # { int l_onoff; int l_linger; }
63
- io.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, opt)
64
- end
65
- @delimiter = delimiter
66
- @callback = callback
67
- @log = log
68
- @log.trace { "accepted fluent socket object_id=#{self.object_id}" }
69
- @buffer = "".force_encoding('ASCII-8BIT')
70
- end
71
-
72
- def on_connect
73
- end
74
-
75
- def on_read(data)
76
- @buffer << data
77
- pos = 0
78
-
79
- while i = @buffer.index(@delimiter, pos)
80
- msg = @buffer[pos...i]
81
- @callback.call(msg, @addr)
82
- pos = i + @delimiter.length
83
- end
84
- @buffer.slice!(0, pos) if pos > 0
85
- rescue => e
86
- @log.error "unexpected error", error: e, error_class: e.class
87
- close
88
- end
89
-
90
- def on_close
91
- @log.trace { "closed fluent socket object_id=#{self.object_id}" }
92
- end
93
- end
94
-
95
- class BaseInput < Fluent::Input
96
- def initialize
97
- super
98
- require 'fluent/parser'
99
- end
100
-
101
- desc 'Tag of output events.'
102
- config_param :tag, :string
103
- desc 'The format of the payload.'
104
- config_param :format, :string
105
- desc 'The port to listen to.'
106
- config_param :port, :integer, default: 5150
107
- desc 'The bind address to listen to.'
108
- config_param :bind, :string, default: '0.0.0.0'
109
- desc "Deprecated parameter. Use source_hostname_key instead"
110
- config_param :source_host_key, :string, default: nil, deprecated: "Use source_hostname_key instead"
111
- desc "The field name of the client's hostname."
112
- config_param :source_hostname_key, :string, default: nil
113
- config_param :blocking_timeout, :time, default: 0.5
114
-
115
- def configure(conf)
116
- super
117
-
118
- @source_hostname_key = @source_host_key if @source_host_key
119
- @parser = Plugin.new_parser(@format)
120
- @parser.configure(conf)
121
- end
122
-
123
- def start
124
- @loop = Coolio::Loop.new
125
- @handler = listen(method(:on_message))
126
- @loop.attach(@handler)
127
- @thread = Thread.new(&method(:run))
128
- end
129
-
130
- def shutdown
131
- @loop.watchers.each { |w| w.detach }
132
- @loop.stop
133
- @handler.close
134
- @thread.join
135
- end
136
-
137
- def run
138
- @loop.run(@blocking_timeout)
139
- rescue => e
140
- log.error "unexpected error", error: e, error_class: e.class
141
- log.error_backtrace
142
- end
143
-
144
- private
145
-
146
- def on_message(msg, addr)
147
- @parser.parse(msg) { |time, record|
148
- unless time && record
149
- log.warn "pattern not match: #{msg.inspect}"
150
- return
151
- end
152
-
153
- record[@source_hostname_key] = addr[2] if @source_hostname_key
154
- router.emit(@tag, time, record)
155
- }
156
- rescue => e
157
- log.error msg.dump, error: e, error_class: e.class, host: addr[3]
158
- log.error_backtrace
159
- end
160
- end
161
- end
20
+ # obsolete
21
+ SocketUtil = Fluent::Compat::SocketUtil
162
22
  end
@@ -0,0 +1,84 @@
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/base'
18
+ require 'fluent/plugin/owned_by_mixin'
19
+
20
+ module Fluent
21
+ module Plugin
22
+ class Storage < Base
23
+ include OwnedByMixin
24
+
25
+ DEFAULT_TYPE = 'local'
26
+
27
+ configured_in :storage
28
+
29
+ config_param :persistent, :bool, default: false # load/save with all operations
30
+ config_param :autosave, :bool, default: true
31
+ config_param :autosave_interval, :time, default: 10
32
+ config_param :save_at_shutdown, :bool, default: true
33
+
34
+ def self.validate_key(key)
35
+ raise ArgumentError, "key must be a string (or symbol for to_s)" unless key.is_a?(String) || key.is_a?(Symbol)
36
+ key.to_s
37
+ end
38
+
39
+ attr_accessor :log
40
+
41
+ def persistent_always?
42
+ false
43
+ end
44
+
45
+ def synchronized?
46
+ false
47
+ end
48
+
49
+ def implementation
50
+ self
51
+ end
52
+
53
+ def load
54
+ # load storage data from any data source, or initialize storage internally
55
+ end
56
+
57
+ def save
58
+ # save internal data store into data source (to be loaded)
59
+ end
60
+
61
+ def get(key)
62
+ raise NotImplementedError, "Implement this method in child class"
63
+ end
64
+
65
+ def fetch(key, defval)
66
+ raise NotImplementedError, "Implement this method in child class"
67
+ end
68
+
69
+ def put(key, value)
70
+ # return value
71
+ raise NotImplementedError, "Implement this method in child class"
72
+ end
73
+
74
+ def delete(key)
75
+ # return deleted value
76
+ raise NotImplementedError, "Implement this method in child class"
77
+ end
78
+
79
+ def update(key, &block) # transactional get-and-update
80
+ raise NotImplementedError, "Implement this method in child class"
81
+ end
82
+ end
83
+ end
84
+ end