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.
- checksums.yaml +5 -5
- data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +13 -0
- data/.gitignore +5 -0
- data/.gitlab/cicd-template.yaml +10 -0
- data/.gitlab-ci.yml +147 -0
- data/.travis.yml +56 -20
- data/ADOPTERS.md +5 -0
- data/CHANGELOG.md +1369 -0
- data/CONTRIBUTING.md +16 -5
- data/GOVERNANCE.md +55 -0
- data/Gemfile +5 -0
- data/GithubWorkflow.md +78 -0
- data/LICENSE +202 -0
- data/MAINTAINERS.md +7 -0
- data/README.md +23 -11
- data/Rakefile +48 -2
- data/Vagrantfile +17 -0
- data/appveyor.yml +37 -0
- data/bin/fluent-binlog-reader +7 -0
- data/bin/fluent-ca-generate +6 -0
- data/bin/fluent-plugin-config-format +5 -0
- data/bin/fluent-plugin-generate +5 -0
- data/bin/fluentd +3 -0
- data/code-of-conduct.md +3 -0
- data/example/copy_roundrobin.conf +39 -0
- data/example/counter.conf +18 -0
- data/example/in_dummy_blocks.conf +17 -0
- data/example/in_dummy_with_compression.conf +23 -0
- data/example/in_forward.conf +7 -0
- data/example/in_forward_client.conf +37 -0
- data/example/in_forward_shared_key.conf +15 -0
- data/example/in_forward_tls.conf +14 -0
- data/example/in_forward_users.conf +24 -0
- data/example/in_forward_workers.conf +21 -0
- data/example/in_http.conf +3 -1
- data/example/in_out_forward.conf +17 -0
- data/example/logevents.conf +25 -0
- data/example/multi_filters.conf +61 -0
- data/example/out_exec_filter.conf +42 -0
- data/example/out_forward.conf +13 -13
- data/example/out_forward_buf_file.conf +23 -0
- data/example/out_forward_client.conf +109 -0
- data/example/out_forward_heartbeat_none.conf +16 -0
- data/example/out_forward_shared_key.conf +36 -0
- data/example/out_forward_tls.conf +18 -0
- data/example/out_forward_users.conf +65 -0
- data/example/out_null.conf +36 -0
- data/example/secondary_file.conf +42 -0
- data/example/suppress_config_dump.conf +7 -0
- data/example/worker_section.conf +36 -0
- data/fluent.conf +29 -0
- data/fluentd.gemspec +21 -11
- data/lib/fluent/agent.rb +67 -90
- data/lib/fluent/clock.rb +62 -0
- data/lib/fluent/command/binlog_reader.rb +244 -0
- data/lib/fluent/command/ca_generate.rb +181 -0
- data/lib/fluent/command/cat.rb +42 -18
- data/lib/fluent/command/debug.rb +12 -10
- data/lib/fluent/command/fluentd.rb +153 -5
- data/lib/fluent/command/plugin_config_formatter.rb +292 -0
- data/lib/fluent/command/plugin_generator.rb +324 -0
- data/lib/fluent/compat/call_super_mixin.rb +67 -0
- data/lib/fluent/compat/detach_process_mixin.rb +33 -0
- data/lib/fluent/compat/exec_util.rb +129 -0
- data/lib/fluent/compat/file_util.rb +54 -0
- data/lib/fluent/compat/filter.rb +68 -0
- data/lib/fluent/compat/formatter.rb +111 -0
- data/lib/fluent/compat/formatter_utils.rb +85 -0
- data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
- data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
- data/lib/fluent/compat/input.rb +49 -0
- data/lib/fluent/compat/output.rb +718 -0
- data/lib/fluent/compat/output_chain.rb +60 -0
- data/lib/fluent/compat/parser.rb +310 -0
- data/lib/fluent/compat/parser_utils.rb +40 -0
- data/lib/fluent/compat/propagate_default.rb +62 -0
- data/lib/fluent/compat/record_filter_mixin.rb +34 -0
- data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
- data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
- data/lib/fluent/compat/socket_util.rb +165 -0
- data/lib/fluent/compat/string_util.rb +34 -0
- data/lib/fluent/compat/structured_format_mixin.rb +26 -0
- data/lib/fluent/compat/type_converter.rb +90 -0
- data/lib/fluent/config/configure_proxy.rb +210 -62
- data/lib/fluent/config/dsl.rb +12 -5
- data/lib/fluent/config/element.rb +107 -9
- data/lib/fluent/config/literal_parser.rb +9 -3
- data/lib/fluent/config/parser.rb +4 -4
- data/lib/fluent/config/section.rb +51 -14
- data/lib/fluent/config/types.rb +28 -13
- data/lib/fluent/config/v1_parser.rb +3 -5
- data/lib/fluent/config.rb +23 -20
- data/lib/fluent/configurable.rb +79 -21
- data/lib/fluent/counter/base_socket.rb +46 -0
- data/lib/fluent/counter/client.rb +297 -0
- data/lib/fluent/counter/error.rb +86 -0
- data/lib/fluent/counter/mutex_hash.rb +163 -0
- data/lib/fluent/counter/server.rb +273 -0
- data/lib/fluent/counter/store.rb +205 -0
- data/lib/fluent/counter/validator.rb +145 -0
- data/lib/fluent/counter.rb +23 -0
- data/lib/fluent/daemon.rb +15 -0
- data/lib/fluent/engine.rb +102 -65
- data/lib/fluent/env.rb +7 -3
- data/lib/fluent/error.rb +30 -0
- data/lib/fluent/event.rb +197 -21
- data/lib/fluent/event_router.rb +93 -10
- data/lib/fluent/filter.rb +2 -50
- data/lib/fluent/formatter.rb +4 -293
- data/lib/fluent/input.rb +2 -32
- data/lib/fluent/label.rb +10 -2
- data/lib/fluent/load.rb +3 -3
- data/lib/fluent/log.rb +348 -81
- data/lib/fluent/match.rb +37 -36
- data/lib/fluent/mixin.rb +12 -176
- data/lib/fluent/msgpack_factory.rb +62 -0
- data/lib/fluent/output.rb +10 -612
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +4 -800
- data/lib/fluent/plugin/bare_output.rb +63 -0
- data/lib/fluent/plugin/base.rb +192 -0
- data/lib/fluent/plugin/buf_file.rb +128 -174
- data/lib/fluent/plugin/buf_memory.rb +9 -92
- data/lib/fluent/plugin/buffer/chunk.rb +221 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +383 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
- data/lib/fluent/plugin/buffer.rb +779 -0
- data/lib/fluent/plugin/compressable.rb +92 -0
- data/lib/fluent/plugin/exec_util.rb +3 -108
- data/lib/fluent/plugin/file_util.rb +4 -34
- data/lib/fluent/plugin/file_wrapper.rb +120 -0
- data/lib/fluent/plugin/filter.rb +93 -0
- data/lib/fluent/plugin/filter_grep.rb +117 -34
- data/lib/fluent/plugin/filter_parser.rb +85 -62
- data/lib/fluent/plugin/filter_record_transformer.rb +27 -39
- data/lib/fluent/plugin/filter_stdout.rb +15 -12
- data/lib/fluent/plugin/formatter.rb +50 -0
- data/lib/fluent/plugin/formatter_csv.rb +52 -0
- data/lib/fluent/plugin/formatter_hash.rb +33 -0
- data/lib/fluent/plugin/formatter_json.rb +55 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
- data/lib/fluent/plugin/formatter_out_file.rb +51 -0
- data/lib/fluent/plugin/formatter_single_value.rb +34 -0
- data/lib/fluent/plugin/formatter_stdout.rb +76 -0
- data/lib/fluent/plugin/formatter_tsv.rb +38 -0
- data/lib/fluent/plugin/in_debug_agent.rb +17 -6
- data/lib/fluent/plugin/in_dummy.rb +47 -20
- data/lib/fluent/plugin/in_exec.rb +55 -123
- data/lib/fluent/plugin/in_forward.rb +299 -216
- data/lib/fluent/plugin/in_gc_stat.rb +14 -36
- data/lib/fluent/plugin/in_http.rb +204 -91
- data/lib/fluent/plugin/in_monitor_agent.rb +186 -258
- data/lib/fluent/plugin/in_object_space.rb +13 -41
- data/lib/fluent/plugin/in_syslog.rb +112 -134
- data/lib/fluent/plugin/in_tail.rb +408 -745
- data/lib/fluent/plugin/in_tcp.rb +66 -9
- data/lib/fluent/plugin/in_udp.rb +60 -11
- data/lib/fluent/plugin/{in_stream.rb → in_unix.rb} +8 -4
- data/lib/fluent/plugin/input.rb +37 -0
- data/lib/fluent/plugin/multi_output.rb +158 -0
- data/lib/fluent/plugin/out_copy.rb +23 -35
- data/lib/fluent/plugin/out_exec.rb +67 -70
- data/lib/fluent/plugin/out_exec_filter.rb +204 -271
- data/lib/fluent/plugin/out_file.rb +267 -73
- data/lib/fluent/plugin/out_forward.rb +854 -325
- data/lib/fluent/plugin/out_null.rb +42 -9
- data/lib/fluent/plugin/out_relabel.rb +9 -5
- data/lib/fluent/plugin/out_roundrobin.rb +18 -37
- data/lib/fluent/plugin/out_secondary_file.rb +133 -0
- data/lib/fluent/plugin/out_stdout.rb +43 -10
- data/lib/fluent/plugin/out_stream.rb +7 -2
- data/lib/fluent/plugin/output.rb +1498 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
- data/lib/fluent/plugin/parser.rb +191 -0
- data/lib/fluent/plugin/parser_apache.rb +28 -0
- data/lib/fluent/plugin/parser_apache2.rb +88 -0
- data/lib/fluent/plugin/parser_apache_error.rb +26 -0
- data/lib/fluent/plugin/parser_csv.rb +39 -0
- data/lib/fluent/plugin/parser_json.rb +94 -0
- data/lib/fluent/plugin/parser_ltsv.rb +49 -0
- data/lib/fluent/plugin/parser_msgpack.rb +50 -0
- data/lib/fluent/plugin/parser_multiline.rb +106 -0
- data/lib/fluent/plugin/parser_nginx.rb +28 -0
- data/lib/fluent/plugin/parser_none.rb +36 -0
- data/lib/fluent/plugin/parser_regexp.rb +68 -0
- data/lib/fluent/plugin/parser_syslog.rb +142 -0
- data/lib/fluent/plugin/parser_tsv.rb +42 -0
- data/lib/fluent/plugin/socket_util.rb +3 -143
- data/lib/fluent/plugin/storage.rb +84 -0
- data/lib/fluent/plugin/storage_local.rb +164 -0
- data/lib/fluent/plugin/string_util.rb +3 -15
- data/lib/fluent/plugin.rb +122 -121
- data/lib/fluent/plugin_helper/cert_option.rb +178 -0
- data/lib/fluent/plugin_helper/child_process.rb +364 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +333 -0
- data/lib/fluent/plugin_helper/counter.rb +51 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +93 -0
- data/lib/fluent/plugin_helper/event_loop.rb +170 -0
- data/lib/fluent/plugin_helper/extract.rb +104 -0
- data/lib/fluent/plugin_helper/formatter.rb +147 -0
- data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
- data/lib/fluent/plugin_helper/http_server/compat/server.rb +81 -0
- data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
- data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
- data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
- data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
- data/lib/fluent/plugin_helper/http_server/server.rb +87 -0
- data/lib/fluent/plugin_helper/http_server.rb +76 -0
- data/lib/fluent/plugin_helper/inject.rb +151 -0
- data/lib/fluent/plugin_helper/parser.rb +147 -0
- data/lib/fluent/plugin_helper/record_accessor.rb +210 -0
- data/lib/fluent/plugin_helper/retry_state.rb +205 -0
- data/lib/fluent/plugin_helper/server.rb +807 -0
- data/lib/fluent/plugin_helper/socket.rb +250 -0
- data/lib/fluent/plugin_helper/socket_option.rb +80 -0
- data/lib/fluent/plugin_helper/storage.rb +349 -0
- data/lib/fluent/plugin_helper/thread.rb +179 -0
- data/lib/fluent/plugin_helper/timer.rb +92 -0
- data/lib/fluent/plugin_helper.rb +73 -0
- data/lib/fluent/plugin_id.rb +80 -0
- data/lib/fluent/process.rb +3 -489
- data/lib/fluent/registry.rb +52 -10
- data/lib/fluent/root_agent.rb +204 -42
- data/lib/fluent/supervisor.rb +597 -359
- data/lib/fluent/system_config.rb +131 -42
- data/lib/fluent/test/base.rb +6 -54
- data/lib/fluent/test/driver/base.rb +224 -0
- data/lib/fluent/test/driver/base_owned.rb +70 -0
- data/lib/fluent/test/driver/base_owner.rb +135 -0
- data/lib/fluent/test/driver/event_feeder.rb +98 -0
- data/lib/fluent/test/driver/filter.rb +57 -0
- data/lib/fluent/test/driver/formatter.rb +30 -0
- data/lib/fluent/test/driver/input.rb +31 -0
- data/lib/fluent/test/driver/multi_output.rb +53 -0
- data/lib/fluent/test/driver/output.rb +102 -0
- data/lib/fluent/test/driver/parser.rb +30 -0
- data/lib/fluent/test/driver/test_event_router.rb +45 -0
- data/lib/fluent/test/filter_test.rb +0 -1
- data/lib/fluent/test/formatter_test.rb +4 -1
- data/lib/fluent/test/helpers.rb +58 -10
- data/lib/fluent/test/input_test.rb +27 -19
- data/lib/fluent/test/log.rb +79 -0
- data/lib/fluent/test/output_test.rb +28 -39
- data/lib/fluent/test/parser_test.rb +3 -1
- data/lib/fluent/test/startup_shutdown.rb +46 -0
- data/lib/fluent/test.rb +33 -1
- data/lib/fluent/time.rb +450 -1
- data/lib/fluent/timezone.rb +27 -3
- data/lib/fluent/{status.rb → unique_id.rb} +15 -24
- data/lib/fluent/version.rb +1 -1
- data/lib/fluent/winsvc.rb +85 -0
- data/templates/new_gem/Gemfile +3 -0
- data/templates/new_gem/README.md.erb +43 -0
- data/templates/new_gem/Rakefile +13 -0
- data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
- data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
- data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
- data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
- data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
- data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
- data/templates/new_gem/test/helper.rb.erb +8 -0
- data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
- data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
- data/templates/plugin_config_formatter/param.md.erb +34 -0
- data/templates/plugin_config_formatter/section.md.erb +12 -0
- data/test/command/test_binlog_reader.rb +346 -0
- data/test/command/test_ca_generate.rb +70 -0
- data/test/command/test_fluentd.rb +901 -0
- data/test/command/test_plugin_config_formatter.rb +276 -0
- data/test/command/test_plugin_generator.rb +92 -0
- data/test/compat/test_calls_super.rb +166 -0
- data/test/compat/test_parser.rb +92 -0
- data/test/config/test_config_parser.rb +126 -2
- data/test/config/test_configurable.rb +946 -187
- data/test/config/test_configure_proxy.rb +424 -74
- data/test/config/test_dsl.rb +11 -11
- data/test/config/test_element.rb +500 -0
- data/test/config/test_literal_parser.rb +8 -0
- data/test/config/test_plugin_configuration.rb +56 -0
- data/test/config/test_section.rb +79 -7
- data/test/config/test_system_config.rb +122 -35
- data/test/config/test_types.rb +38 -0
- data/test/counter/test_client.rb +559 -0
- data/test/counter/test_error.rb +44 -0
- data/test/counter/test_mutex_hash.rb +179 -0
- data/test/counter/test_server.rb +589 -0
- data/test/counter/test_store.rb +258 -0
- data/test/counter/test_validator.rb +137 -0
- data/test/helper.rb +89 -6
- data/test/helpers/fuzzy_assert.rb +89 -0
- data/test/plugin/test_bare_output.rb +118 -0
- data/test/plugin/test_base.rb +115 -0
- data/test/plugin/test_buf_file.rb +823 -460
- data/test/plugin/test_buf_memory.rb +32 -194
- data/test/plugin/test_buffer.rb +1233 -0
- data/test/plugin/test_buffer_chunk.rb +198 -0
- data/test/plugin/test_buffer_file_chunk.rb +844 -0
- data/test/plugin/test_buffer_memory_chunk.rb +338 -0
- data/test/plugin/test_compressable.rb +84 -0
- data/test/plugin/test_filter.rb +357 -0
- data/test/plugin/test_filter_grep.rb +540 -29
- data/test/plugin/test_filter_parser.rb +439 -452
- data/test/plugin/test_filter_record_transformer.rb +123 -166
- data/test/plugin/test_filter_stdout.rb +160 -72
- data/test/plugin/test_formatter_csv.rb +111 -0
- data/test/plugin/test_formatter_hash.rb +35 -0
- data/test/plugin/test_formatter_json.rb +51 -0
- data/test/plugin/test_formatter_ltsv.rb +62 -0
- data/test/plugin/test_formatter_msgpack.rb +28 -0
- data/test/plugin/test_formatter_out_file.rb +95 -0
- data/test/plugin/test_formatter_single_value.rb +38 -0
- data/test/plugin/test_formatter_tsv.rb +68 -0
- data/test/plugin/test_in_debug_agent.rb +24 -1
- data/test/plugin/test_in_dummy.rb +111 -18
- data/test/plugin/test_in_exec.rb +200 -113
- data/test/plugin/test_in_forward.rb +990 -387
- data/test/plugin/test_in_gc_stat.rb +10 -8
- data/test/plugin/test_in_http.rb +600 -224
- data/test/plugin/test_in_monitor_agent.rb +690 -0
- data/test/plugin/test_in_object_space.rb +24 -8
- data/test/plugin/test_in_syslog.rb +154 -215
- data/test/plugin/test_in_tail.rb +1006 -707
- data/test/plugin/test_in_tcp.rb +125 -48
- data/test/plugin/test_in_udp.rb +204 -63
- data/test/plugin/{test_in_stream.rb → test_in_unix.rb} +14 -13
- data/test/plugin/test_input.rb +126 -0
- data/test/plugin/test_metadata.rb +89 -0
- data/test/plugin/test_multi_output.rb +180 -0
- data/test/plugin/test_out_copy.rb +117 -112
- data/test/plugin/test_out_exec.rb +258 -53
- data/test/plugin/test_out_exec_filter.rb +538 -115
- data/test/plugin/test_out_file.rb +865 -178
- data/test/plugin/test_out_forward.rb +998 -210
- data/test/plugin/test_out_null.rb +105 -0
- data/test/plugin/test_out_relabel.rb +28 -0
- data/test/plugin/test_out_roundrobin.rb +36 -29
- data/test/plugin/test_out_secondary_file.rb +458 -0
- data/test/plugin/test_out_stdout.rb +135 -37
- data/test/plugin/test_out_stream.rb +18 -0
- data/test/plugin/test_output.rb +984 -0
- data/test/plugin/test_output_as_buffered.rb +2021 -0
- data/test/plugin/test_output_as_buffered_backup.rb +312 -0
- data/test/plugin/test_output_as_buffered_compress.rb +165 -0
- data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
- data/test/plugin/test_output_as_buffered_retries.rb +911 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +874 -0
- data/test/plugin/test_output_as_standard.rb +374 -0
- data/test/plugin/test_owned_by.rb +35 -0
- data/test/plugin/test_parser.rb +359 -0
- data/test/plugin/test_parser_apache.rb +42 -0
- data/test/plugin/test_parser_apache2.rb +47 -0
- data/test/plugin/test_parser_apache_error.rb +45 -0
- data/test/plugin/test_parser_csv.rb +103 -0
- data/test/plugin/test_parser_json.rb +138 -0
- data/test/plugin/test_parser_labeled_tsv.rb +145 -0
- data/test/plugin/test_parser_multiline.rb +100 -0
- data/test/plugin/test_parser_nginx.rb +88 -0
- data/test/plugin/test_parser_none.rb +52 -0
- data/test/plugin/test_parser_regexp.rb +289 -0
- data/test/plugin/test_parser_syslog.rb +441 -0
- data/test/plugin/test_parser_tsv.rb +122 -0
- data/test/plugin/test_storage.rb +167 -0
- data/test/plugin/test_storage_local.rb +335 -0
- data/test/plugin_helper/data/cert/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
- data/test/plugin_helper/data/cert/cert.pem +19 -0
- data/test/plugin_helper/http_server/test_app.rb +65 -0
- data/test/plugin_helper/http_server/test_route.rb +32 -0
- data/test/plugin_helper/test_cert_option.rb +16 -0
- data/test/plugin_helper/test_child_process.rb +794 -0
- data/test/plugin_helper/test_compat_parameters.rb +353 -0
- data/test/plugin_helper/test_event_emitter.rb +51 -0
- data/test/plugin_helper/test_event_loop.rb +52 -0
- data/test/plugin_helper/test_extract.rb +194 -0
- data/test/plugin_helper/test_formatter.rb +255 -0
- data/test/plugin_helper/test_http_server_helper.rb +205 -0
- data/test/plugin_helper/test_inject.rb +519 -0
- data/test/plugin_helper/test_parser.rb +264 -0
- data/test/plugin_helper/test_record_accessor.rb +197 -0
- data/test/plugin_helper/test_retry_state.rb +442 -0
- data/test/plugin_helper/test_server.rb +1714 -0
- data/test/plugin_helper/test_storage.rb +542 -0
- data/test/plugin_helper/test_thread.rb +164 -0
- data/test/plugin_helper/test_timer.rb +132 -0
- data/test/scripts/exec_script.rb +0 -6
- data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
- data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
- data/test/scripts/fluent/plugin/out_test.rb +23 -15
- data/test/scripts/fluent/plugin/out_test2.rb +80 -0
- data/test/test_clock.rb +164 -0
- data/test/test_config.rb +16 -7
- data/test/test_configdsl.rb +2 -2
- data/test/test_event.rb +360 -13
- data/test/test_event_router.rb +108 -11
- data/test/test_event_time.rb +199 -0
- data/test/test_filter.rb +48 -6
- data/test/test_formatter.rb +11 -391
- data/test/test_input.rb +1 -1
- data/test/test_log.rb +591 -31
- data/test/test_mixin.rb +1 -1
- data/test/test_output.rb +121 -185
- data/test/test_plugin.rb +251 -0
- data/test/test_plugin_classes.rb +177 -10
- data/test/test_plugin_helper.rb +81 -0
- data/test/test_plugin_id.rb +101 -0
- data/test/test_process.rb +8 -42
- data/test/test_root_agent.rb +766 -21
- data/test/test_supervisor.rb +481 -0
- data/test/test_test_drivers.rb +135 -0
- data/test/test_time_formatter.rb +282 -0
- data/test/test_time_parser.rb +231 -0
- data/test/test_unique_id.rb +47 -0
- metadata +454 -60
- data/COPYING +0 -14
- data/ChangeLog +0 -666
- data/lib/fluent/buffer.rb +0 -365
- data/lib/fluent/plugin/in_status.rb +0 -76
- data/test/plugin/test_in_status.rb +0 -38
- data/test/test_buffer.rb +0 -624
- data/test/test_parser.rb +0 -1305
@@ -0,0 +1,282 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'fluent/test'
|
3
|
+
require 'fluent/time'
|
4
|
+
|
5
|
+
class TimeFormatterTest < ::Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@time = Time.new(2014, 9, 27, 0, 0, 0, 0).to_i
|
8
|
+
@fmt = "%Y%m%d %H%M%z" # YYYYMMDD HHMM[+-]HHMM
|
9
|
+
end
|
10
|
+
|
11
|
+
def format(format, localtime, timezone)
|
12
|
+
formatter = Fluent::TimeFormatter.new(format, localtime, timezone)
|
13
|
+
formatter.format(@time)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_default_utc_nil
|
17
|
+
assert_equal("2014-09-27T00:00:00Z", format(nil, false, nil))
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_default_utc_pHH_MM
|
21
|
+
assert_equal("2014-09-27T01:30:00+01:30", format(nil, false, "+01:30"))
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_default_utc_nHH_MM
|
25
|
+
assert_equal("2014-09-26T22:30:00-01:30", format(nil, false, "-01:30"))
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_default_utc_pHHMM
|
29
|
+
assert_equal("2014-09-27T02:30:00+02:30", format(nil, false, "+0230"))
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_default_utc_nHHMM
|
33
|
+
assert_equal("2014-09-26T21:30:00-02:30", format(nil, false, "-0230"))
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_default_utc_pHH
|
37
|
+
assert_equal("2014-09-27T03:00:00+03:00", format(nil, false, "+03"))
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_default_utc_nHH
|
41
|
+
assert_equal("2014-09-26T21:00:00-03:00", format(nil, false, "-03"))
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_default_utc_timezone_1
|
45
|
+
# Asia/Tokyo (+09:00) does not have daylight saving time.
|
46
|
+
assert_equal("2014-09-27T09:00:00+09:00", format(nil, false, "Asia/Tokyo"))
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_default_utc_timezone_2
|
50
|
+
# Pacific/Honolulu (-10:00) does not have daylight saving time.
|
51
|
+
assert_equal("2014-09-26T14:00:00-10:00", format(nil, false, "Pacific/Honolulu"))
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_default_utc_timezone_3
|
55
|
+
# America/Argentina/Buenos_Aires (-03:00) does not have daylight saving time.
|
56
|
+
assert_equal("2014-09-26T21:00:00-03:00", format(nil, false, "America/Argentina/Buenos_Aires"))
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_default_utc_timezone_4
|
60
|
+
# Europe/Paris has daylight saving time. Its UTC offset is +01:00 and its
|
61
|
+
# UTC offset in DST is +02:00. In September, Europe/Paris is in DST.
|
62
|
+
assert_equal("2014-09-27T02:00:00+02:00", format(nil, false, "Europe/Paris"))
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_default_utc_timezone_5
|
66
|
+
# Europe/Paris has daylight saving time. Its UTC offset is +01:00 and its
|
67
|
+
# UTC offset in DST is +02:00. In January, Europe/Paris is not in DST.
|
68
|
+
@time = Time.new(2014, 1, 24, 0, 0, 0, 0).to_i
|
69
|
+
assert_equal("2014-01-24T01:00:00+01:00", format(nil, false, "Europe/Paris"))
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_default_utc_invalid
|
73
|
+
assert_equal("2014-09-27T00:00:00Z", format(nil, false, "Invalid"))
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_default_localtime_nil_1
|
77
|
+
with_timezone("UTC-04") do
|
78
|
+
assert_equal("2014-09-27T04:00:00+04:00", format(nil, true, nil))
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_default_localtime_nil_2
|
83
|
+
with_timezone("UTC+05") do
|
84
|
+
assert_equal("2014-09-26T19:00:00-05:00", format(nil, true, nil))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_default_localtime_timezone
|
89
|
+
# 'timezone' takes precedence over 'localtime'.
|
90
|
+
with_timezone("UTC-06") do
|
91
|
+
assert_equal("2014-09-27T07:00:00+07:00", format(nil, true, "+07"))
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_specific_utc_nil
|
96
|
+
assert_equal("20140927 0000+0000", format(@fmt, false, nil))
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_specific_utc_pHH_MM
|
100
|
+
assert_equal("20140927 0830+0830", format(@fmt, false, "+08:30"))
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_specific_utc_nHH_MM
|
104
|
+
assert_equal("20140926 1430-0930", format(@fmt, false, "-09:30"))
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_specific_utc_pHHMM
|
108
|
+
assert_equal("20140927 1030+1030", format(@fmt, false, "+1030"))
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_specific_utc_nHHMM
|
112
|
+
assert_equal("20140926 1230-1130", format(@fmt, false, "-1130"))
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_specific_utc_pHH
|
116
|
+
assert_equal("20140927 1200+1200", format(@fmt, false, "+12"))
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_specific_utc_nHH
|
120
|
+
assert_equal("20140926 1100-1300", format(@fmt, false, "-13"))
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_specific_utc_timezone_1
|
124
|
+
# Europe/Moscow (+04:00) does not have daylight saving time.
|
125
|
+
assert_equal("20140927 0400+0400", format(@fmt, false, "Europe/Moscow"))
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_specific_utc_timezone_2
|
129
|
+
# Pacific/Galapagos (-06:00) does not have daylight saving time.
|
130
|
+
assert_equal("20140926 1800-0600", format(@fmt, false, "Pacific/Galapagos"))
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_specific_utc_timezone_3
|
134
|
+
# America/Argentina/Buenos_Aires (-03:00) does not have daylight saving time.
|
135
|
+
assert_equal("20140926 2100-0300", format(@fmt, false, "America/Argentina/Buenos_Aires"))
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_specific_utc_timezone_4
|
139
|
+
# America/Los_Angeles has daylight saving time. Its UTC offset is -08:00 and its
|
140
|
+
# UTC offset in DST is -07:00. In September, America/Los_Angeles is in DST.
|
141
|
+
assert_equal("20140926 1700-0700", format(@fmt, false, "America/Los_Angeles"))
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_specific_utc_timezone_5
|
145
|
+
# America/Los_Angeles has daylight saving time. Its UTC offset is -08:00 and its
|
146
|
+
# UTC offset in DST is -07:00. In January, America/Los_Angeles is not in DST.
|
147
|
+
@time = Time.new(2014, 1, 24, 0, 0, 0, 0).to_i
|
148
|
+
assert_equal("20140123 1600-0800", format(@fmt, false, "America/Los_Angeles"))
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_specific_utc_invalid
|
152
|
+
assert_equal("20140927 0000+0000", format(@fmt, false, "Invalid"))
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_specific_localtime_nil_1
|
156
|
+
with_timezone("UTC-07") do
|
157
|
+
assert_equal("20140927 0700+0700", format(@fmt, true, nil))
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_specific_localtime_nil_2
|
162
|
+
with_timezone("UTC+08") do
|
163
|
+
assert_equal("20140926 1600-0800", format(@fmt, true, nil))
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_specific_localtime_timezone
|
168
|
+
# 'timezone' takes precedence over 'localtime'.
|
169
|
+
with_timezone("UTC-09") do
|
170
|
+
assert_equal("20140926 1400-1000", format(@fmt, true, "-10"))
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_format_with_subsec
|
175
|
+
time = Fluent::EventTime.new(@time)
|
176
|
+
formatter = Fluent::TimeFormatter.new("%Y%m%d %H%M.%N", false, nil)
|
177
|
+
assert_equal("20140927 0000.000000000", formatter.format(time))
|
178
|
+
end
|
179
|
+
|
180
|
+
sub_test_case 'TimeMixin::Formatter' do
|
181
|
+
class DummyForTimeFormatter
|
182
|
+
include Fluent::Configurable
|
183
|
+
include Fluent::TimeMixin::Formatter
|
184
|
+
end
|
185
|
+
|
186
|
+
test 'provides configuration parameters for TimeFormatter with default values for localtime' do
|
187
|
+
str = with_timezone("UTC+07") do
|
188
|
+
i = DummyForTimeFormatter.new
|
189
|
+
i.configure(config_element('format'))
|
190
|
+
|
191
|
+
assert_nil i.time_format
|
192
|
+
assert_true i.localtime
|
193
|
+
assert_false i.utc
|
194
|
+
assert_nil i.timezone
|
195
|
+
|
196
|
+
fmt = i.time_formatter_create
|
197
|
+
fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
198
|
+
end
|
199
|
+
assert_equal "2016-09-02T11:42:31-07:00", str
|
200
|
+
end
|
201
|
+
|
202
|
+
test 'provides configuration parameters for TimeFormatter, configurable for any time format' do
|
203
|
+
str = with_timezone("UTC+07") do
|
204
|
+
i = DummyForTimeFormatter.new
|
205
|
+
i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z'}))
|
206
|
+
|
207
|
+
fmt = i.time_formatter_create
|
208
|
+
fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
209
|
+
end
|
210
|
+
assert_equal "2016-09-02 11:42:31.012345678 -0700", str
|
211
|
+
end
|
212
|
+
|
213
|
+
test 'provides configuration parameters for TimeFormatter, configurable for UTC' do
|
214
|
+
str = with_timezone("UTC+07") do
|
215
|
+
i = DummyForTimeFormatter.new
|
216
|
+
i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z', 'utc' => 'true'}))
|
217
|
+
|
218
|
+
fmt = i.time_formatter_create
|
219
|
+
fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
220
|
+
end
|
221
|
+
assert_equal "2016-09-02 18:42:31.012345678 +0000", str
|
222
|
+
end
|
223
|
+
|
224
|
+
test 'provides configuration parameters for TimeFormatter, configurable for any timezone' do
|
225
|
+
str = with_timezone("UTC+07") do
|
226
|
+
i = DummyForTimeFormatter.new
|
227
|
+
i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z', 'timezone' => '+0900'}))
|
228
|
+
|
229
|
+
fmt = i.time_formatter_create
|
230
|
+
fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
231
|
+
end
|
232
|
+
assert_equal "2016-09-03 03:42:31.012345678 +0900", str
|
233
|
+
end
|
234
|
+
|
235
|
+
test '#time_formatter_create returns TimeFormatter with specified time format and timezone' do
|
236
|
+
str = with_timezone("UTC+07") do
|
237
|
+
i = DummyForTimeFormatter.new
|
238
|
+
i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z', 'timezone' => '+0900'}))
|
239
|
+
|
240
|
+
fmt = i.time_formatter_create(format: '%m/%d/%Y %H-%M-%S %N', timezone: '+0000')
|
241
|
+
fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
242
|
+
end
|
243
|
+
assert_equal "09/02/2016 18-42-31 012345678", str
|
244
|
+
end
|
245
|
+
|
246
|
+
test '#time_formatter_create returns TimeFormatter with localtime besides any configuration parameters' do
|
247
|
+
str = with_timezone("UTC+07") do
|
248
|
+
i = DummyForTimeFormatter.new
|
249
|
+
i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z', 'utc' => 'true'}))
|
250
|
+
|
251
|
+
fmt = i.time_formatter_create(format: '%m/%d/%Y %H-%M-%S %N', force_localtime: true)
|
252
|
+
fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
253
|
+
end
|
254
|
+
assert_equal "09/02/2016 11-42-31 012345678", str
|
255
|
+
|
256
|
+
str = with_timezone("UTC+07") do
|
257
|
+
i = DummyForTimeFormatter.new
|
258
|
+
i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z', 'timezone' => '+0900'}))
|
259
|
+
|
260
|
+
fmt = i.time_formatter_create(format: '%m/%d/%Y %H-%M-%S %N', force_localtime: true)
|
261
|
+
fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
262
|
+
end
|
263
|
+
assert_equal "09/02/2016 11-42-31 012345678", str
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
test '#time_formatter_create returns NumericTimeFormatter to format time as unixtime when time_type unixtime specified' do
|
268
|
+
i = DummyForTimeFormatter.new
|
269
|
+
i.configure(config_element('format', '', {'time_type' => 'unixtime'}))
|
270
|
+
fmt = i.time_formatter_create
|
271
|
+
time = event_time("2016-10-03 20:08:30.123456789 +0100", format: '%Y-%m-%d %H:%M:%S.%N %z')
|
272
|
+
assert_equal "#{time.sec}", fmt.format(time)
|
273
|
+
end
|
274
|
+
|
275
|
+
test '#time_formatter_create returns NumericTimeFormatter to format time as float when time_type float specified' do
|
276
|
+
i = DummyForTimeFormatter.new
|
277
|
+
i.configure(config_element('format', '', {'time_type' => 'float'}))
|
278
|
+
fmt = i.time_formatter_create
|
279
|
+
time = event_time("2016-10-03 20:08:30.123456789 +0100", format: '%Y-%m-%d %H:%M:%S.%N %z')
|
280
|
+
assert_equal "#{time.sec}.#{time.nsec}", fmt.format(time)
|
281
|
+
end
|
282
|
+
end
|
@@ -0,0 +1,231 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'fluent/test'
|
3
|
+
require 'fluent/time'
|
4
|
+
|
5
|
+
class TimeParserTest < ::Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
Fluent::Test.setup
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_call_with_parse
|
11
|
+
parser = Fluent::TimeParser.new
|
12
|
+
|
13
|
+
assert(parser.parse('2013-09-18 12:00:00 +0900').is_a?(Fluent::EventTime))
|
14
|
+
|
15
|
+
time = event_time('2013-09-18 12:00:00 +0900')
|
16
|
+
assert_equal(time, parser.parse('2013-09-18 12:00:00 +0900'))
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_parse_with_strptime
|
20
|
+
parser = Fluent::TimeParser.new('%d/%b/%Y:%H:%M:%S %z')
|
21
|
+
|
22
|
+
assert(parser.parse('28/Feb/2013:12:00:00 +0900').is_a?(Fluent::EventTime))
|
23
|
+
|
24
|
+
time = event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z')
|
25
|
+
assert_equal(time, parser.parse('28/Feb/2013:12:00:00 +0900'))
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_parse_nsec_with_strptime
|
29
|
+
parser = Fluent::TimeParser.new('%d/%b/%Y:%H:%M:%S:%N %z')
|
30
|
+
|
31
|
+
assert(parser.parse('28/Feb/2013:12:00:00:123456789 +0900').is_a?(Fluent::EventTime))
|
32
|
+
|
33
|
+
time = event_time('28/Feb/2013:12:00:00:123456789 +0900', format: '%d/%b/%Y:%H:%M:%S:%N %z')
|
34
|
+
assert_equal_event_time(time, parser.parse('28/Feb/2013:12:00:00:123456789 +0900'))
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_parse_iso8601
|
38
|
+
parser = Fluent::TimeParser.new('%iso8601')
|
39
|
+
|
40
|
+
assert(parser.parse('2017-01-01T12:00:00+09:00').is_a?(Fluent::EventTime))
|
41
|
+
|
42
|
+
time = event_time('2017-01-01T12:00:00+09:00')
|
43
|
+
assert_equal(time, parser.parse('2017-01-01T12:00:00+09:00'))
|
44
|
+
|
45
|
+
time_with_msec = event_time('2017-01-01T12:00:00.123+09:00')
|
46
|
+
assert_equal(time_with_msec, parser.parse('2017-01-01T12:00:00.123+09:00'))
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_parse_with_invalid_argument
|
50
|
+
parser = Fluent::TimeParser.new
|
51
|
+
|
52
|
+
[[], {}, nil, true, 10000, //, ->{}, '', :symbol].each { |v|
|
53
|
+
assert_raise Fluent::TimeParser::TimeParseError do
|
54
|
+
parser.parse(v)
|
55
|
+
end
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_parse_time_in_localtime
|
60
|
+
time = with_timezone("UTC+02") do
|
61
|
+
parser = Fluent::TimeParser.new("%Y-%m-%d %H:%M:%S.%N", true)
|
62
|
+
parser.parse("2016-09-02 18:42:31.123456789")
|
63
|
+
end
|
64
|
+
assert_equal_event_time(time, event_time("2016-09-02 18:42:31.123456789 -02:00", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_parse_time_in_utc
|
68
|
+
time = with_timezone("UTC-09") do
|
69
|
+
parser = Fluent::TimeParser.new("%Y-%m-%d %H:%M:%S.%N", false)
|
70
|
+
parser.parse("2016-09-02 18:42:31.123456789")
|
71
|
+
end
|
72
|
+
assert_equal_event_time(time, event_time("2016-09-02 18:42:31.123456789 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_parse_string_with_expected_timezone
|
76
|
+
time = with_timezone("UTC-09") do
|
77
|
+
parser = Fluent::TimeParser.new("%Y-%m-%d %H:%M:%S.%N", nil, "-07:00")
|
78
|
+
parser.parse("2016-09-02 18:42:31.123456789")
|
79
|
+
end
|
80
|
+
assert_equal_event_time(time, event_time("2016-09-02 18:42:31.123456789 -07:00", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_parse_time_with_expected_timezone_name
|
84
|
+
time = with_timezone("UTC-09") do
|
85
|
+
parser = Fluent::TimeParser.new("%Y-%m-%d %H:%M:%S.%N", nil, "Europe/Zurich")
|
86
|
+
parser.parse("2016-12-02 18:42:31.123456789")
|
87
|
+
end
|
88
|
+
assert_equal_event_time(time, event_time("2016-12-02 18:42:31.123456789 +01:00", format: '%Y-%m-%d %H:%M:%S.%N %z'))
|
89
|
+
end
|
90
|
+
|
91
|
+
sub_test_case 'TimeMixin::Parser' do
|
92
|
+
class DummyForTimeParser
|
93
|
+
include Fluent::Configurable
|
94
|
+
include Fluent::TimeMixin::Parser
|
95
|
+
end
|
96
|
+
|
97
|
+
test 'provides configuration parameters for TimeParser with default values for localtime' do
|
98
|
+
time = with_timezone("UTC+07") do
|
99
|
+
i = DummyForTimeParser.new
|
100
|
+
i.configure(config_element('parse'))
|
101
|
+
|
102
|
+
assert_nil i.time_format
|
103
|
+
assert_true i.localtime
|
104
|
+
assert_false i.utc
|
105
|
+
assert_nil i.timezone
|
106
|
+
|
107
|
+
parser = i.time_parser_create
|
108
|
+
# time_format unspecified
|
109
|
+
# localtime
|
110
|
+
parser.parse("2016-09-02 18:42:31.012345678")
|
111
|
+
end
|
112
|
+
assert_equal_event_time(event_time("2016-09-02 18:42:31.012345678 -07:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
|
113
|
+
end
|
114
|
+
|
115
|
+
test 'provides configuration parameters for TimeParser, configurable for any time format' do
|
116
|
+
time = with_timezone("UTC+07") do
|
117
|
+
i = DummyForTimeParser.new
|
118
|
+
i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S %N'}))
|
119
|
+
parser = i.time_parser_create
|
120
|
+
# time_format specified
|
121
|
+
# localtime
|
122
|
+
parser.parse("09/02/2016 18-42-31 012345678")
|
123
|
+
end
|
124
|
+
assert_equal_event_time(event_time("2016-09-02 18:42:31.012345678 -07:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
|
125
|
+
end
|
126
|
+
|
127
|
+
test 'provides configuration parameters for TimeParser, configurable for UTC by localtime=false' do
|
128
|
+
time = with_timezone("UTC+07") do
|
129
|
+
i = DummyForTimeParser.new
|
130
|
+
i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S %N', 'localtime' => 'false'}))
|
131
|
+
parser = i.time_parser_create
|
132
|
+
# time_format specified
|
133
|
+
# utc
|
134
|
+
parser.parse("09/02/2016 18-42-31 012345678")
|
135
|
+
end
|
136
|
+
assert_equal_event_time(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
|
137
|
+
end
|
138
|
+
|
139
|
+
test 'provides configuration parameters for TimeParser, configurable for UTC by utc=true' do
|
140
|
+
time = with_timezone("UTC+07") do
|
141
|
+
i = DummyForTimeParser.new
|
142
|
+
i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S %N', 'utc' => 'true'}))
|
143
|
+
parser = i.time_parser_create
|
144
|
+
# time_format specified
|
145
|
+
# utc
|
146
|
+
parser.parse("09/02/2016 18-42-31 012345678")
|
147
|
+
end
|
148
|
+
assert_equal_event_time(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
|
149
|
+
end
|
150
|
+
|
151
|
+
test 'provides configuration parameters for TimeParser, configurable for any timezone' do
|
152
|
+
time = with_timezone("UTC+07") do
|
153
|
+
i = DummyForTimeParser.new
|
154
|
+
i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S %N', 'timezone' => '-01:00'}))
|
155
|
+
parser = i.time_parser_create
|
156
|
+
# time_format specified
|
157
|
+
# -01:00
|
158
|
+
parser.parse("09/02/2016 18-42-31 012345678")
|
159
|
+
end
|
160
|
+
assert_equal_event_time(event_time("2016-09-02 18:42:31.012345678 -01:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
|
161
|
+
end
|
162
|
+
|
163
|
+
test 'specifying timezone without time format raises configuration error' do
|
164
|
+
assert_raise Fluent::ConfigError.new("specifying timezone requires time format") do
|
165
|
+
i = DummyForTimeParser.new
|
166
|
+
i.configure(config_element('parse', '', {'utc' => 'true'}))
|
167
|
+
i.time_parser_create
|
168
|
+
end
|
169
|
+
assert_raise Fluent::ConfigError.new("specifying timezone requires time format") do
|
170
|
+
i = DummyForTimeParser.new
|
171
|
+
i.configure(config_element('parse', '', {'localtime' => 'false'}))
|
172
|
+
i.time_parser_create
|
173
|
+
end
|
174
|
+
assert_raise Fluent::ConfigError.new("specifying timezone requires time format") do
|
175
|
+
i = DummyForTimeParser.new
|
176
|
+
i.configure(config_element('parse', '', {'timezone' => '-0700'}))
|
177
|
+
i.time_parser_create
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
test '#time_parser_create returns TimeParser with specified time format and timezone' do
|
182
|
+
time = with_timezone("UTC-09") do
|
183
|
+
i = DummyForTimeParser.new
|
184
|
+
i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S %N'}))
|
185
|
+
assert_equal '%m/%d/%Y %H-%M-%S %N', i.time_format
|
186
|
+
assert_true i.localtime
|
187
|
+
parser = i.time_parser_create(format: '%Y-%m-%d %H:%M:%S.%N %z')
|
188
|
+
parser.parse("2016-09-05 17:59:38.987654321 -03:00")
|
189
|
+
end
|
190
|
+
assert_equal_event_time(event_time("2016-09-05 17:59:38.987654321 -03:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
|
191
|
+
end
|
192
|
+
|
193
|
+
test '#time_parser_create returns TimeParser with localtime when specified it forcedly besides any configuration parameters' do
|
194
|
+
time = with_timezone("UTC-09") do
|
195
|
+
i = DummyForTimeParser.new
|
196
|
+
i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S', 'utc' => 'true'}))
|
197
|
+
assert_equal '%m/%d/%Y %H-%M-%S', i.time_format
|
198
|
+
assert_true i.utc
|
199
|
+
parser = i.time_parser_create(format: '%Y-%m-%d %H:%M:%S.%N', force_localtime: true)
|
200
|
+
parser.parse("2016-09-05 17:59:38.987654321")
|
201
|
+
end
|
202
|
+
assert_equal_event_time(event_time("2016-09-05 17:59:38.987654321 +09:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
|
203
|
+
|
204
|
+
time = with_timezone("UTC-09") do
|
205
|
+
i = DummyForTimeParser.new
|
206
|
+
i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S', 'timezone' => '+0000'}))
|
207
|
+
assert_equal '%m/%d/%Y %H-%M-%S', i.time_format
|
208
|
+
assert_equal '+0000', i.timezone
|
209
|
+
parser = i.time_parser_create(format: '%Y-%m-%d %H:%M:%S.%N', force_localtime: true)
|
210
|
+
parser.parse("2016-09-05 17:59:38.987654321")
|
211
|
+
end
|
212
|
+
assert_equal_event_time(event_time("2016-09-05 17:59:38.987654321 +09:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
|
213
|
+
end
|
214
|
+
|
215
|
+
test '#time_parser_create returns NumericTimeParser to parse time as unixtime when time_type unixtime specified' do
|
216
|
+
i = DummyForTimeParser.new
|
217
|
+
i.configure(config_element('parse', '', {'time_type' => 'unixtime'}))
|
218
|
+
parser = i.time_parser_create
|
219
|
+
time = event_time("2016-10-03 20:08:30.123456789 +0100", format: '%Y-%m-%d %H:%M:%S.%N %z')
|
220
|
+
assert_equal_event_time(Fluent::EventTime.new(time.to_i), parser.parse("#{time.sec}"))
|
221
|
+
end
|
222
|
+
|
223
|
+
test '#time_parser_create returns NumericTimeParser to parse time as float when time_type float specified' do
|
224
|
+
i = DummyForTimeParser.new
|
225
|
+
i.configure(config_element('parse', '', {'time_type' => 'float'}))
|
226
|
+
parser = i.time_parser_create
|
227
|
+
time = event_time("2016-10-03 20:08:30.123456789 +0100", format: '%Y-%m-%d %H:%M:%S.%N %z')
|
228
|
+
assert_equal_event_time(time, parser.parse("#{time.sec}.#{time.nsec}"))
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'fluent/plugin/base'
|
3
|
+
require 'fluent/unique_id'
|
4
|
+
|
5
|
+
module UniqueIdTestEnv
|
6
|
+
class Dummy < Fluent::Plugin::Base
|
7
|
+
include Fluent::UniqueId::Mixin
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class UniqueIdTest < Test::Unit::TestCase
|
12
|
+
sub_test_case 'module used directly' do
|
13
|
+
test '.generate generates 128bit length unique id (16bytes)' do
|
14
|
+
assert_equal 16, Fluent::UniqueId.generate.bytesize
|
15
|
+
ary = []
|
16
|
+
100_000.times do
|
17
|
+
ary << Fluent::UniqueId.generate
|
18
|
+
end
|
19
|
+
assert_equal 100_000, ary.uniq.size
|
20
|
+
end
|
21
|
+
|
22
|
+
test '.hex dumps 16bytes id into 32 chars' do
|
23
|
+
assert_equal 32, Fluent::UniqueId.hex(Fluent::UniqueId.generate).size
|
24
|
+
assert(Fluent::UniqueId.hex(Fluent::UniqueId.generate) =~ /^[0-9a-z]{32}$/)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
sub_test_case 'mixin' do
|
29
|
+
setup do
|
30
|
+
@i = UniqueIdTestEnv::Dummy.new
|
31
|
+
end
|
32
|
+
|
33
|
+
test '#generate_unique_id generates 128bit length id (16bytes)' do
|
34
|
+
assert_equal 16, @i.generate_unique_id.bytesize
|
35
|
+
ary = []
|
36
|
+
100_000.times do
|
37
|
+
ary << @i.generate_unique_id
|
38
|
+
end
|
39
|
+
assert_equal 100_000, ary.uniq.size
|
40
|
+
end
|
41
|
+
|
42
|
+
test '#dump_unique_id_hex dumps 16bytes id into 32 chars' do
|
43
|
+
assert_equal 32, @i.dump_unique_id_hex(@i.generate_unique_id).size
|
44
|
+
assert(@i.dump_unique_id_hex(@i.generate_unique_id) =~ /^[0-9a-z]{32}$/)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|