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
@@ -26,13 +26,26 @@ module Fluent
26
26
  'Fluent::Config::Section'
27
27
  end
28
28
 
29
- def initialize(params = {})
29
+ def initialize(params = {}, config_element = nil)
30
30
  @klass = 'Fluent::Config::Section'
31
31
  @params = params
32
+ @corresponding_config_element = config_element
32
33
  end
33
34
 
34
35
  alias :object_id :__id__
35
36
 
37
+ def corresponding_config_element
38
+ @corresponding_config_element
39
+ end
40
+
41
+ def class
42
+ Section
43
+ end
44
+
45
+ def to_s
46
+ inspect
47
+ end
48
+
36
49
  def inspect
37
50
  "<Fluent::Config::Section #{@params.to_json}>"
38
51
  end
@@ -62,6 +75,23 @@ module Fluent
62
75
  @params[key.to_sym]
63
76
  end
64
77
 
78
+ def []=(key, value)
79
+ @params[key.to_sym] = value
80
+ end
81
+
82
+ def respond_to?(symbol, include_all=false)
83
+ case symbol
84
+ when :inspect, :nil?, :to_h, :+, :instance_of?, :kind_of?, :[], :respond_to?, :respond_to_missing?
85
+ true
86
+ when :!, :!= , :==, :equal?, :instance_eval, :instance_exec
87
+ true
88
+ when :method_missing, :singleton_method_added, :singleton_method_removed, :singleton_method_undefined
89
+ include_all
90
+ else
91
+ false
92
+ end
93
+ end
94
+
65
95
  def respond_to_missing?(symbol, include_private)
66
96
  @params.has_key?(symbol)
67
97
  end
@@ -70,7 +100,7 @@ module Fluent
70
100
  if @params.has_key?(name)
71
101
  @params[name]
72
102
  else
73
- super
103
+ ::Kernel.raise ::NoMethodError, "undefined method `#{name}' for #{self.inspect}"
74
104
  end
75
105
  end
76
106
  end
@@ -88,7 +118,7 @@ module Fluent
88
118
 
89
119
  proxy.defaults.each_pair do |name, defval|
90
120
  varname = name.to_sym
91
- section_params[varname] = defval
121
+ section_params[varname] = (defval.dup rescue defval)
92
122
  end
93
123
 
94
124
  if proxy.argument
@@ -97,7 +127,7 @@ module Fluent
97
127
  section_params[key] = self.instance_exec(conf.arg, opts, name, &block)
98
128
  end
99
129
  unless section_params.has_key?(proxy.argument.first)
100
- logger.error "config error in:\n#{conf}"
130
+ logger.error "config error in:\n#{conf}" if logger # logger should exist, but somethimes it's nil (e.g, in tests)
101
131
  raise ConfigError, "'<#{proxy.name} ARG>' section requires argument" + section_stack
102
132
  end
103
133
  # argument should NOT be deprecated... (argument always has a value: '')
@@ -121,7 +151,7 @@ module Fluent
121
151
  # because they are expected to be removed entirely sometime in the future.
122
152
  # Obsoleted: These obsolete features have been entirely removed from JavaScript and can no longer be used.
123
153
  if opts[:deprecated]
124
- logger.warn "'#{name}' parameter is deprecated: #{opts[:deprecated]}"
154
+ logger.warn "'#{name}' parameter is deprecated: #{opts[:deprecated]}" if logger
125
155
  end
126
156
  if opts[:obsoleted]
127
157
  logger.error "config error in:\n#{conf}" if logger
@@ -129,7 +159,7 @@ module Fluent
129
159
  end
130
160
  end
131
161
  unless section_params.has_key?(varname)
132
- logger.error "config error in:\n#{conf}"
162
+ logger.error "config error in:\n#{conf}" if logger
133
163
  raise ConfigError, "'#{name}' parameter is required" + section_stack
134
164
  end
135
165
  end
@@ -137,39 +167,46 @@ module Fluent
137
167
  check_unused_section(proxy, conf, plugin_class)
138
168
 
139
169
  proxy.sections.each do |name, subproxy|
140
- varname = subproxy.param_name.to_sym
170
+ varname = subproxy.variable_name
141
171
  elements = (conf.respond_to?(:elements) ? conf.elements : []).select{ |e| e.name == subproxy.name.to_s || e.name == subproxy.alias.to_s }
