fluentd 1.17.0-x86-mingw32 → 1.17.1-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -0
  3. data/README.md +1 -0
  4. data/SECURITY.md +2 -2
  5. data/fluent.conf +14 -14
  6. data/lib/fluent/command/cap_ctl.rb +4 -4
  7. data/lib/fluent/compat/call_super_mixin.rb +3 -3
  8. data/lib/fluent/compat/propagate_default.rb +4 -4
  9. data/lib/fluent/config/yaml_parser/parser.rb +4 -0
  10. data/lib/fluent/log/console_adapter.rb +4 -2
  11. data/lib/fluent/plugin/in_exec.rb +14 -2
  12. data/lib/fluent/plugin/in_http.rb +1 -1
  13. data/lib/fluent/plugin/in_sample.rb +13 -7
  14. data/lib/fluent/plugin/in_tail.rb +65 -23
  15. data/lib/fluent/plugin/out_copy.rb +1 -1
  16. data/lib/fluent/plugin/out_file.rb +8 -0
  17. data/lib/fluent/plugin/out_http.rb +12 -0
  18. data/lib/fluent/plugin/parser_json.rb +4 -12
  19. data/lib/fluent/plugin_helper/http_server/server.rb +1 -1
  20. data/lib/fluent/version.rb +1 -1
  21. data/templates/new_gem/fluent-plugin.gemspec.erb +6 -5
  22. metadata +25 -472
  23. data/.github/DISCUSSION_TEMPLATE/q-a-japanese.yml +0 -50
  24. data/.github/DISCUSSION_TEMPLATE/q-a.yml +0 -47
  25. data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
  26. data/.github/ISSUE_TEMPLATE/config.yml +0 -5
  27. data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -39
  28. data/.github/ISSUE_TEMPLATE.md +0 -17
  29. data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  30. data/.github/workflows/stale-actions.yml +0 -24
  31. data/.github/workflows/test-ruby-head.yml +0 -31
  32. data/.github/workflows/test.yml +0 -32
  33. data/.gitignore +0 -30
  34. data/Gemfile +0 -9
  35. data/fluentd.gemspec +0 -62
  36. data/test/command/test_binlog_reader.rb +0 -362
  37. data/test/command/test_ca_generate.rb +0 -70
  38. data/test/command/test_cap_ctl.rb +0 -100
  39. data/test/command/test_cat.rb +0 -128
  40. data/test/command/test_ctl.rb +0 -56
  41. data/test/command/test_fluentd.rb +0 -1291
  42. data/test/command/test_plugin_config_formatter.rb +0 -397
  43. data/test/command/test_plugin_generator.rb +0 -109
  44. data/test/compat/test_calls_super.rb +0 -166
  45. data/test/compat/test_parser.rb +0 -92
  46. data/test/config/assertions.rb +0 -42
  47. data/test/config/test_config_parser.rb +0 -551
  48. data/test/config/test_configurable.rb +0 -1784
  49. data/test/config/test_configure_proxy.rb +0 -604
  50. data/test/config/test_dsl.rb +0 -415
  51. data/test/config/test_element.rb +0 -518
  52. data/test/config/test_literal_parser.rb +0 -309
  53. data/test/config/test_plugin_configuration.rb +0 -56
  54. data/test/config/test_section.rb +0 -191
  55. data/test/config/test_system_config.rb +0 -195
  56. data/test/config/test_types.rb +0 -408
  57. data/test/counter/test_client.rb +0 -563
  58. data/test/counter/test_error.rb +0 -44
  59. data/test/counter/test_mutex_hash.rb +0 -179
  60. data/test/counter/test_server.rb +0 -589
  61. data/test/counter/test_store.rb +0 -258
  62. data/test/counter/test_validator.rb +0 -137
  63. data/test/helper.rb +0 -155
  64. data/test/helpers/fuzzy_assert.rb +0 -89
  65. data/test/helpers/process_extenstion.rb +0 -33
  66. data/test/log/test_console_adapter.rb +0 -117
  67. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  68. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  69. data/test/plugin/data/2010/01/20100102.log +0 -0
  70. data/test/plugin/data/log/bar +0 -0
  71. data/test/plugin/data/log/foo/bar.log +0 -0
  72. data/test/plugin/data/log/foo/bar2 +0 -0
  73. data/test/plugin/data/log/test.log +0 -0
  74. data/test/plugin/data/log_numeric/01.log +0 -0
  75. data/test/plugin/data/log_numeric/02.log +0 -0
  76. data/test/plugin/data/log_numeric/12.log +0 -0
  77. data/test/plugin/data/log_numeric/14.log +0 -0
  78. data/test/plugin/data/sd_file/config +0 -11
  79. data/test/plugin/data/sd_file/config.json +0 -17
  80. data/test/plugin/data/sd_file/config.yaml +0 -11
  81. data/test/plugin/data/sd_file/config.yml +0 -11
  82. data/test/plugin/data/sd_file/invalid_config.yml +0 -7
  83. data/test/plugin/in_tail/test_fifo.rb +0 -121
  84. data/test/plugin/in_tail/test_io_handler.rb +0 -150
  85. data/test/plugin/in_tail/test_position_file.rb +0 -346
  86. data/test/plugin/out_forward/test_ack_handler.rb +0 -140
  87. data/test/plugin/out_forward/test_connection_manager.rb +0 -145
  88. data/test/plugin/out_forward/test_handshake_protocol.rb +0 -112
  89. data/test/plugin/out_forward/test_load_balancer.rb +0 -106
  90. data/test/plugin/out_forward/test_socket_cache.rb +0 -174
  91. data/test/plugin/test_bare_output.rb +0 -131
  92. data/test/plugin/test_base.rb +0 -247
  93. data/test/plugin/test_buf_file.rb +0 -1314
  94. data/test/plugin/test_buf_file_single.rb +0 -898
  95. data/test/plugin/test_buf_memory.rb +0 -42
  96. data/test/plugin/test_buffer.rb +0 -1493
  97. data/test/plugin/test_buffer_chunk.rb +0 -209
  98. data/test/plugin/test_buffer_file_chunk.rb +0 -871
  99. data/test/plugin/test_buffer_file_single_chunk.rb +0 -611
  100. data/test/plugin/test_buffer_memory_chunk.rb +0 -339
  101. data/test/plugin/test_compressable.rb +0 -87
  102. data/test/plugin/test_file_util.rb +0 -96
  103. data/test/plugin/test_filter.rb +0 -368
  104. data/test/plugin/test_filter_grep.rb +0 -697
  105. data/test/plugin/test_filter_parser.rb +0 -731
  106. data/test/plugin/test_filter_record_transformer.rb +0 -577
  107. data/test/plugin/test_filter_stdout.rb +0 -207
  108. data/test/plugin/test_formatter_csv.rb +0 -136
  109. data/test/plugin/test_formatter_hash.rb +0 -38
  110. data/test/plugin/test_formatter_json.rb +0 -61
  111. data/test/plugin/test_formatter_ltsv.rb +0 -70
  112. data/test/plugin/test_formatter_msgpack.rb +0 -28
  113. data/test/plugin/test_formatter_out_file.rb +0 -116
  114. data/test/plugin/test_formatter_single_value.rb +0 -44
  115. data/test/plugin/test_formatter_tsv.rb +0 -76
  116. data/test/plugin/test_in_debug_agent.rb +0 -49
  117. data/test/plugin/test_in_exec.rb +0 -261
  118. data/test/plugin/test_in_forward.rb +0 -1178
  119. data/test/plugin/test_in_gc_stat.rb +0 -62
  120. data/test/plugin/test_in_http.rb +0 -1124
  121. data/test/plugin/test_in_monitor_agent.rb +0 -922
  122. data/test/plugin/test_in_object_space.rb +0 -66
  123. data/test/plugin/test_in_sample.rb +0 -190
  124. data/test/plugin/test_in_syslog.rb +0 -505
  125. data/test/plugin/test_in_tail.rb +0 -3429
  126. data/test/plugin/test_in_tcp.rb +0 -328
  127. data/test/plugin/test_in_udp.rb +0 -296
  128. data/test/plugin/test_in_unix.rb +0 -181
  129. data/test/plugin/test_input.rb +0 -137
  130. data/test/plugin/test_metadata.rb +0 -89
  131. data/test/plugin/test_metrics.rb +0 -294
  132. data/test/plugin/test_metrics_local.rb +0 -96
  133. data/test/plugin/test_multi_output.rb +0 -204
  134. data/test/plugin/test_out_copy.rb +0 -308
  135. data/test/plugin/test_out_exec.rb +0 -312
  136. data/test/plugin/test_out_exec_filter.rb +0 -606
  137. data/test/plugin/test_out_file.rb +0 -1038
  138. data/test/plugin/test_out_forward.rb +0 -1349
  139. data/test/plugin/test_out_http.rb +0 -557
  140. data/test/plugin/test_out_null.rb +0 -105
  141. data/test/plugin/test_out_relabel.rb +0 -28
  142. data/test/plugin/test_out_roundrobin.rb +0 -146
  143. data/test/plugin/test_out_secondary_file.rb +0 -458
  144. data/test/plugin/test_out_stdout.rb +0 -205
  145. data/test/plugin/test_out_stream.rb +0 -103
  146. data/test/plugin/test_output.rb +0 -1334
  147. data/test/plugin/test_output_as_buffered.rb +0 -2024
  148. data/test/plugin/test_output_as_buffered_backup.rb +0 -363
  149. data/test/plugin/test_output_as_buffered_compress.rb +0 -179
  150. data/test/plugin/test_output_as_buffered_overflow.rb +0 -250
  151. data/test/plugin/test_output_as_buffered_retries.rb +0 -966
  152. data/test/plugin/test_output_as_buffered_secondary.rb +0 -882
  153. data/test/plugin/test_output_as_standard.rb +0 -374
  154. data/test/plugin/test_owned_by.rb +0 -34
  155. data/test/plugin/test_parser.rb +0 -399
  156. data/test/plugin/test_parser_apache.rb +0 -42
  157. data/test/plugin/test_parser_apache2.rb +0 -47
  158. data/test/plugin/test_parser_apache_error.rb +0 -45
  159. data/test/plugin/test_parser_csv.rb +0 -200
  160. data/test/plugin/test_parser_json.rb +0 -244
  161. data/test/plugin/test_parser_labeled_tsv.rb +0 -160
  162. data/test/plugin/test_parser_msgpack.rb +0 -127
  163. data/test/plugin/test_parser_multiline.rb +0 -111
  164. data/test/plugin/test_parser_nginx.rb +0 -88
  165. data/test/plugin/test_parser_none.rb +0 -52
  166. data/test/plugin/test_parser_regexp.rb +0 -284
  167. data/test/plugin/test_parser_syslog.rb +0 -650
  168. data/test/plugin/test_parser_tsv.rb +0 -122
  169. data/test/plugin/test_sd_file.rb +0 -228
  170. data/test/plugin/test_sd_srv.rb +0 -230
  171. data/test/plugin/test_storage.rb +0 -166
  172. data/test/plugin/test_storage_local.rb +0 -335
  173. data/test/plugin/test_string_util.rb +0 -26
  174. data/test/plugin_helper/data/cert/cert-key.pem +0 -27
  175. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +0 -19
  176. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +0 -19
  177. data/test/plugin_helper/data/cert/cert.pem +0 -19
  178. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +0 -27
  179. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +0 -20
  180. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +0 -27
  181. data/test/plugin_helper/data/cert/cert_chains/cert.pem +0 -40
  182. data/test/plugin_helper/data/cert/empty.pem +0 -0
  183. data/test/plugin_helper/data/cert/generate_cert.rb +0 -125
  184. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +0 -30
  185. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +0 -27
  186. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +0 -20
  187. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +0 -20
  188. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +0 -30
  189. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +0 -27
  190. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +0 -21
  191. data/test/plugin_helper/data/cert/with_ca/cert.pem +0 -21
  192. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +0 -30
  193. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +0 -27
  194. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +0 -20
  195. data/test/plugin_helper/data/cert/without_ca/cert.pem +0 -20
  196. data/test/plugin_helper/http_server/test_app.rb +0 -65
  197. data/test/plugin_helper/http_server/test_route.rb +0 -32
  198. data/test/plugin_helper/service_discovery/test_manager.rb +0 -93
  199. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +0 -21
  200. data/test/plugin_helper/test_cert_option.rb +0 -25
  201. data/test/plugin_helper/test_child_process.rb +0 -862
  202. data/test/plugin_helper/test_compat_parameters.rb +0 -358
  203. data/test/plugin_helper/test_event_emitter.rb +0 -80
  204. data/test/plugin_helper/test_event_loop.rb +0 -52
  205. data/test/plugin_helper/test_extract.rb +0 -194
  206. data/test/plugin_helper/test_formatter.rb +0 -255
  207. data/test/plugin_helper/test_http_server_helper.rb +0 -372
  208. data/test/plugin_helper/test_inject.rb +0 -561
  209. data/test/plugin_helper/test_metrics.rb +0 -137
  210. data/test/plugin_helper/test_parser.rb +0 -264
  211. data/test/plugin_helper/test_record_accessor.rb +0 -238
  212. data/test/plugin_helper/test_retry_state.rb +0 -1006
  213. data/test/plugin_helper/test_server.rb +0 -1895
  214. data/test/plugin_helper/test_service_discovery.rb +0 -165
  215. data/test/plugin_helper/test_socket.rb +0 -146
  216. data/test/plugin_helper/test_storage.rb +0 -542
  217. data/test/plugin_helper/test_thread.rb +0 -164
  218. data/test/plugin_helper/test_timer.rb +0 -130
  219. data/test/scripts/exec_script.rb +0 -32
  220. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +0 -7
  221. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +0 -7
  222. data/test/scripts/fluent/plugin/formatter_known.rb +0 -8
  223. data/test/scripts/fluent/plugin/out_test.rb +0 -81
  224. data/test/scripts/fluent/plugin/out_test2.rb +0 -80
  225. data/test/scripts/fluent/plugin/parser_known.rb +0 -4
  226. data/test/test_capability.rb +0 -74
  227. data/test/test_clock.rb +0 -164
  228. data/test/test_config.rb +0 -369
  229. data/test/test_configdsl.rb +0 -148
  230. data/test/test_daemonizer.rb +0 -91
  231. data/test/test_engine.rb +0 -203
  232. data/test/test_event.rb +0 -531
  233. data/test/test_event_router.rb +0 -348
  234. data/test/test_event_time.rb +0 -199
  235. data/test/test_file_wrapper.rb +0 -53
  236. data/test/test_filter.rb +0 -121
  237. data/test/test_fluent_log_event_router.rb +0 -99
  238. data/test/test_formatter.rb +0 -369
  239. data/test/test_input.rb +0 -31
  240. data/test/test_log.rb +0 -1076
  241. data/test/test_match.rb +0 -148
  242. data/test/test_mixin.rb +0 -351
  243. data/test/test_msgpack_factory.rb +0 -50
  244. data/test/test_oj_options.rb +0 -55
  245. data/test/test_output.rb +0 -278
  246. data/test/test_plugin.rb +0 -251
  247. data/test/test_plugin_classes.rb +0 -370
  248. data/test/test_plugin_helper.rb +0 -81
  249. data/test/test_plugin_id.rb +0 -119
  250. data/test/test_process.rb +0 -14
  251. data/test/test_root_agent.rb +0 -951
  252. data/test/test_static_config_analysis.rb +0 -177
  253. data/test/test_supervisor.rb +0 -821
  254. data/test/test_test_drivers.rb +0 -136
  255. data/test/test_time_formatter.rb +0 -301
  256. data/test/test_time_parser.rb +0 -362
  257. data/test/test_tls.rb +0 -65
  258. data/test/test_unique_id.rb +0 -47
  259. data/test/test_variable_store.rb +0 -65
