fluentd 0.14.4-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fluentd might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.github/ISSUE_TEMPLATE.md +6 -0
- data/.gitignore +26 -0
- data/.travis.yml +45 -0
- data/AUTHORS +2 -0
- data/CONTRIBUTING.md +35 -0
- data/COPYING +14 -0
- data/ChangeLog +276 -0
- data/Gemfile +9 -0
- data/README.md +51 -0
- data/Rakefile +53 -0
- data/Vagrantfile +17 -0
- data/appveyor.yml +41 -0
- data/bin/fluent-debug +5 -0
- data/example/copy_roundrobin.conf +39 -0
- data/example/filter_stdout.conf +22 -0
- data/example/in_forward.conf +11 -0
- data/example/in_http.conf +14 -0
- data/example/in_out_forward.conf +17 -0
- data/example/in_syslog.conf +15 -0
- data/example/in_tail.conf +14 -0
- data/example/in_tcp.conf +13 -0
- data/example/in_udp.conf +13 -0
- data/example/multi_filters.conf +61 -0
- data/example/out_buffered_null.conf +32 -0
- data/example/out_copy.conf +20 -0
- data/example/out_file.conf +13 -0
- data/example/out_forward.conf +35 -0
- data/example/out_forward_buf_file.conf +23 -0
- data/example/v0_12_filter.conf +78 -0
- data/example/v1_literal_example.conf +36 -0
- data/fluent.conf +139 -0
- data/fluentd.gemspec +51 -0
- data/lib/fluent/agent.rb +194 -0
- data/lib/fluent/command/bundler_injection.rb +45 -0
- data/lib/fluent/command/cat.rb +319 -0
- data/lib/fluent/command/debug.rb +102 -0
- data/lib/fluent/command/fluentd.rb +273 -0
- data/lib/fluent/compat/call_super_mixin.rb +67 -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 +677 -0
- data/lib/fluent/compat/output_chain.rb +60 -0
- data/lib/fluent/compat/parser.rb +180 -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.rb +56 -0
- data/lib/fluent/config/basic_parser.rb +123 -0
- data/lib/fluent/config/configure_proxy.rb +366 -0
- data/lib/fluent/config/dsl.rb +149 -0
- data/lib/fluent/config/element.rb +218 -0
- data/lib/fluent/config/error.rb +26 -0
- data/lib/fluent/config/literal_parser.rb +251 -0
- data/lib/fluent/config/parser.rb +107 -0
- data/lib/fluent/config/section.rb +212 -0
- data/lib/fluent/config/types.rb +136 -0
- data/lib/fluent/config/v1_parser.rb +190 -0
- data/lib/fluent/configurable.rb +176 -0
- data/lib/fluent/daemon.rb +15 -0
- data/lib/fluent/engine.rb +220 -0
- data/lib/fluent/env.rb +27 -0
- data/lib/fluent/event.rb +287 -0
- data/lib/fluent/event_router.rb +259 -0
- data/lib/fluent/filter.rb +21 -0
- data/lib/fluent/formatter.rb +23 -0
- data/lib/fluent/input.rb +21 -0
- data/lib/fluent/label.rb +38 -0
- data/lib/fluent/load.rb +36 -0
- data/lib/fluent/log.rb +445 -0
- data/lib/fluent/match.rb +141 -0
- data/lib/fluent/mixin.rb +31 -0
- data/lib/fluent/msgpack_factory.rb +62 -0
- data/lib/fluent/output.rb +26 -0
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +23 -0
- data/lib/fluent/plugin.rb +161 -0
- data/lib/fluent/plugin/bare_output.rb +63 -0
- data/lib/fluent/plugin/base.rb +130 -0
- data/lib/fluent/plugin/buf_file.rb +154 -0
- data/lib/fluent/plugin/buf_memory.rb +34 -0
- data/lib/fluent/plugin/buffer.rb +603 -0
- data/lib/fluent/plugin/buffer/chunk.rb +160 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +323 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
- data/lib/fluent/plugin/exec_util.rb +22 -0
- data/lib/fluent/plugin/file_util.rb +22 -0
- data/lib/fluent/plugin/file_wrapper.rb +120 -0
- data/lib/fluent/plugin/filter.rb +93 -0
- data/lib/fluent/plugin/filter_grep.rb +75 -0
- data/lib/fluent/plugin/filter_record_transformer.rb +342 -0
- data/lib/fluent/plugin/filter_stdout.rb +53 -0
- data/lib/fluent/plugin/formatter.rb +45 -0
- data/lib/fluent/plugin/formatter_csv.rb +47 -0
- data/lib/fluent/plugin/formatter_hash.rb +29 -0
- data/lib/fluent/plugin/formatter_json.rb +44 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +41 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +29 -0
- data/lib/fluent/plugin/formatter_out_file.rb +78 -0
- data/lib/fluent/plugin/formatter_single_value.rb +34 -0
- data/lib/fluent/plugin/formatter_stdout.rb +74 -0
- data/lib/fluent/plugin/in_debug_agent.rb +64 -0
- data/lib/fluent/plugin/in_dummy.rb +135 -0
- data/lib/fluent/plugin/in_exec.rb +149 -0
- data/lib/fluent/plugin/in_forward.rb +366 -0
- data/lib/fluent/plugin/in_gc_stat.rb +52 -0
- data/lib/fluent/plugin/in_http.rb +422 -0
- data/lib/fluent/plugin/in_monitor_agent.rb +401 -0
- data/lib/fluent/plugin/in_object_space.rb +90 -0
- data/lib/fluent/plugin/in_syslog.rb +204 -0
- data/lib/fluent/plugin/in_tail.rb +838 -0
- data/lib/fluent/plugin/in_tcp.rb +41 -0
- data/lib/fluent/plugin/in_udp.rb +37 -0
- data/lib/fluent/plugin/in_unix.rb +201 -0
- data/lib/fluent/plugin/input.rb +33 -0
- data/lib/fluent/plugin/multi_output.rb +95 -0
- data/lib/fluent/plugin/out_buffered_null.rb +59 -0
- data/lib/fluent/plugin/out_buffered_stdout.rb +70 -0
- data/lib/fluent/plugin/out_copy.rb +42 -0
- data/lib/fluent/plugin/out_exec.rb +114 -0
- data/lib/fluent/plugin/out_exec_filter.rb +393 -0
- data/lib/fluent/plugin/out_file.rb +167 -0
- data/lib/fluent/plugin/out_forward.rb +646 -0
- data/lib/fluent/plugin/out_null.rb +27 -0
- data/lib/fluent/plugin/out_relabel.rb +28 -0
- data/lib/fluent/plugin/out_roundrobin.rb +80 -0
- data/lib/fluent/plugin/out_stdout.rb +48 -0
- data/lib/fluent/plugin/out_stream.rb +130 -0
- data/lib/fluent/plugin/output.rb +1020 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
- data/lib/fluent/plugin/parser.rb +175 -0
- data/lib/fluent/plugin/parser_apache.rb +28 -0
- data/lib/fluent/plugin/parser_apache2.rb +84 -0
- data/lib/fluent/plugin/parser_apache_error.rb +26 -0
- data/lib/fluent/plugin/parser_csv.rb +33 -0
- data/lib/fluent/plugin/parser_json.rb +79 -0
- data/lib/fluent/plugin/parser_ltsv.rb +50 -0
- data/lib/fluent/plugin/parser_multiline.rb +104 -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 +73 -0
- data/lib/fluent/plugin/parser_syslog.rb +82 -0
- data/lib/fluent/plugin/parser_tsv.rb +37 -0
- data/lib/fluent/plugin/socket_util.rb +22 -0
- data/lib/fluent/plugin/storage.rb +84 -0
- data/lib/fluent/plugin/storage_local.rb +132 -0
- data/lib/fluent/plugin/string_util.rb +22 -0
- data/lib/fluent/plugin_helper.rb +42 -0
- data/lib/fluent/plugin_helper/child_process.rb +298 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +224 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +80 -0
- data/lib/fluent/plugin_helper/event_loop.rb +118 -0
- data/lib/fluent/plugin_helper/formatter.rb +149 -0
- data/lib/fluent/plugin_helper/inject.rb +125 -0
- data/lib/fluent/plugin_helper/parser.rb +147 -0
- data/lib/fluent/plugin_helper/retry_state.rb +177 -0
- data/lib/fluent/plugin_helper/storage.rb +331 -0
- data/lib/fluent/plugin_helper/thread.rb +147 -0
- data/lib/fluent/plugin_helper/timer.rb +90 -0
- data/lib/fluent/plugin_id.rb +63 -0
- data/lib/fluent/process.rb +504 -0
- data/lib/fluent/registry.rb +99 -0
- data/lib/fluent/root_agent.rb +314 -0
- data/lib/fluent/rpc.rb +94 -0
- data/lib/fluent/supervisor.rb +680 -0
- data/lib/fluent/system_config.rb +122 -0
- data/lib/fluent/test.rb +56 -0
- data/lib/fluent/test/base.rb +85 -0
- data/lib/fluent/test/driver/base.rb +179 -0
- data/lib/fluent/test/driver/base_owned.rb +70 -0
- data/lib/fluent/test/driver/base_owner.rb +125 -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 +52 -0
- data/lib/fluent/test/driver/output.rb +76 -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 +77 -0
- data/lib/fluent/test/formatter_test.rb +65 -0
- data/lib/fluent/test/helpers.rb +79 -0
- data/lib/fluent/test/input_test.rb +172 -0
- data/lib/fluent/test/log.rb +73 -0
- data/lib/fluent/test/output_test.rb +156 -0
- data/lib/fluent/test/parser_test.rb +70 -0
- data/lib/fluent/time.rb +175 -0
- data/lib/fluent/timezone.rb +133 -0
- data/lib/fluent/unique_id.rb +39 -0
- data/lib/fluent/version.rb +21 -0
- data/lib/fluent/winsvc.rb +71 -0
- data/test/compat/test_calls_super.rb +166 -0
- data/test/compat/test_parser.rb +82 -0
- data/test/config/assertions.rb +42 -0
- data/test/config/test_config_parser.rb +507 -0
- data/test/config/test_configurable.rb +1194 -0
- data/test/config/test_configure_proxy.rb +386 -0
- data/test/config/test_dsl.rb +415 -0
- data/test/config/test_element.rb +403 -0
- data/test/config/test_literal_parser.rb +297 -0
- data/test/config/test_section.rb +184 -0
- data/test/config/test_system_config.rb +120 -0
- data/test/config/test_types.rb +171 -0
- data/test/helper.rb +119 -0
- data/test/plugin/data/2010/01/20100102-030405.log +0 -0
- data/test/plugin/data/2010/01/20100102-030406.log +0 -0
- data/test/plugin/data/2010/01/20100102.log +0 -0
- data/test/plugin/data/log/bar +0 -0
- data/test/plugin/data/log/foo/bar.log +0 -0
- data/test/plugin/data/log/test.log +0 -0
- data/test/plugin/test_bare_output.rb +118 -0
- data/test/plugin/test_base.rb +75 -0
- data/test/plugin/test_buf_file.rb +571 -0
- data/test/plugin/test_buf_memory.rb +42 -0
- data/test/plugin/test_buffer.rb +1200 -0
- data/test/plugin/test_buffer_chunk.rb +168 -0
- data/test/plugin/test_buffer_file_chunk.rb +771 -0
- data/test/plugin/test_buffer_memory_chunk.rb +265 -0
- data/test/plugin/test_file_util.rb +96 -0
- data/test/plugin/test_filter.rb +353 -0
- data/test/plugin/test_filter_grep.rb +119 -0
- data/test/plugin/test_filter_record_transformer.rb +600 -0
- data/test/plugin/test_filter_stdout.rb +211 -0
- data/test/plugin/test_formatter_csv.rb +94 -0
- data/test/plugin/test_formatter_json.rb +30 -0
- data/test/plugin/test_formatter_ltsv.rb +52 -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_in_debug_agent.rb +28 -0
- data/test/plugin/test_in_dummy.rb +188 -0
- data/test/plugin/test_in_exec.rb +133 -0
- data/test/plugin/test_in_forward.rb +635 -0
- data/test/plugin/test_in_gc_stat.rb +39 -0
- data/test/plugin/test_in_http.rb +442 -0
- data/test/plugin/test_in_monitor_agent.rb +329 -0
- data/test/plugin/test_in_object_space.rb +64 -0
- data/test/plugin/test_in_syslog.rb +205 -0
- data/test/plugin/test_in_tail.rb +1001 -0
- data/test/plugin/test_in_tcp.rb +102 -0
- data/test/plugin/test_in_udp.rb +121 -0
- data/test/plugin/test_in_unix.rb +126 -0
- data/test/plugin/test_input.rb +122 -0
- data/test/plugin/test_multi_output.rb +180 -0
- data/test/plugin/test_out_buffered_null.rb +79 -0
- data/test/plugin/test_out_buffered_stdout.rb +122 -0
- data/test/plugin/test_out_copy.rb +160 -0
- data/test/plugin/test_out_exec.rb +155 -0
- data/test/plugin/test_out_exec_filter.rb +262 -0
- data/test/plugin/test_out_file.rb +383 -0
- data/test/plugin/test_out_forward.rb +590 -0
- data/test/plugin/test_out_null.rb +29 -0
- data/test/plugin/test_out_relabel.rb +28 -0
- data/test/plugin/test_out_roundrobin.rb +146 -0
- data/test/plugin/test_out_stdout.rb +92 -0
- data/test/plugin/test_out_stream.rb +93 -0
- data/test/plugin/test_output.rb +568 -0
- data/test/plugin/test_output_as_buffered.rb +1604 -0
- data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
- data/test/plugin/test_output_as_buffered_retries.rb +839 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +817 -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_apache.rb +42 -0
- data/test/plugin/test_parser_apache2.rb +38 -0
- data/test/plugin/test_parser_apache_error.rb +45 -0
- data/test/plugin/test_parser_base.rb +32 -0
- data/test/plugin/test_parser_csv.rb +104 -0
- data/test/plugin/test_parser_json.rb +107 -0
- data/test/plugin/test_parser_labeled_tsv.rb +129 -0
- data/test/plugin/test_parser_multiline.rb +100 -0
- data/test/plugin/test_parser_nginx.rb +48 -0
- data/test/plugin/test_parser_none.rb +53 -0
- data/test/plugin/test_parser_regexp.rb +277 -0
- data/test/plugin/test_parser_syslog.rb +66 -0
- data/test/plugin/test_parser_time.rb +46 -0
- data/test/plugin/test_parser_tsv.rb +121 -0
- data/test/plugin/test_storage.rb +167 -0
- data/test/plugin/test_storage_local.rb +8 -0
- data/test/plugin/test_string_util.rb +26 -0
- data/test/plugin_helper/test_child_process.rb +608 -0
- data/test/plugin_helper/test_compat_parameters.rb +242 -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_formatter.rb +252 -0
- data/test/plugin_helper/test_inject.rb +487 -0
- data/test/plugin_helper/test_parser.rb +263 -0
- data/test/plugin_helper/test_retry_state.rb +399 -0
- data/test/plugin_helper/test_storage.rb +521 -0
- data/test/plugin_helper/test_thread.rb +164 -0
- data/test/plugin_helper/test_timer.rb +131 -0
- data/test/scripts/exec_script.rb +32 -0
- data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
- data/test/scripts/fluent/plugin/out_test.rb +81 -0
- data/test/scripts/fluent/plugin/out_test2.rb +80 -0
- data/test/scripts/fluent/plugin/parser_known.rb +4 -0
- data/test/test_config.rb +179 -0
- data/test/test_configdsl.rb +148 -0
- data/test/test_event.rb +329 -0
- data/test/test_event_router.rb +331 -0
- data/test/test_event_time.rb +184 -0
- data/test/test_filter.rb +121 -0
- data/test/test_formatter.rb +319 -0
- data/test/test_input.rb +31 -0
- data/test/test_log.rb +572 -0
- data/test/test_match.rb +137 -0
- data/test/test_mixin.rb +351 -0
- data/test/test_output.rb +214 -0
- data/test/test_plugin_classes.rb +136 -0
- data/test/test_plugin_helper.rb +81 -0
- data/test/test_process.rb +48 -0
- data/test/test_root_agent.rb +278 -0
- data/test/test_supervisor.rb +339 -0
- data/test/test_time_formatter.rb +186 -0
- data/test/test_unique_id.rb +47 -0
- metadata +823 -0
@@ -0,0 +1,133 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'tzinfo'
|
18
|
+
|
19
|
+
require 'fluent/config/error'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
class Timezone
|
23
|
+
# [+-]HH:MM, [+-]HHMM, [+-]HH
|
24
|
+
NUMERIC_PATTERN = %r{\A[+-]\d\d(:?\d\d)?\z}
|
25
|
+
|
26
|
+
# Region/Zone, Region/Zone/Zone
|
27
|
+
NAME_PATTERN = %r{\A[^/]+/[^/]+(/[^/]+)?\z}
|
28
|
+
|
29
|
+
# Validate the format of the specified timezone.
|
30
|
+
#
|
31
|
+
# Valid formats are as follows. Note that timezone abbreviations
|
32
|
+
# such as PST and JST are not supported intentionally.
|
33
|
+
#
|
34
|
+
# 1. [+-]HH:MM (e.g. "+09:00")
|
35
|
+
# 2. [+-]HHMM (e.g. "+0900")
|
36
|
+
# 3. [+-]HH (e.g. "+09")
|
37
|
+
# 4. Region/Zone (e.g. "Asia/Tokyo")
|
38
|
+
# 5. Region/Zone/Zone (e.g. "America/Argentina/Buenos_Aires")
|
39
|
+
#
|
40
|
+
# In the 4th and 5th cases, it is checked whether the specified
|
41
|
+
# timezone exists in the timezone database.
|
42
|
+
#
|
43
|
+
# When the given timezone is valid, true is returned. Otherwise,
|
44
|
+
# false is returned. When nil is given, false is returned.
|
45
|
+
def self.validate(timezone)
|
46
|
+
# If the specified timezone is nil.
|
47
|
+
if timezone.nil?
|
48
|
+
# Invalid.
|
49
|
+
return false
|
50
|
+
end
|
51
|
+
|
52
|
+
# [+-]HH:MM, [+-]HHMM, [+-]HH
|
53
|
+
if NUMERIC_PATTERN === timezone
|
54
|
+
# Valid. It can be parsed by Time.zone_offset method.
|
55
|
+
return true
|
56
|
+
end
|
57
|
+
|
58
|
+
# Region/Zone, Region/Zone/Zone
|
59
|
+
if NAME_PATTERN === timezone
|
60
|
+
begin
|
61
|
+
# Get a Timezone instance for the specified timezone.
|
62
|
+
TZInfo::Timezone.get(timezone)
|
63
|
+
rescue
|
64
|
+
# Invalid. The string does not exist in the timezone database.
|
65
|
+
return false
|
66
|
+
else
|
67
|
+
# Valid. The string was found in the timezone database.
|
68
|
+
return true
|
69
|
+
end
|
70
|
+
else
|
71
|
+
# Invalid. Timezone abbreviations are not supported.
|
72
|
+
return false
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Validate the format of the specified timezone.
|
77
|
+
#
|
78
|
+
# The implementation of this method calls validate(timezone) method
|
79
|
+
# to check whether the given timezone is valid. When invalid, this
|
80
|
+
# method raises a ConfigError.
|
81
|
+
def self.validate!(timezone)
|
82
|
+
unless validate(timezone)
|
83
|
+
raise ConfigError, "Unsupported timezone '#{timezone}'"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Create a formatter for a timezone and optionally a format.
|
88
|
+
#
|
89
|
+
# An Proc object is returned. If the given timezone is invalid,
|
90
|
+
# nil is returned.
|
91
|
+
def self.formatter(timezone, format = nil)
|
92
|
+
if timezone.nil?
|
93
|
+
return nil
|
94
|
+
end
|
95
|
+
|
96
|
+
# [+-]HH:MM, [+-]HHMM, [+-]HH
|
97
|
+
if NUMERIC_PATTERN === timezone
|
98
|
+
offset = Time.zone_offset(timezone)
|
99
|
+
|
100
|
+
if format
|
101
|
+
return Proc.new {|time|
|
102
|
+
Time.at(time).localtime(offset).strftime(format)
|
103
|
+
}
|
104
|
+
else
|
105
|
+
return Proc.new {|time|
|
106
|
+
Time.at(time).localtime(offset).iso8601
|
107
|
+
}
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Region/Zone, Region/Zone/Zone
|
112
|
+
if NAME_PATTERN === timezone
|
113
|
+
begin
|
114
|
+
tz = TZInfo::Timezone.get(timezone)
|
115
|
+
rescue
|
116
|
+
return nil
|
117
|
+
end
|
118
|
+
|
119
|
+
if format
|
120
|
+
return Proc.new {|time|
|
121
|
+
Time.at(time).localtime(tz.period_for_utc(time).utc_total_offset).strftime(format)
|
122
|
+
}
|
123
|
+
else
|
124
|
+
return Proc.new {|time|
|
125
|
+
Time.at(time).localtime(tz.period_for_utc(time).utc_total_offset).iso8601
|
126
|
+
}
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
return nil
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
module Fluent
|
18
|
+
module UniqueId
|
19
|
+
def self.generate
|
20
|
+
now = Time.now.utc
|
21
|
+
u1 = ((now.to_i * 1000 * 1000 + now.usec) << 12 | rand(0xfff))
|
22
|
+
[u1 >> 32, u1 & 0xffffffff, rand(0xffffffff), rand(0xffffffff)].pack('NNNN')
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.hex(unique_id)
|
26
|
+
unique_id.unpack('H*').first
|
27
|
+
end
|
28
|
+
|
29
|
+
module Mixin
|
30
|
+
def generate_unique_id
|
31
|
+
Fluent::UniqueId.generate
|
32
|
+
end
|
33
|
+
|
34
|
+
def dump_unique_id_hex(unique_id)
|
35
|
+
Fluent::UniqueId.hex(unique_id)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
module Fluent
|
18
|
+
|
19
|
+
VERSION = '0.14.4'
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
INTEVENTOBJ_NAME = "fluentdwinsvc"
|
18
|
+
|
19
|
+
begin
|
20
|
+
|
21
|
+
require 'windows/debug'
|
22
|
+
require 'Windows/Library'
|
23
|
+
require 'win32/daemon'
|
24
|
+
require 'win32/event'
|
25
|
+
|
26
|
+
include Win32
|
27
|
+
include Windows::Library
|
28
|
+
include Windows::Debug
|
29
|
+
|
30
|
+
def read_fluentdopt
|
31
|
+
require 'win32/Registry'
|
32
|
+
Win32::Registry::HKEY_LOCAL_MACHINE.open("SYSTEM\\CurrentControlSet\\Services\\fluentdwinsvc") do |reg|
|
33
|
+
reg.read("fluentdopt")[1] rescue ""
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def service_main_start
|
38
|
+
ruby_path = 0.chr * 260
|
39
|
+
GetModuleFileName.call(0, ruby_path,260)
|
40
|
+
ruby_path = ruby_path.rstrip.gsub(/\\/, '/')
|
41
|
+
rubybin_dir = ruby_path[0, ruby_path.rindex("/")]
|
42
|
+
opt = read_fluentdopt
|
43
|
+
Process.spawn(rubybin_dir + "/ruby.exe " + rubybin_dir + "/fluentd " + opt + " -x " + INTEVENTOBJ_NAME)
|
44
|
+
end
|
45
|
+
|
46
|
+
class FluentdService < Daemon
|
47
|
+
@pid = 0
|
48
|
+
|
49
|
+
def service_main
|
50
|
+
@pid = service_main_start
|
51
|
+
while running?
|
52
|
+
sleep 10
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def service_stop
|
57
|
+
ev = Win32::Event.open(INTEVENTOBJ_NAME)
|
58
|
+
ev.set
|
59
|
+
ev.close
|
60
|
+
if @pid > 0
|
61
|
+
Porcess.waitpid(@pid)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
FluentdService.mainloop
|
67
|
+
|
68
|
+
rescue Exception => err
|
69
|
+
raise
|
70
|
+
end
|
71
|
+
|
@@ -0,0 +1,166 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
# these are Fluent::Compat::* in fact
|
4
|
+
require 'fluent/input'
|
5
|
+
require 'fluent/output'
|
6
|
+
require 'fluent/filter'
|
7
|
+
|
8
|
+
class CompatCallsSuperTest < Test::Unit::TestCase
|
9
|
+
class DummyGoodInput < Fluent::Input
|
10
|
+
def configure(conf); super; end
|
11
|
+
def start; super; end
|
12
|
+
def before_shutdown; super; end
|
13
|
+
def shutdown; super; end
|
14
|
+
end
|
15
|
+
class DummyBadInput < Fluent::Input
|
16
|
+
def configure(conf); super; end
|
17
|
+
def start; end
|
18
|
+
def before_shutdown; end
|
19
|
+
def shutdown; end
|
20
|
+
end
|
21
|
+
class DummyGoodOutput < Fluent::Output
|
22
|
+
def configure(conf); super; end
|
23
|
+
def start; super; end
|
24
|
+
def before_shutdown; super; end
|
25
|
+
def shutdown; super; end
|
26
|
+
end
|
27
|
+
class DummyBadOutput < Fluent::Output
|
28
|
+
def configure(conf); super; end
|
29
|
+
def start; end
|
30
|
+
def before_shutdown; end
|
31
|
+
def shutdown; end
|
32
|
+
end
|
33
|
+
class DummyGoodFilter < Fluent::Filter
|
34
|
+
def configure(conf); super; end
|
35
|
+
def filter(tag, time, record); end
|
36
|
+
def start; super; end
|
37
|
+
def before_shutdown; super; end
|
38
|
+
def shutdown; super; end
|
39
|
+
end
|
40
|
+
class DummyBadFilter < Fluent::Filter
|
41
|
+
def configure(conf); super; end
|
42
|
+
def filter(tag, time, record); end
|
43
|
+
def start; end
|
44
|
+
def before_shutdown; end
|
45
|
+
def shutdown; end
|
46
|
+
end
|
47
|
+
|
48
|
+
setup do
|
49
|
+
Fluent::Test.setup
|
50
|
+
end
|
51
|
+
|
52
|
+
sub_test_case 'old API plugin which calls super properly' do
|
53
|
+
test 'Input#start, #before_shutdown and #shutdown calls all superclass methods properly' do
|
54
|
+
i = DummyGoodInput.new
|
55
|
+
i.configure(config_element())
|
56
|
+
assert i.configured?
|
57
|
+
|
58
|
+
i.start
|
59
|
+
assert i.started?
|
60
|
+
|
61
|
+
i.before_shutdown
|
62
|
+
assert i.before_shutdown?
|
63
|
+
|
64
|
+
i.shutdown
|
65
|
+
assert i.shutdown?
|
66
|
+
|
67
|
+
assert i.log.out.logs.empty?
|
68
|
+
end
|
69
|
+
|
70
|
+
test 'Output#start, #before_shutdown and #shutdown calls all superclass methods properly' do
|
71
|
+
i = DummyGoodOutput.new
|
72
|
+
i.configure(config_element())
|
73
|
+
assert i.configured?
|
74
|
+
|
75
|
+
i.start
|
76
|
+
assert i.started?
|
77
|
+
|
78
|
+
i.before_shutdown
|
79
|
+
assert i.before_shutdown?
|
80
|
+
|
81
|
+
i.shutdown
|
82
|
+
assert i.shutdown?
|
83
|
+
|
84
|
+
assert i.log.out.logs.empty?
|
85
|
+
end
|
86
|
+
|
87
|
+
test 'Filter#start, #before_shutdown and #shutdown calls all superclass methods properly' do
|
88
|
+
i = DummyGoodFilter.new
|
89
|
+
i.configure(config_element())
|
90
|
+
assert i.configured?
|
91
|
+
|
92
|
+
i.start
|
93
|
+
assert i.started?
|
94
|
+
|
95
|
+
i.before_shutdown
|
96
|
+
assert i.before_shutdown?
|
97
|
+
|
98
|
+
i.shutdown
|
99
|
+
assert i.shutdown?
|
100
|
+
|
101
|
+
assert i.log.out.logs.empty?
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
sub_test_case 'old API plugin which does not call super' do
|
106
|
+
test 'Input#start, #before_shutdown and #shutdown calls superclass methods forcedly with logs' do
|
107
|
+
i = DummyBadInput.new
|
108
|
+
i.configure(config_element())
|
109
|
+
assert i.configured?
|
110
|
+
|
111
|
+
i.start
|
112
|
+
assert i.started?
|
113
|
+
|
114
|
+
i.before_shutdown
|
115
|
+
assert i.before_shutdown?
|
116
|
+
|
117
|
+
i.shutdown
|
118
|
+
assert i.shutdown?
|
119
|
+
|
120
|
+
logs = i.log.out.logs
|
121
|
+
assert{ logs.any?{|l| l.include?("[warn]: super was not called in #start: called it forcedly plugin=CompatCallsSuperTest::DummyBadInput") } }
|
122
|
+
assert{ logs.any?{|l| l.include?("[warn]: super was not called in #before_shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadInput") } }
|
123
|
+
assert{ logs.any?{|l| l.include?("[warn]: super was not called in #shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadInput") } }
|
124
|
+
end
|
125
|
+
|
126
|
+
test 'Output#start, #before_shutdown and #shutdown calls superclass methods forcedly with logs' do
|
127
|
+
i = DummyBadOutput.new
|
128
|
+
i.configure(config_element())
|
129
|
+
assert i.configured?
|
130
|
+
|
131
|
+
i.start
|
132
|
+
assert i.started?
|
133
|
+
|
134
|
+
i.before_shutdown
|
135
|
+
assert i.before_shutdown?
|
136
|
+
|
137
|
+
i.shutdown
|
138
|
+
assert i.shutdown?
|
139
|
+
|
140
|
+
logs = i.log.out.logs
|
141
|
+
assert{ logs.any?{|l| l.include?("[warn]: super was not called in #start: called it forcedly plugin=CompatCallsSuperTest::DummyBadOutput") } }
|
142
|
+
assert{ logs.any?{|l| l.include?("[warn]: super was not called in #before_shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadOutput") } }
|
143
|
+
assert{ logs.any?{|l| l.include?("[warn]: super was not called in #shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadOutput") } }
|
144
|
+
end
|
145
|
+
|
146
|
+
test 'Filter#start, #before_shutdown and #shutdown calls superclass methods forcedly with logs' do
|
147
|
+
i = DummyBadFilter.new
|
148
|
+
i.configure(config_element())
|
149
|
+
assert i.configured?
|
150
|
+
|
151
|
+
i.start
|
152
|
+
assert i.started?
|
153
|
+
|
154
|
+
i.before_shutdown
|
155
|
+
assert i.before_shutdown?
|
156
|
+
|
157
|
+
i.shutdown
|
158
|
+
assert i.shutdown?
|
159
|
+
|
160
|
+
logs = i.log.out.logs
|
161
|
+
assert{ logs.any?{|l| l.include?("[warn]: super was not called in #start: called it forcedly plugin=CompatCallsSuperTest::DummyBadFilter") } }
|
162
|
+
assert{ logs.any?{|l| l.include?("[warn]: super was not called in #before_shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadFilter") } }
|
163
|
+
assert{ logs.any?{|l| l.include?("[warn]: super was not called in #shutdown: calling it forcedly plugin=CompatCallsSuperTest::DummyBadFilter") } }
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
require 'fluent/plugin/parser'
|
3
|
+
|
4
|
+
class TextParserTest < ::Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
Fluent::Test.setup
|
7
|
+
end
|
8
|
+
|
9
|
+
class MultiEventTestParser < ::Fluent::Parser
|
10
|
+
include Fluent::Configurable
|
11
|
+
|
12
|
+
def parse(text)
|
13
|
+
2.times { |i|
|
14
|
+
record = {}
|
15
|
+
record['message'] = text
|
16
|
+
record['number'] = i
|
17
|
+
yield Fluent::Engine.now, record
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Fluent::TextParser.register_template('multi_event_test', Proc.new { MultiEventTestParser.new })
|
23
|
+
|
24
|
+
def test_lookup_unknown_format
|
25
|
+
assert_raise Fluent::ConfigError do
|
26
|
+
Fluent::Plugin.new_parser('unknown')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
data('register_formatter' => 'known', 'register_template' => 'known_old')
|
31
|
+
def test_lookup_known_parser(data)
|
32
|
+
$LOAD_PATH.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'scripts'))
|
33
|
+
assert_nothing_raised Fluent::ConfigError do
|
34
|
+
Fluent::Plugin.new_parser(data)
|
35
|
+
end
|
36
|
+
$LOAD_PATH.shift
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_parse_with_return
|
40
|
+
parser = Fluent::TextParser.new
|
41
|
+
parser.configure('format' => 'none')
|
42
|
+
_time, record = parser.parse('log message!')
|
43
|
+
assert_equal({'message' => 'log message!'}, record)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_parse_with_block
|
47
|
+
parser = Fluent::TextParser.new
|
48
|
+
parser.configure('format' => 'none')
|
49
|
+
parser.parse('log message!') { |time, record|
|
50
|
+
assert_equal({'message' => 'log message!'}, record)
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_multi_event_parser
|
55
|
+
parser = Fluent::TextParser.new
|
56
|
+
parser.configure('format' => 'multi_event_test')
|
57
|
+
i = 0
|
58
|
+
parser.parse('log message!') { |time, record|
|
59
|
+
assert_equal('log message!', record['message'])
|
60
|
+
assert_equal(i, record['number'])
|
61
|
+
i += 1
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_setting_estimate_current_event_value
|
66
|
+
p1 = Fluent::TextParser.new
|
67
|
+
assert_nil p1.estimate_current_event
|
68
|
+
assert_nil p1.parser
|
69
|
+
|
70
|
+
p1.configure('format' => 'none')
|
71
|
+
assert_equal true, p1.parser.estimate_current_event
|
72
|
+
|
73
|
+
p2 = Fluent::TextParser.new
|
74
|
+
assert_nil p2.estimate_current_event
|
75
|
+
assert_nil p2.parser
|
76
|
+
|
77
|
+
p2.estimate_current_event = false
|
78
|
+
|
79
|
+
p2.configure('format' => 'none')
|
80
|
+
assert_equal false, p2.parser.estimate_current_event
|
81
|
+
end
|
82
|
+
end
|