172
+ if elements.empty? && subproxy.init?
173
+ if subproxy.argument && !subproxy.defaults.has_key?(subproxy.argument.first)
174
+ raise ArgumentError, "#{name}: init is specified, but default value of argument is missing"
175
+ end
176
+ missing_keys = subproxy.params.keys.select{|param_name| !subproxy.defaults.has_key?(param_name)}
177
+ if !missing_keys.empty?
178
+ raise ArgumentError, "#{name}: init is specified, but there're parameters without default values:#{missing_keys.join(',')}"
179
+ end
180
+ elements << Fluent::Config::Element.new(subproxy.name.to_s, '', {}, [])
181
+ end
182
+
142
183
  # set subproxy for secret option
143
184
  elements.each { |element|
144
185
  element.corresponding_proxies << subproxy
145
186
  }
146
187
 
147
188
  if subproxy.required? && elements.size < 1
148
- logger.error "config error in:\n#{conf}"
189
+ logger.error "config error in:\n#{conf}" if logger
149
190
  raise ConfigError, "'<#{subproxy.name}>' sections are required" + section_stack
150
191
  end
151
192
  if subproxy.multi?
152
193
  section_params[varname] = elements.map{ |e| generate(subproxy, e, logger, plugin_class, stack + [subproxy.name]) }
153
194
  else
154
195
  if elements.size > 1
155
- logger.error "config error in:\n#{conf}"
196
+ logger.error "config error in:\n#{conf}" if logger
156
197
  raise ConfigError, "'<#{subproxy.name}>' section cannot be written twice or more" + section_stack
157
198
  end
158
199
  section_params[varname] = generate(subproxy, elements.first, logger, plugin_class, stack + [subproxy.name])
159
200
  end
160
201
  end
161
202
 
162
- Section.new(section_params)
203
+ Section.new(section_params, conf)
163
204
  end
164
205
 
165
206
  def self.check_unused_section(proxy, conf, plugin_class)
166
207
  elems = conf.respond_to?(:elements) ? conf.elements : []