@@ -1,127 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/parser'
3
- require 'fluent/plugin/parser_msgpack'
4
-
5
- class MessagePackParserTest < ::Test::Unit::TestCase
6
- def setup
7
- Fluent::Test.setup
8
- end
9
-
10
- def create_driver(conf)
11
- Fluent::Test::Driver::Parser.new(Fluent::Plugin::MessagePackParser).configure(conf)
12
- end
13
-
14
- sub_test_case "simple setting" do
15
- data(
16
- "Normal Hash",
17
- {
18
- input: "\x82\xA7message\xADHello msgpack\xA3numd",
19
- expected: [{"message" => "Hello msgpack", "num" => 100}]
20
- },
21
- keep: true
22
- )
23
- data(
24
- "Array of multiple Hash",
25
- {
26
- input: "\x92\x81\xA7message\xA3foo\x81\xA7message\xA3bar",
27
- expected: [{"message"=>"foo"}, {"message"=>"bar"}]
28
- },
29
- keep: true
30
- )
31
- data(
32
- "String",
33
- {
34
- # "Hello msgpack".to_msgpack
35
- input: "\xADHello msgpack",
36
- expected: [nil]
37
- },
38
- keep: true
39
- )
40
- data(
41
- "Array of String",
42
- {
43
- # ["foo", "bar"].to_msgpack
44
- input: "\x92\xA3foo\xA3bar",
45
- expected: [nil, nil]
46
- },
47
- keep: true
48
- )
49
- data(
50
- "Array of String and Hash",
51
- {
52
- # ["foo", {message: "bar"}].to_msgpack
53
- input: "\x92\xA3foo\x81\xA7message\xA3bar",
54
- expected: [nil, {"message"=>"bar"}]
55
- },
56
- keep: true
57
- )
58
-
59
- def test_parse(data)
60
- parsed_records = []
61
- create_driver("").instance.parse(data[:input]) do |time, record|
62
- parsed_records.append(record)
63
- end
64
- assert_equal(data[:expected], parsed_records)
65
- end
66
-
67
- def test_parse_io(data)
68
- parsed_records = []
69
- StringIO.open(data[:input]) do |io|
70
- create_driver("").instance.parse_io(io) do |time, record|
71
- parsed_records.append(record)
72
- end
73
- end
74
- assert_equal(data[:expected], parsed_records)
75
- end
76
- end
77
-
78
- # This becomes NoMethodError if a non-Hash object is passed to convert_values.
79
- # https://github.com/fluent/fluentd/issues/4100
80
- sub_test_case "execute_convert_values with null_empty_string" do
81
- data(
82
- "Normal hash",
83
- {
84
- # {message: "foo", empty: ""}.to_msgpack
85
- input: "\x82\xA7message\xA3foo\xA5empty\xA0",
86
- expected: [{"message" => "foo", "empty" => nil}]
87
- },
88
- keep: true
89
- )
90
- data(
91
- "Array of multiple Hash",
92
- {
93
- # [{message: "foo", empty: ""}, {message: "bar", empty: ""}].to_msgpack
94
- input: "\x92\x82\xA7message\xA3foo\xA5empty\xA0\x82\xA7message\xA3bar\xA5empty\xA0",
95
- expected: [{"message"=>"foo", "empty" => nil}, {"message"=>"bar", "empty" => nil}]
96
- },
97
- keep: true
98
- )
99
- data(
100
- "String",
101
- {
102
- # "Hello msgpack".to_msgpack
103
- input: "\xADHello msgpack",
104
- expected: [nil]
105
- },
106
- keep: true
107
- )
108
-
109
- def test_parse(data)
110
- parsed_records = []
111
- create_driver("null_empty_string").instance.parse(data[:input]) do |time, record|
112
- parsed_records.append(record)
113
- end
114
- assert_equal(data[:expected], parsed_records)
115
- end
116
-
117
- def test_parse_io(data)
118
- parsed_records = []
119
- StringIO.open(data[:input]) do |io|
120
- create_driver("null_empty_string").instance.parse_io(io) do |time, record|
121
- parsed_records.append(record)
122
- end
123
- end
124
- assert_equal(data[:expected], parsed_records)
125
- end
126
- end
127
- end
@@ -1,111 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/parser'
3
- require 'fluent/plugin/parser'
4
-
5
- class MultilineParserTest < ::Test::Unit::TestCase
6
- def setup
7
- Fluent::Test.setup
8
- end
9
-
10
- def create_parser(conf)
11
- parser = Fluent::Test::Driver::Parser.new(Fluent::Plugin::MultilineParser).configure(conf)
12
- parser
13
- end
14
-
15
- def test_configure_with_invalid_params
16
- [{'format100' => '/(?<msg>.*)/'}, {'format1' => '/(?<msg>.*)/', 'format3' => '/(?<msg>.*)/'}, 'format1' => '/(?<msg>.*)'].each { |config|
17
- assert_raise(Fluent::ConfigError) {
18
- create_parser(config)
19
- }
20
- }
21
- end
22
-
23
- def test_parse
24
- parser = create_parser('format1' => '/^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) \[(?<thread>.*)\] (?<level>[^\s]+)(?<message>.*)/')
25
- parser.instance.parse(<<EOS.chomp) { |time, record|
26
- 2013-3-03 14:27:33 [main] ERROR Main - Exception
27
- javax.management.RuntimeErrorException: null
28
- \tat Main.main(Main.java:16) ~[bin/:na]
29
- EOS
30
-
31
- assert_equal(event_time('2013-3-03 14:27:33').to_i, time)
32
- assert_equal({
33
- "thread" => "main",
34
- "level" => "ERROR",
35
- "message" => " Main - Exception\njavax.management.RuntimeErrorException: null\n\tat Main.main(Main.java:16) ~[bin/:na]"
36
- }, record)
37
- }
38
- end
39
-
40
- def test_parse_with_firstline
41
- parser = create_parser('format_firstline' => '/----/', 'format1' => '/time=(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}).*message=(?<message>.*)/')
42
- parser.instance.parse(<<EOS.chomp) { |time, record|
43
- ----
44
- time=2013-3-03 14:27:33
45
- message=test1
46
- EOS
47
-
48
- assert(parser.instance.firstline?('----'))
49
- assert_equal(event_time('2013-3-03 14:27:33').to_i, time)
50
- assert_equal({"message" => "test1"}, record)
51
- }
52
- end
53
-
54
- def test_parse_with_multiple_formats
55
- parser = create_parser('format_firstline' => '/^Started/',
56
- 'format1' => '/Started (?<method>[^ ]+) "(?<path>[^"]+)" for (?<host>[^ ]+) at (?<time>[^ ]+ [^ ]+ [^ ]+)\n/',
57
- 'format2' => '/Processing by (?<controller>[^\u0023]+)\u0023(?<controller_method>[^ ]+) as (?<format>[^ ]+?)\n/',
58
- 'format3' => '/( Parameters: (?<parameters>[^ ]+)\n)?/',
59
- 'format4' => '/ Rendered (?<template>[^ ]+) within (?<layout>.+) \([\d\.]+ms\)\n/',
60
- 'format5' => '/Completed (?<code>[^ ]+) [^ ]+ in (?<runtime>[\d\.]+)ms \(Views: (?<view_runtime>[\d\.]+)ms \| ActiveRecord: (?<ar_runtime>[\d\.]+)ms\)/'
61
- )
62
- parser.instance.parse(<<EOS.chomp) { |time, record|
63
- Started GET "/users/123/" for 127.0.0.1 at 2013-06-14 12:00:11 +0900
64
- Processing by UsersController#show as HTML
65
- Parameters: {"user_id"=>"123"}
66
- Rendered users/show.html.erb within layouts/application (0.3ms)
67
- Completed 200 OK in 4ms (Views: 3.2ms | ActiveRecord: 0.0ms)
68
- EOS
69
-
70
- assert(parser.instance.firstline?('Started GET "/users/123/" for 127.0.0.1...'))
71
- assert_equal(event_time('2013-06-14 12:00:11 +0900').to_i, time)
72
- assert_equal({
73
- "method" => "GET",
74
- "path" => "/users/123/",
75
- "host" => "127.0.0.1",
76
- "controller" => "UsersController",
77
- "controller_method" => "show",
78
- "format" => "HTML",
79
- "parameters" => "{\"user_id\"=>\"123\"}",
80
- "template" => "users/show.html.erb",
81
- "layout" => "layouts/application",
82
- "code" => "200",
83
- "runtime" => "4",
84
- "view_runtime" => "3.2",
85
- "ar_runtime" => "0.0"
86
- }, record)
87
- }
88
- end
89
-
90
- def test_parse_with_keep_time_key
91
- parser = Fluent::Test::Driver::Parser.new(Fluent::Plugin::MultilineParser).configure(
92
- 'format1' => '/^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2})/',
93
- 'keep_time_key' => 'true'
94
- )
95
- text = '2013-3-03 14:27:33'
96
- parser.instance.parse(text) { |time, record|
97
- assert_equal text, record['time']
98
- }
99
- end
100
-
101
- def test_parse_unmatched_lines
102
- parser = Fluent::Test::Driver::Parser.new(Fluent::Plugin::MultilineParser).configure(
103
- 'format1' => '/^message (?<message_id>\d)/',
104
- 'unmatched_lines' => true,
105
- )
106
- text = "message 1\nmessage a"
107
- r = []
108
- parser.instance.parse(text) { |_, record| r << record }
109
- assert_equal [{ 'message_id' => '1' }, { 'unmatched_line' => 'message a'}], r
110
- end
111
- end
@@ -1,88 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/parser'
3
- require 'fluent/plugin/parser_nginx'
4
-
5
- class NginxParserTest < ::Test::Unit::TestCase
6
- def setup
7
- Fluent::Test.setup
8
- @expected = {
9
- 'remote' => '127.0.0.1',
10
- 'host' => '192.168.0.1',
11
- 'user' => '-',
12
- 'method' => 'GET',
13
- 'path' => '/',
14
- 'code' => '200',
15
- 'size' => '777',
16
- 'referer' => '-',
17
- 'agent' => 'Opera/12.0'
18
- }
19
- @expected_extended = {
20
- 'remote' => '127.0.0.1',
21
- 'host' => '192.168.0.1',
22
- 'user' => '-',
23
- 'method' => 'GET',
24
- 'path' => '/',
25
- 'code' => '200',
26
- 'size' => '777',
27
- 'referer' => '-',
28
- 'agent' => 'Opera/12.0',
29
- 'http_x_forwarded_for' => '-'
30
- }
31
- @expected_extended_multiple_ip = {
32
- 'remote' => '127.0.0.1',
33
- 'host' => '192.168.0.1',
34
- 'user' => '-',
35
- 'method' => 'GET',
36
- 'path' => '/',
37
- 'code' => '200',
38
- 'size' => '777',
39
- 'referer' => '-',
40
- 'agent' => 'Opera/12.0',
41
- 'http_x_forwarded_for' => '127.0.0.1, 192.168.0.1'
42
- }
43
- end
44
-
45
- def create_driver
46
- Fluent::Test::Driver::Parser.new(Fluent::Plugin::NginxParser.new).configure({})
47
- end
48
-
49
- def test_parse
50
- d = create_driver
51
- d.instance.parse('127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0"') { |time, record|
52
- assert_equal(event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z'), time)
53
- assert_equal(@expected, record)
54
- }
55
- end
56
-
57
- def test_parse_with_empty_included_path
58
- d = create_driver
59
- d.instance.parse('127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 +0900] "GET /a[ ]b HTTP/1.1" 200 777 "-" "Opera/12.0"') { |time, record|
60
- assert_equal(event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z'), time)
61
- assert_equal(@expected.merge('path' => '/a[ ]b'), record)
62
- }
63
- end
64
-
65
- def test_parse_without_http_version
66
- d = create_driver
67
- d.instance.parse('127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 +0900] "GET /" 200 777 "-" "Opera/12.0"') { |time, record|
68
- assert_equal(event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z'), time)
69
- assert_equal(@expected, record)
70
- }
71
- end
72
-
73
- def test_parse_with_http_x_forwarded_for
74
- d = create_driver
75
- d.instance.parse('127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -') { |time, record|
76
- assert_equal(event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z'), time)
77
- assert_equal(@expected_extended, record)
78
- }
79
- end
80
-
81
- def test_parse_with_http_x_forwarded_for_multiple_ip
82
- d = create_driver
83
- d.instance.parse('127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" "127.0.0.1, 192.168.0.1"') { |time, record|
84
- assert_equal(event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z'), time)
85
- assert_equal(@expected_extended_multiple_ip, record)
86
- }
87
- end
88
- end
@@ -1,52 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/parser'
3
- require 'fluent/plugin/parser'
4
-
5
- class NoneParserTest < ::Test::Unit::TestCase
6
- def setup
7
- Fluent::Test.setup
8
- end
9
-
10
- def test_config_params
11
- parser = Fluent::Test::Driver::Parser.new(Fluent::TextParser::NoneParser)
12
- parser.configure({})
13
- assert_equal "message", parser.instance.message_key
14
-
15
- parser.configure('message_key' => 'foobar')
16
- assert_equal "foobar", parser.instance.message_key
17
- end
18
-
19
- def test_parse
20
- parser = Fluent::Test::Driver::Parser.new(Fluent::Plugin.new_parser('none'))
21
- parser.configure({})
22
- parser.instance.parse('log message!') { |time, record|
23
- assert_equal({'message' => 'log message!'}, record)
24
- }
25
- end
26
-
27
- def test_parse_with_message_key
28
- parser = Fluent::Test::Driver::Parser.new(Fluent::TextParser::NoneParser)
29
- parser.configure('message_key' => 'foobar')
30
- parser.instance.parse('log message!') { |time, record|
31
- assert_equal({'foobar' => 'log message!'}, record)
32
- }
33
- end
34
-
35
- def test_parse_without_default_time
36
- time_at_start = Time.now.to_i
37
-
38
- parser = Fluent::Test::Driver::Parser.new(Fluent::Plugin.new_parser('none'))
39
- parser.configure({})
40
- parser.instance.parse('log message!') { |time, record|
41
- assert time && time >= time_at_start, "parser puts current time without time input"
42
- assert_equal({'message' => 'log message!'}, record)
43
- }
44
-
45
- parser = Fluent::Test::Driver::Parser.new(Fluent::Plugin.new_parser('none'))
46
- parser.configure({'estimate_current_event' => 'false'})
47
- parser.instance.parse('log message!') { |time, record|
48
- assert_equal({'message' => 'log message!'}, record)
49
- assert_nil time, "parser returns nil w/o time if configured so"
50
- }
51
- end
52
- end
@@ -1,284 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/parser'
3
- require 'fluent/plugin/parser'
4
-
5
- class RegexpParserTest < ::Test::Unit::TestCase
6
- def setup
7
- Fluent::Test.setup
8
- end
9
-
10
- def internal_test_case(parser)
11
- text = '192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] [14/Feb/2013:12:00:00 +0900] "true /,/user HTTP/1.1" 200 777'
12
- parser.parse(text) { |time, record|
13
- assert_equal(event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z'), time)
14
- assert_equal({
15
- 'user' => '-',
16
- 'flag' => true,
17
- 'code' => 200.0,
18
- 'size' => 777,
19
- 'date' => event_time('14/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z'),
20
- 'host' => '192.168.0.1',
21
- 'path' => ['/', '/user']
22
- }, record)
23
- }
24
- end
25
-
26
- sub_test_case "Fluent::Compat::TextParser::RegexpParser" do
27
- def create_driver(regexp, conf = {}, initialize_conf: false)
28
- if initialize_conf
29
- Fluent::Test::Driver::Parser.new(Fluent::Compat::TextParser::RegexpParser.new(regexp, conf))
30
- else
31
- Fluent::Test::Driver::Parser.new(Fluent::Compat::TextParser::RegexpParser.new(regexp)).configure(conf)
32
- end
33
- end
34
-
35
- def test_parse_with_typed
36
- # Use Regexp.new instead of // literal to avoid different parser behaviour in 1.9 and 2.0
37
- regexp = Regexp.new(%q!^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$!)
38
- conf = {
39
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
40
- 'types' => 'user:string,date:time:%d/%b/%Y:%H:%M:%S %z,flag:bool,path:array,code:float,size:integer'
41
- }
42
- d = create_driver(regexp, conf, initialize_conf: true)
43
- internal_test_case(d.instance)
44
- end
45
-
46
- def test_parse_with_configure
47
- # Specify conf by configure method instead of initializer
48
- regexp = Regexp.new(%q!^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$!)
49
- conf = {
50
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
51
- 'types' => 'user:string,date:time:%d/%b/%Y:%H:%M:%S %z,flag:bool,path:array,code:float,size:integer'
52
- }
53
- d = create_driver(regexp, conf)
54
- internal_test_case(d.instance)
55
- assert_equal(regexp, d.instance.patterns['format'])
56
- assert_equal("%d/%b/%Y:%H:%M:%S %z", d.instance.patterns['time_format'])
57
- end
58
-
59
- def test_parse_with_typed_and_name_separator
60
- regexp = Regexp.new(%q!^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$!)
61
- conf = {
62
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
63
- 'types' => 'user|string,date|time|%d/%b/%Y:%H:%M:%S %z,flag|bool,path|array,code|float,size|integer',
64
- 'types_label_delimiter' => '|'
65
- }
66
- d = create_driver(regexp, conf)
67
- internal_test_case(d.instance)
68
- end
69
-
70
- def test_parse_with_time_key
71
- conf = {
72
- 'time_format' => "%Y-%m-%d %H:%M:%S %z",
73
- 'time_key' => 'logtime'
74
- }
75
- d = create_driver(/(?<logtime>[^\]]*)/, conf)
76
- text = '2013-02-28 12:00:00 +0900'
77
- d.instance.parse(text) do |time, _record|
78
- assert_equal Fluent::EventTime.parse(text), time
79
- end
80
- end
81
-
82
- def test_parse_without_time
83
- time_at_start = Time.now.to_i
84
- text = "tagomori_satoshi tagomoris 34\n"
85
-
86
- regexp = Regexp.new(%q!^(?<name>[^ ]*) (?<user>[^ ]*) (?<age>\d*)$!)
87
- conf = {
88
- 'types' => 'name:string,user:string,age:integer'
89
- }
90
- d = create_driver(regexp, conf)
91
-
92
- d.instance.parse(text) { |time, record|
93
- assert time && time >= time_at_start, "parser puts current time without time input"
94
- assert_equal "tagomori_satoshi", record["name"]
95
- assert_equal "tagomoris", record["user"]
96
- assert_equal 34, record["age"]
97
- }
98
- end
99
-
100
- def test_parse_without_time_estimate_curent_event_false
101
- text = "tagomori_satoshi tagomoris 34\n"
102
- regexp = Regexp.new(%q!^(?<name>[^ ]*) (?<user>[^ ]*) (?<age>\d*)$!)
103
- conf = {
104
- 'types' => 'name:string,user:string,age:integer'
105
- }
106
- d = create_driver(regexp, conf)
107
- d.instance.estimate_current_event = false
108
- d.instance.parse(text) { |time, record|
109
- assert_equal "tagomori_satoshi", record["name"]
110
- assert_equal "tagomoris", record["user"]
111
- assert_equal 34, record["age"]
112
-
113
- assert_nil time, "parser returns nil if configured so"
114
- }
115
- end
116
-
117
- def test_parse_with_keep_time_key
118
- regexp = Regexp.new(%q!(?<time>.*)!)
119
- conf = {
120
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
121
- 'keep_time_key' => 'true',
122
- }
123
- d = create_driver(regexp, conf)
124
- text = '28/Feb/2013:12:00:00 +0900'
125
- d.instance.parse(text) do |_time, record|
126
- assert_equal text, record['time']
127
- end
128
- end
129
-
130
- def test_parse_with_keep_time_key_with_typecast
131
- regexp = Regexp.new(%q!(?<time>.*)!)
132
- conf = {
133
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
134
- 'keep_time_key' => 'true',
135
- 'types' => 'time:time:%d/%b/%Y:%H:%M:%S %z',
136
- }
137
- d = create_driver(regexp, conf)
138
- text = '28/Feb/2013:12:00:00 +0900'
139
- d.instance.parse(text) do |_time, record|
140
- assert_equal 1362020400, record['time']
141
- end
142
- end
143
- end
144
-
145
- sub_test_case "Fluent::Plugin::RegexpParser" do
146
- def create_driver(conf)
147
- Fluent::Test::Driver::Parser.new(Fluent::Plugin::RegexpParser.new).configure(conf)
148
- end
149
-
150
- sub_test_case "configure" do
151
- def test_bad_expression
152
- conf = {
153
- 'expression' => %q!/.*/!,
154
- }
155
- assert_raise Fluent::ConfigError do
156
- create_driver(conf)
157
- end
158
- end
159
-
160
- def test_default_options
161
- conf = {
162
- 'expression' => %q!/^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$/!,
163
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
164
- 'types' => 'user:string,date:time:%d/%b/%Y:%H:%M:%S %z,flag:bool,path:array,code:float,size:integer'
165
- }
166
- d = create_driver(conf)
167
- regexp = d.instance.expression
168
- assert_equal(0, regexp.options)
169
- end
170
-
171
- data(
172
- ignorecase: ["i", Regexp::IGNORECASE],
173
- multiline: ["m", Regexp::MULTILINE],
174
- ignorecase_multiline: ["im", Regexp::IGNORECASE | Regexp::MULTILINE],
175
- )
176
- def test_options(data)
177
- regexp_option, expected = data
178
- conf = {
179
- 'expression' => %Q!/^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$/#{regexp_option}!,
180
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
181
- 'types' => 'user:string,date:time:%d/%b/%Y:%H:%M:%S %z,flag:bool,path:array,code:float,size:integer'
182
- }
183
- d = create_driver(conf)
184
- regexp = d.instance.expression
185
- assert_equal(expected, regexp.options)
186
- end
187
- end
188
-
189
- def test_parse_with_typed
190
- conf = {
191
- 'expression' => %q!/^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$/!,
192
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
193
- 'types' => 'user:string,date:time:%d/%b/%Y:%H:%M:%S %z,flag:bool,path:array,code:float,size:integer'
194
- }
195
- d = create_driver(conf)
196
- internal_test_case(d.instance)
197
- end
198
-
199
- def test_parse_with_typed_by_json_hash
200
- conf = {
201
- 'expression' => %q!/^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<date>[^\]]*)\] "(?<flag>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$/!,
202
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
203
- 'types' => '{"user":"string","date":"time:%d/%b/%Y:%H:%M:%S %z","flag":"bool","path":"array","code":"float","size":"integer"}',
204
- }
205
- d = create_driver(conf)
206
- internal_test_case(d.instance)
207
- end
208
-
209
- def test_parse_with_time_key
210
- conf = {
211
- 'expression' => %q!/(?<logtime>[^\]]*)/!,
212
- 'time_format' => "%Y-%m-%d %H:%M:%S %z",
213
- 'time_key' => 'logtime'
214
- }
215
- d = create_driver(conf)
216
- text = '2013-02-28 12:00:00 +0900'
217
- d.instance.parse(text) do |time, _record|
218
- assert_equal Fluent::EventTime.parse(text), time
219
- end
220
- end
221
-
222
- def test_parse_without_time
223
- time_at_start = Time.now.to_i
224
- text = "tagomori_satoshi tagomoris 34\n"
225
-
226
- conf = {
227
- 'expression' => %q!/^(?<name>[^ ]*) (?<user>[^ ]*) (?<age>\d*)$/!,
228
- 'types' => 'name:string,user:string,age:integer'
229
- }
230
- d = create_driver(conf)
231
-
232
- d.instance.parse(text) { |time, record|
233
- assert time && time >= time_at_start, "parser puts current time without time input"
234
- assert_equal "tagomori_satoshi", record["name"]
235
- assert_equal "tagomoris", record["user"]
236
- assert_equal 34, record["age"]
237
- }
238
- end
239
-
240
- def test_parse_without_time_estimate_curent_event_false
241
- text = "tagomori_satoshi tagomoris 34\n"
242
- conf = {
243
- 'expression' => %q!/^(?<name>[^ ]*) (?<user>[^ ]*) (?<age>\d*)$/!,
244
- 'types' => 'name:string,user:string,age:integer'
245
- }
246
- d = create_driver(conf)
247
- d.instance.estimate_current_event = false
248
- d.instance.parse(text) { |time, record|
249
- assert_equal "tagomori_satoshi", record["name"]
250
- assert_equal "tagomoris", record["user"]
251
- assert_equal 34, record["age"]
252
-
253
- assert_nil time, "parser returns nil if configured so"
254
- }
255
- end
256
-
257
- def test_parse_with_keep_time_key
258
- conf = {
259
- 'expression' => %q!/(?<time>.*)/!,
260
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
261
- 'keep_time_key' => 'true',
262
- }
263
- d = create_driver(conf)
264
- text = '28/Feb/2013:12:00:00 +0900'
265
- d.instance.parse(text) do |_time, record|
266
- assert_equal text, record['time']
267
- end
268
- end
269
-
270
- def test_parse_with_keep_time_key_with_typecast
271
- conf = {
272
- 'expression' => %q!/(?<time>.*)/!,
273
- 'time_format' => "%d/%b/%Y:%H:%M:%S %z",
274
- 'keep_time_key' => 'true',
275
- 'types' => 'time:time:%d/%b/%Y:%H:%M:%S %z',
276
- }
277
- d = create_driver(conf)
278
- text = '28/Feb/2013:12:00:00 +0900'
279
- d.instance.parse(text) do |_time, record|
280
- assert_equal 1362020400, record['time']
281
- end
282
- end
283
- end
284
- end