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
data/lib/fluent/match.rb
ADDED
@@ -0,0 +1,141 @@
|
|
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
|
+
class MatchPattern
|
19
|
+
def self.create(str)
|
20
|
+
if str == '**'
|
21
|
+
AllMatchPattern.new
|
22
|
+
else
|
23
|
+
GlobMatchPattern.new(str)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class AllMatchPattern < MatchPattern
|
29
|
+
def match(str)
|
30
|
+
true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class GlobMatchPattern < MatchPattern
|
35
|
+
def initialize(pat)
|
36
|
+
stack = []
|
37
|
+
regex = ['']
|
38
|
+
escape = false
|
39
|
+
dot = false
|
40
|
+
|
41
|
+
i = 0
|
42
|
+
while i < pat.length
|
43
|
+
c = pat[i,1]
|
44
|
+
|
45
|
+
if escape
|
46
|
+
regex.last << Regexp.escape(c)
|
47
|
+
escape = false
|
48
|
+
i += 1
|
49
|
+
next
|
50
|
+
|
51
|
+
elsif pat[i,2] == "**"
|
52
|
+
# recursive any
|
53
|
+
if dot
|
54
|
+
regex.last << "(?![^\\.])"
|
55
|
+
dot = false
|
56
|
+
end
|
57
|
+
if pat[i+2,1] == "."
|
58
|
+
regex.last << "(?:.*\\.|\\A)"
|
59
|
+
i += 3
|
60
|
+
else
|
61
|
+
regex.last << ".*"
|
62
|
+
i += 2
|
63
|
+
end
|
64
|
+
next
|
65
|
+
|
66
|
+
elsif dot
|
67
|
+
regex.last << "\\."
|
68
|
+
dot = false
|
69
|
+
end
|
70
|
+
|
71
|
+
if c == "\\"
|
72
|
+
escape = true
|
73
|
+
|
74
|
+
elsif c == "."
|
75
|
+
dot = true
|
76
|
+
|
77
|
+
elsif c == "*"
|
78
|
+
# any
|
79
|
+
regex.last << "[^\\.]*"
|
80
|
+
|
81
|
+
# TODO
|
82
|
+
#elsif c == "["
|
83
|
+
# # character class
|
84
|
+
# chars = ''
|
85
|
+
# while i < pat.length
|
86
|
+
# c = pat[i,1]
|
87
|
+
# if c == "]"
|
88
|
+
# break
|
89
|
+
# else
|
90
|
+
# chars << c
|
91
|
+
# end
|
92
|
+
# i += 1
|
93
|
+
# end
|
94
|
+
# regex.last << '['+Regexp.escape(chars).gsub("\\-",'-')+']'
|
95
|
+
|
96
|
+
elsif c == "{"
|
97
|
+
# or
|
98
|
+
stack.push []
|
99
|
+
regex.push ''
|
100
|
+
|
101
|
+
elsif c == "}" && !stack.empty?
|
102
|
+
stack.last << regex.pop
|
103
|
+
regex.last << Regexp.union(*stack.pop.map {|r| Regexp.new(r) }).to_s
|
104
|
+
|
105
|
+
elsif c == "," && !stack.empty?
|
106
|
+
stack.last << regex.pop
|
107
|
+
regex.push ''
|
108
|
+
|
109
|
+
elsif c =~ /[a-zA-Z0-9_]/
|
110
|
+
regex.last << c
|
111
|
+
|
112
|
+
else
|
113
|
+
regex.last << "\\#{c}"
|
114
|
+
end
|
115
|
+
|
116
|
+
i += 1
|
117
|
+
end
|
118
|
+
|
119
|
+
until stack.empty?
|
120
|
+
stack.last << regex.pop
|
121
|
+
regex.last << Regexp.union(*stack.pop).to_s
|
122
|
+
end
|
123
|
+
|
124
|
+
@regex = Regexp.new("\\A"+regex.last+"\\Z")
|
125
|
+
end
|
126
|
+
|
127
|
+
def match(str)
|
128
|
+
@regex.match(str) != nil
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
class OrMatchPattern < MatchPattern
|
133
|
+
def initialize(patterns)
|
134
|
+
@patterns = patterns
|
135
|
+
end
|
136
|
+
|
137
|
+
def match(str)
|
138
|
+
@patterns.any? {|pattern| pattern.match(str) }
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
data/lib/fluent/mixin.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/compat/record_filter_mixin'
|
18
|
+
require 'fluent/compat/handle_tag_name_mixin'
|
19
|
+
require 'fluent/compat/set_time_key_mixin'
|
20
|
+
require 'fluent/compat/set_tag_key_mixin'
|
21
|
+
require 'fluent/compat/type_converter'
|
22
|
+
|
23
|
+
require 'fluent/time' # Fluent::TimeFormatter
|
24
|
+
|
25
|
+
module Fluent
|
26
|
+
RecordFilterMixin = Fluent::Compat::RecordFilterMixin
|
27
|
+
HandleTagNameMixin = Fluent::Compat::HandleTagNameMixin
|
28
|
+
SetTimeKeyMixin = Fluent::Compat::SetTimeKeyMixin
|
29
|
+
SetTagKeyMixin = Fluent::Compat::SetTagKeyMixin
|
30
|
+
TypeConverter = Fluent::Compat::TypeConverter
|
31
|
+
end
|
@@ -0,0 +1,62 @@
|
|
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 'msgpack'
|
18
|
+
require 'fluent/time'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module MessagePackFactory
|
22
|
+
@@engine_factory = nil
|
23
|
+
|
24
|
+
module Mixin
|
25
|
+
def msgpack_factory
|
26
|
+
MessagePackFactory.engine_factory
|
27
|
+
end
|
28
|
+
|
29
|
+
def msgpack_packer(*args)
|
30
|
+
msgpack_factory.packer(*args)
|
31
|
+
end
|
32
|
+
|
33
|
+
def msgpack_unpacker(*args)
|
34
|
+
msgpack_factory.unpacker(*args)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.engine_factory
|
39
|
+
@@engine_factory || factory
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.factory
|
43
|
+
factory = MessagePack::Factory.new
|
44
|
+
factory.register_type(Fluent::EventTime::TYPE, Fluent::EventTime)
|
45
|
+
factory
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.packer(*args)
|
49
|
+
factory.packer(*args)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.unpacker(*args)
|
53
|
+
factory.unpacker(*args)
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.init
|
57
|
+
factory = MessagePack::Factory.new
|
58
|
+
factory.register_type(Fluent::EventTime::TYPE, Fluent::EventTime)
|
59
|
+
@@engine_factory = factory
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/compat/output'
|
18
|
+
require 'fluent/output_chain'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
Output = Fluent::Compat::Output
|
22
|
+
BufferedOutput = Fluent::Compat::BufferedOutput
|
23
|
+
ObjectBufferedOutput = Fluent::Compat::ObjectBufferedOutput
|
24
|
+
TimeSlicedOutput = Fluent::Compat::TimeSlicedOutput
|
25
|
+
MultiOutput = Fluent::Compat::MultiOutput
|
26
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/compat/output_chain'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
OutputChain = Fluent::Compat::OutputChain
|
21
|
+
CopyOutputChain = Fluent::Compat::CopyOutputChain
|
22
|
+
NullOutputChain = Fluent::Compat::NullOutputChain
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/compat/parser'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
ParserError = Fluent::Compat::Parser::ParserError
|
21
|
+
Parser = Fluent::Compat::Parser
|
22
|
+
TextParser = Fluent::Compat::TextParser
|
23
|
+
end
|
@@ -0,0 +1,161 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/registry'
|
18
|
+
require 'fluent/config/error'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module Plugin
|
22
|
+
SEARCH_PATHS = []
|
23
|
+
|
24
|
+
# plugins for fluentd: fluent/plugin/type_NAME.rb
|
25
|
+
# plugins for fluentd plugins: fluent/plugin/type/NAME.rb
|
26
|
+
# ex: storage, buffer chunk, ...
|
27
|
+
|
28
|
+
# first class plugins (instantiated by Engine)
|
29
|
+
INPUT_REGISTRY = Registry.new(:input, 'fluent/plugin/in_', dir_search_prefix: 'in_')
|
30
|
+
OUTPUT_REGISTRY = Registry.new(:output, 'fluent/plugin/out_', dir_search_prefix: 'out_')
|
31
|
+
FILTER_REGISTRY = Registry.new(:filter, 'fluent/plugin/filter_', dir_search_prefix: 'filter_')
|
32
|
+
|
33
|
+
# feature plugin: second class plugins (instanciated by Plugins or Helpers)
|
34
|
+
BUFFER_REGISTRY = Registry.new(:buffer, 'fluent/plugin/buf_', dir_search_prefix: 'buf_')
|
35
|
+
PARSER_REGISTRY = Registry.new(:parser, 'fluent/plugin/parser_', dir_search_prefix: 'parser_')
|
36
|
+
FORMATTER_REGISTRY = Registry.new(:formatter, 'fluent/plugin/formatter_', dir_search_prefix: 'formatter_')
|
37
|
+
STORAGE_REGISTRY = Registry.new(:storage, 'fluent/plugin/storage_', dir_search_prefix: 'storage_')
|
38
|
+
|
39
|
+
REGISTRIES = [INPUT_REGISTRY, OUTPUT_REGISTRY, FILTER_REGISTRY, BUFFER_REGISTRY, PARSER_REGISTRY, FORMATTER_REGISTRY, STORAGE_REGISTRY]
|
40
|
+
|
41
|
+
def self.register_input(type, klass)
|
42
|
+
register_impl('input', INPUT_REGISTRY, type, klass)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.register_output(type, klass)
|
46
|
+
register_impl('output', OUTPUT_REGISTRY, type, klass)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.register_filter(type, klass)
|
50
|
+
register_impl('filter', FILTER_REGISTRY, type, klass)
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.register_buffer(type, klass)
|
54
|
+
register_impl('buffer', BUFFER_REGISTRY, type, klass)
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.register_parser(type, klass_or_proc)
|
58
|
+
if klass_or_proc.is_a?(Regexp)
|
59
|
+
# This usage is not recommended for new API
|
60
|
+
require 'fluent/parser'
|
61
|
+
register_impl('parser', PARSER_REGISTRY, type, Proc.new { Fluent::TextParser::RegexpParser.new(klass_or_proc) })
|
62
|
+
else
|
63
|
+
register_impl('parser', PARSER_REGISTRY, type, klass_or_proc)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.register_formatter(type, klass_or_proc)
|
68
|
+
if klass_or_proc.respond_to?(:call) && klass_or_proc.arity == 3 # Proc.new { |tag, time, record| }
|
69
|
+
# This usage is not recommended for new API
|
70
|
+
require 'fluent/formatter'
|
71
|
+
register_impl('formatter', FORMATTER_REGISTRY, type, Proc.new { Fluent::TextFormatter::ProcWrappedFormatter.new(klass_or_proc) })
|
72
|
+
else
|
73
|
+
register_impl('formatter', FORMATTER_REGISTRY, type, klass_or_proc)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.register_storage(type, klass)
|
78
|
+
register_impl('storage', STORAGE_REGISTRY, type, klass)
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.lookup_type_from_class(klass_or_its_name)
|
82
|
+
klass = if klass_or_its_name.is_a? Class
|
83
|
+
klass_or_its_name
|
84
|
+
elsif klass_or_its_name.is_a? String
|
85
|
+
eval(klass_or_its_name) # const_get can't handle qualified klass name (ex: A::B)
|
86
|
+
else
|
87
|
+
raise ArgumentError, "invalid argument type #{klass_or_its_name.class}: #{klass_or_its_name}"
|
88
|
+
end
|
89
|
+
REGISTRIES.reduce(nil){|a, r| a || r.reverse_lookup(klass) }
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.add_plugin_dir(dir)
|
93
|
+
REGISTRIES.each do |r|
|
94
|
+
r.paths.push(dir)
|
95
|
+
end
|
96
|
+
nil
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.new_input(type)
|
100
|
+
new_impl('input', INPUT_REGISTRY, type)
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.new_output(type)
|
104
|
+
new_impl('output', OUTPUT_REGISTRY, type)
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.new_filter(type)
|
108
|
+
new_impl('filter', FILTER_REGISTRY, type)
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.new_buffer(type, parent: nil)
|
112
|
+
new_impl('buffer', BUFFER_REGISTRY, type, parent)
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.new_parser(type, parent: nil)
|
116
|
+
require 'fluent/parser'
|
117
|
+
|
118
|
+
if type[0] == '/' && type[-1] == '/'
|
119
|
+
# This usage is not recommended for new API... create RegexpParser directly
|
120
|
+
require 'fluent/parser'
|
121
|
+
Fluent::TextParser.lookup(type)
|
122
|
+
else
|
123
|
+
new_impl('parser', PARSER_REGISTRY, type, parent)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def self.new_formatter(type, parent: nil)
|
128
|
+
new_impl('formatter', FORMATTER_REGISTRY, type, parent)
|
129
|
+
end
|
130
|
+
|
131
|
+
def self.new_storage(type, parent: nil)
|
132
|
+
new_impl('storage', STORAGE_REGISTRY, type, parent)
|
133
|
+
end
|
134
|
+
|
135
|
+
def self.register_impl(kind, registry, type, value)
|
136
|
+
if !value.is_a?(Class) && !value.respond_to?(:call)
|
137
|
+
raise Fluent::ConfigError, "Invalid implementation as #{kind} plugin: '#{type}'. It must be a Class, or callable."
|
138
|
+
end
|
139
|
+
registry.register(type, value)
|
140
|
+
$log.trace "registered #{kind} plugin '#{type}'" if defined?($log)
|
141
|
+
nil
|
142
|
+
end
|
143
|
+
|
144
|
+
def self.new_impl(kind, registry, type, parent=nil)
|
145
|
+
# "'type' not found" is handled by registry
|
146
|
+
obj = registry.lookup(type)
|
147
|
+
impl = case
|
148
|
+
when obj.is_a?(Class)
|
149
|
+
obj.new
|
150
|
+
when obj.respond_to?(:call) && obj.arity == 0
|
151
|
+
obj.call
|
152
|
+
else
|
153
|
+
raise Fluent::ConfigError, "#{kind} plugin '#{type}' is not a Class nor callable (without arguments)."
|
154
|
+
end
|
155
|
+
if parent && impl.respond_to?("owner=")
|
156
|
+
impl.owner = parent
|
157
|
+
end
|
158
|
+
impl
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|