167
208
  elems.each { |e|
168
209
  next if plugin_class.nil? && Fluent::Config::V1Parser::ELEM_SYMBOLS.include?(e.name) # skip pre-defined non-plugin elements because it doens't have proxy section
169
- # In v0.12, buffer and output parameters are defined in same place.
170
- # It causes same configuration is used in different buffer / output
171
- # and buffer plugin's sections are always empty. It should be skipped.
172
- next if proxy.sections.empty?
173
210
 
174
211
  unless proxy.sections.any? { |name, subproxy| e.name == subproxy.name.to_s || e.name == subproxy.alias.to_s }
175
212
  parent_name = if conf.arg.empty?
@@ -17,7 +17,6 @@
17
17
  require 'json'
18
18
 
19
19
  require 'fluent/config/error'
20
- require 'fluent/configurable'
21
20
 
22
21
  module Fluent
23
22
  module Config
@@ -61,11 +60,35 @@ module Fluent
61
60
  when ''
62
61
  true
63
62
  else
64
- nil
63
+ # Current parser passes comment without actual values, e.g. "param #foo".
64
+ # parser should pass empty string in this case but changing behaviour may break existing environment so keep parser behaviour. Just ignore comment value in boolean handling for now.
65
+ if str.respond_to?('start_with?') && str.start_with?('#')
66
+ true
67
+ else
68
+ nil
69
+ end
65
70
  end
66
71
  end
67
72
 
68
- STRING_TYPE = Proc.new { |val, opts| val.to_s.force_encoding(Encoding::UTF_8) }
73
+ def self.regexp_value(str)
74
+ return nil unless str
75
+ return Regexp.compile(str) unless str.start_with?("/")
76
+ right_slash_position = str.rindex("/")
77
+ if right_slash_position < str.size - 3
78
+ raise Fluent::ConfigError, "invalid regexp: missing right slash: #{str}"
79
+ end
80
+ options = str[(right_slash_position + 1)..-1]
81
+ option = 0
82
+ option |= Regexp::IGNORECASE if options.include?("i")
83
+ option |= Regexp::MULTILINE if options.include?("m")
84
+ Regexp.compile(str[1...right_slash_position], option)
85
+ end
86
+
87
+ STRING_TYPE = Proc.new { |val, opts|
88
+ v = val.to_s
89
+ v = v.frozen? ? v.dup : v # config_param can't assume incoming string is mutable
90
+ v.force_encoding(Encoding::UTF_8)
91
+ }
69
92
  ENUM_TYPE = Proc.new { |val, opts|
70
93
  s = val.to_sym
71
94
  list = opts[:list]
@@ -80,6 +103,7 @@ module Fluent
80
103
  SIZE_TYPE = Proc.new { |val, opts| Config.size_value(val) }
81
104
  BOOL_TYPE = Proc.new { |val, opts| Config.bool_value(val) }
82
105
  TIME_TYPE = Proc.new { |val, opts| Config.time_value(val) }
106
+ REGEXP_TYPE = Proc.new { |val, opts| Config.regexp_value(val) }
83
107
 
84
108
  REFORMAT_VALUE = ->(type, value) {
85
109
  if value.nil?
@@ -92,6 +116,7 @@ module Fluent
92
116
  when :size then Config.size_value(value)
93
117
  when :bool then Config.bool_value(value)
94
118
  when :time then Config.time_value(value)
119
+ when :regexp then Config.regexp_value(value)
95
120
  else
96
121
  raise "unknown type in REFORMAT: #{type}"
97
122
  end
@@ -134,14 +159,4 @@ module Fluent
134
159
  end
135
160
  }
136
161
  end
137
-
138
- Configurable.register_type(:string, Config::STRING_TYPE)
139
- Configurable.register_type(:enum, Config::ENUM_TYPE)
140
- Configurable.register_type(:integer, Config::INTEGER_TYPE)
141
- Configurable.register_type(:float, Config::FLOAT_TYPE)
142
- Configurable.register_type(:size, Config::SIZE_TYPE)
143
- Configurable.register_type(:bool, Config::BOOL_TYPE)
144
- Configurable.register_type(:time, Config::TIME_TYPE)
145
- Configurable.register_type(:hash, Config::HASH_TYPE)
146
- Configurable.register_type(:array, Config::ARRAY_TYPE)
147
162
  end
@@ -82,7 +82,7 @@ module Fluent
82
82
  elsif skip(/\</)
83
83
  e_name = scan(ELEMENT_NAME)
84
84
  spacing
85
- e_arg = scan_nonquoted_string(/(?:#{ZERO_OR_MORE_SPACING}\>)/)
85
+ e_arg = scan_string(/(?:#{ZERO_OR_MORE_SPACING}\>)/)
86
86
  spacing
87
87
  unless skip(/\>/)
88
88
  parse_error! "expected '>'"
@@ -106,7 +106,7 @@ module Fluent
106
106
  else
107
107
  k = scan_string(SPACING)
108
108
  spacing_without_comment
109
- if prev_match.include?("\n") # support 'tag_mapped' like "without value" configuration
109
+ if prev_match.include?("\n") || eof? # support 'tag_mapped' like "without value" configuration
110
110
  attrs[k] = ""
111
111
  else
112
112
  if k == '@include'
@@ -157,7 +157,6 @@ module Fluent
157
157
  else
158
158
  pattern = path
159
159
  end
160
-
161
160
  Dir.glob(pattern).sort.each { |entry|
162
161
  basepath = File.dirname(entry)
163
162
  fname = File.basename(entry)
@@ -175,9 +174,8 @@ module Fluent
175
174
  ss = StringScanner.new(data)
176
175
  V1Parser.new(ss, basepath, fname, @eval_context).parse_element(true, nil, attrs, elems)
177
176
  end
178
-
179
177
  rescue SystemCallError => e
180
- cpe = ConfigParseError.new("include error #{uri}")
178
+ cpe = ConfigParseError.new("include error #{uri} - #{e}")
181
179
  cpe.set_backtrace(e.backtrace)
182
180
  raise cpe
183
181
  end
data/lib/fluent/config.rb CHANGED
@@ -20,18 +20,32 @@ require 'fluent/configurable'
20
20
 
21
21
  module Fluent
22
22
  module Config
23
- def self.parse(str, fname, basepath = Dir.pwd, v1_config = false)
24
- if fname =~ /\.rb$/
23
+ def self.parse(str, fname, basepath = Dir.pwd, v1_config = nil, syntax: :v1)
24
+ parser = if fname =~ /\.rb$/ || syntax == :ruby
25
+ :ruby
26
+ elsif v1_config.nil?
27
+ case syntax
28
+ when :v1 then :v1
29
+ when :v0 then :v0
30
+ else
31
+ raise ArgumentError, "Unknown Fluentd configuration syntax: '#{syntax}'"
32
+ end
33
+ elsif v1_config then :v1
34
+ else :v0
35
+ end
36
+ case parser
37
+ when :v1
38
+ require 'fluent/config/v1_parser'
39
+ V1Parser.parse(str, fname, basepath, Kernel.binding)
40
+ when :v0
41
+ # TODO: show deprecated message in v1
42
+ require 'fluent/config/parser'
43
+ Parser.parse(str, fname, basepath)
44
+ when :ruby
25
45
  require 'fluent/config/dsl'
26
46
  Config::DSL::Parser.parse(str, File.join(basepath, fname))
27
47
  else
28
- if v1_config
29
- require 'fluent/config/v1_parser'
30
- V1Parser.parse(str, fname, basepath, Kernel.binding)
31
- else
32
- require 'fluent/config/parser'
33
- Parser.parse(str, fname, basepath)
34
- end
48
+ raise "[BUG] unknown configuration parser specification:'#{parser}'"
35
49
  end
36
50
  end
37
51
 
@@ -39,15 +53,4 @@ module Fluent
39
53
  Element.new(name, '', {}, [])
40
54
  end
41
55
  end
42
-
43
- module PluginId
44
- def configure(conf)
45
- @id = conf['@id'] || conf['id']
46
- super
47
- end
48
-
49
- def plugin_id
50
- @id ? @id : "object:#{object_id.to_s(16)}"
51
- end
52
- end
53
56
  end
@@ -19,7 +19,7 @@ require 'fluent/config/section'
19
19
  require 'fluent/config/error'
20
20
  require 'fluent/registry'
21
21
  require 'fluent/plugin'
22
- require 'fluent/mixin'
22
+ require 'fluent/config/types'
23
23
 
24
24
  module Fluent
25
25
  module Configurable
@@ -28,40 +28,76 @@ module Fluent
28
28
  end
29
29
 
30
30
  def initialize
31
+ super
31
32
  # to simulate implicit 'attr_accessor' by config_param / config_section and its value by config_set_default
32
33
  proxy = self.class.merged_configure_proxy
33
34
  proxy.params.keys.each do |name|
35
+ next if name.to_s.start_with?('@')
34
36
  if proxy.defaults.has_key?(name)
35
37
  instance_variable_set("@#{name}".to_sym, proxy.defaults[name])
36
38
  end
37
39
  end
38
40
  proxy.sections.keys.each do |name|
41
+ next if name.to_s.start_with?('@')
39
42
  subproxy = proxy.sections[name]
40
43
  if subproxy.multi?
41
- instance_variable_set("@#{subproxy.param_name}".to_sym, [])
44
+ instance_variable_set("@#{subproxy.variable_name}".to_sym, [])
42
45
  else
43
- instance_variable_set("@#{subproxy.param_name}".to_sym, nil)
46
+ instance_variable_set("@#{subproxy.variable_name}".to_sym, nil)
44
47
  end
45
48
  end
46
49
  end
47
50
 
51
+ def configure_proxy_generate
52
+ proxy = self.class.merged_configure_proxy
53
+
54
+ if self.respond_to?(:owner) && self.owner
55
+ owner_proxy = owner.class.merged_configure_proxy
56
+ if proxy.configured_in_section
57
+ owner_proxy = owner_proxy.sections[proxy.configured_in_section]
58
+ end
59
+ proxy.overwrite_defaults(owner_proxy) if owner_proxy
60
+ end
61
+
62
+ proxy
63
+ end
64
+
65
+ def configured_section_create(name, conf = nil)
66
+ conf ||= Fluent::Config::Element.new(name.to_s, '', {}, [])
67
+ root_proxy = configure_proxy_generate
68
+ proxy = if name.nil? # root
69
+ root_proxy
70
+ else
71
+ root_proxy.sections[name]
72
+ end
73
+ # take care to raise Fluent::ConfigError if conf mismatched to proxy
74
+ Fluent::Config::SectionGenerator.generate(proxy, conf, nil, nil)
75
+ end
76
+
48
77
  def configure(conf)
49
78
  @config = conf
50
79
 
51
- logger = self.respond_to?(:log) ? log : $log
52
- proxy = self.class.merged_configure_proxy
80
+ logger = if self.respond_to?(:log)
81
+ self.log
82
+ elsif self.respond_to?(:owner) && self.owner.respond_to?(:log)
83
+ self.owner.log
84
+ elsif defined?($log)
85
+ $log
86
+ else
87
+ nil
88
+ end
89
+ proxy = configure_proxy_generate
53
90
  conf.corresponding_proxies << proxy
54
91
 
55
92
  # In the nested section, can't get plugin class through proxies so get plugin class here
56
- plugin_class = Fluent::Plugin.lookup_name_from_class(proxy.name.to_s)
93
+ plugin_class = Fluent::Plugin.lookup_type_from_class(proxy.name.to_s)
57
94
  root = Fluent::Config::SectionGenerator.generate(proxy, conf, logger, plugin_class)
58
95
  @config_root_section = root
59
96
 
60
97
  root.instance_eval{ @params.keys }.each do |param_name|
98
+ next if param_name.to_s.start_with?('@')
61
99
  varname = "@#{param_name}".to_sym
62
- if (! root[param_name].nil?) || instance_variable_get(varname).nil?
63
- instance_variable_set(varname, root[param_name])
64
- end
100
+ instance_variable_set(varname, root[param_name])
65
101
  end
66
102
 
67
103
  self
@@ -82,6 +118,21 @@ module Fluent
82
118
  CONFIG_TYPE_REGISTRY.lookup(type)
83
119
  end
84
120
 
121
+ {
122
+ string: Config::STRING_TYPE,
123
+ enum: Config::ENUM_TYPE,
124
+ integer: Config::INTEGER_TYPE,
125
+ float: Config::FLOAT_TYPE,
126
+ size: Config::SIZE_TYPE,
127
+ bool: Config::BOOL_TYPE,
128
+ time: Config::TIME_TYPE,
129
+ hash: Config::HASH_TYPE,
130
+ array: Config::ARRAY_TYPE,
131
+ regexp: Config::REGEXP_TYPE,
132
+ }.each do |name, type|
133
+ register_type(name, type)
134
+ end
135
+
85
136
  module ClassMethods
86
137
  def configure_proxy_map
87
138
  map = {}
@@ -92,15 +143,21 @@ module Fluent
92
143
  def configure_proxy(mod_name)
93
144
  map = configure_proxy_map
94
145
  unless map[mod_name]
95
- proxy = Fluent::Config::ConfigureProxy.new(mod_name, required: true, multi: false)
146
+ type_lookup = ->(type) { Fluent::Configurable.lookup_type(type) }
147
+ proxy = Fluent::Config::ConfigureProxy.new(mod_name, root: true, required: true, multi: false, type_lookup: type_lookup)
96
148
  map[mod_name] = proxy
97
149
  end
98
150
  map[mod_name]
99
151
  end
100
152
 
101
- def config_param(name, *args, &block)
102
- configure_proxy(self.name).config_param(name, *args, &block)
103
- attr_accessor name
153
+ def configured_in(section_name)
154
+ configure_proxy(self.name).configured_in(section_name)
155
+ end
156
+
157
+ def config_param(name, type = nil, **kwargs, &block)
158
+ configure_proxy(self.name).config_param(name, type, **kwargs, &block)
159
+ # reserved names '@foo' are invalid as attr_accessor name
160
+ attr_accessor(name) unless kwargs[:skip_accessor] || Fluent::Config::Element::RESERVED_PARAMETERS.include?(name.to_s)
104
161
  end
105
162
 
106
163
  def config_set_default(name, defval)
@@ -111,9 +168,13 @@ module Fluent
111
168
  configure_proxy(self.name).config_set_desc(name, desc)
112
169
  end
113
170
 
114
- def config_section(name, *args, &block)
115
- configure_proxy(self.name).config_section(name, *args, &block)
116
- attr_accessor configure_proxy(self.name).sections[name].param_name
171
+ def config_section(name, **kwargs, &block)
172
+ section_already_exists = !!merged_configure_proxy.sections[name]
173
+ configure_proxy(self.name).config_section(name, **kwargs, &block)
174
+ variable_name = configure_proxy(self.name).sections[name].variable_name
175
+ if !section_already_exists && !self.respond_to?(variable_name)
176
+ attr_accessor variable_name
177
+ end
117
178
  end
118
179
 
119
180
  def desc(description)
@@ -132,12 +193,9 @@ module Fluent
132
193
  configurables.map{ |a| a.configure_proxy(a.name || a.object_id.to_s) }.reduce(:merge)
133
194
  end
134
195
 
135
- def dump(level = 0)
136
- configure_proxy_map[self.to_s].dump(level)
196
+ def dump_config_definition
197
+ configure_proxy_map[self.to_s].dump_config_definition
137
198
  end
138
199
  end
139
200
  end
140
-
141
- # load default types
142
- require 'fluent/config/types'
143
201
  end
@@ -0,0 +1,46 @@
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 'cool.io'
18
+ require 'fluent/msgpack_factory'
19
+
20
+ module Fluent
21
+ module Counter
22
+ class BaseSocket < Coolio::TCPSocket
23
+ include Fluent::MessagePackFactory::Mixin
24
+
25
+ def packed_write(data)
26
+ write pack(data)
27
+ end
28
+
29
+ def on_read(data)
30
+ msgpack_unpacker.feed_each(data) do |d|
31
+ on_message d
32
+ end
33
+ end
34
+
35
+ def on_message(data)
36
+ raise NotImplementedError
37
+ end
38
+
39
+ private
40
+
41
+ def pack(data)
42
+ msgpack_packer.pack(data)
43
+ end
44
+ end
45
+ end
46
+ end