fluent-plugin-pull_forward 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9f729c6a8875eb13dfef8e811bf6681e62085b46
4
+ data.tar.gz: 8654a13d126608b371211e873b2741d61380484f
5
+ SHA512:
6
+ metadata.gz: 427df78ec3facb73f152f1f710693c687cccbc6650759678f9d30b1312ca0ea34809cbb54f315b31c321f4dba4d16d590c893d3c9d06226b2cd1eebe5744d90b
7
+ data.tar.gz: 88fb138607c461e2e4f81854dd40548ef0b9f8d2c31f134443d7340588aca2d1c8aeed77fa1ed27053728abb70183c2c64ba4cc1f4138ddd84658fcf22cde9d7
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-pullforward.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2012- TAGOMORI Satoshi
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,92 @@
1
+ # fluent-plugin-pull_forward
2
+
3
+ [Fluentd](http://fluentd.org) input/output plugin to forward data, by pulling/request-based transportation, over HTTPS.
4
+
5
+ We can do with pull_forward:
6
+ * transfer data into hosts in firewall by pulling
7
+ * protect transferring route by HTTPS and basic authentication
8
+ * fetch Fluentd events as JSON by HTTPS from any processes
9
+
10
+ ![plugin image](https://raw.githubusercontent.com/tagomoris/fluent-plugin-pull_forward/master/misc/plugin_image.png)
11
+
12
+ ## Configuration
13
+
14
+ ### PullForwardOutput
15
+
16
+ Configure output plugin to transfer fluentd events to another fluentd nodes.
17
+
18
+ ```apache
19
+ <match dummy>
20
+ type pull_forward
21
+
22
+ buffer_path /home/myname/tmp/fluentd_event.buffer
23
+ flush_interval 1m ## default 1h
24
+
25
+ self_hostname ${hostname}
26
+ cert_auto_generate yes
27
+ # or
28
+ # "cert_file_path PATH", "private_key_path PATH" and "private_key_passphrase ..."
29
+
30
+ <user>
31
+ username tagomoris
32
+ password foobar
33
+ </user>
34
+ <user>
35
+ username repeatedly
36
+ password booo
37
+ </user>
38
+ </match>
39
+ ```
40
+
41
+ PullForwardOutput uses PullPoolBuffer plugin. **DO NOT MODIFY buffer_type**. It uses buffer file, so `buffer_path` is required, and Not so short values are welcome for `flush_interval` because PullPoolBuffer make a file per flushes (and these are not removed until fetches of cluent/in\_pull\_forward).
42
+
43
+ PullForward always requires SSL and basic authentication. SSL options and `<user>` sections are also required.
44
+
45
+ ### PullForwardInput
46
+
47
+ Configure input plugin to fetch fluentd events from another fluentd nodes.
48
+
49
+ ```apache
50
+ <source>
51
+ type pull_forward
52
+
53
+ fetch_interval 10s
54
+ timeout 10s
55
+
56
+ <server>
57
+ host host1.on.internet.example.com
58
+ username tagomoris
59
+ password foobar
60
+ </server>
61
+ <server>
62
+ host host2.on.internet.example.com
63
+ username tagomoris
64
+ password foobar
65
+ </server>
66
+ </source>
67
+ ```
68
+
69
+ PullForwardInput can fetch events from many nodes of `<server>`.
70
+
71
+ ### HTTPS fetch
72
+
73
+ We can fluentd events from PullForwardOutput by normal HTTPS.
74
+
75
+ ```
76
+ $ curl -k -s --user tagomoris:foobar https://localhost:24280/
77
+ [
78
+ [ "test.foo", 1406915165, { "pos": 8, "hoge": 1 } ],
79
+ [ "test.foo", 1406915168, { "pos": 9, "hoge": 1 } ],
80
+ [ "test.foo", 1406915173, { "pos": 0, "hoge": 0 } ]
81
+ ]
82
+ ```
83
+
84
+ ## TODO
85
+
86
+ * TESTS!
87
+
88
+ ## Copyright
89
+
90
+ * Copyright (c) 2014- TAGOMORI Satoshi (tagomoris)
91
+ * License
92
+ * Apache License, Version 2.0
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rake/testtask'
4
+ Rake::TestTask.new(:test) do |test|
5
+ test.libs << 'lib' << 'test'
6
+ test.pattern = 'test/**/test_*.rb'
7
+ test.verbose = true
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,19 @@
1
+ <source>
2
+ type pull_forward
3
+ fetch_interval 10s
4
+ timeout 10s
5
+ <server>
6
+ host localhost
7
+ username moris
8
+ password foobar
9
+ </server>
10
+ <server>
11
+ host localhost
12
+ username moris
13
+ password fooba
14
+ </server>
15
+ </source>
16
+
17
+ <match test.**>
18
+ type stdout
19
+ </match>
@@ -0,0 +1,15 @@
1
+ <source>
2
+ type forward
3
+ </source>
4
+
5
+ <match test.**>
6
+ type pull_forward
7
+ buffer_path /tmp/pullforward.buffer.log
8
+ self_hostname ${hostname}
9
+ cert_auto_generate yes
10
+ flush_interval 30s
11
+ <user>
12
+ username moris
13
+ password foobar
14
+ </user>
15
+ </match>
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "fluent-plugin-pull_forward"
5
+ spec.version = "0.0.1"
6
+ spec.authors = ["TAGOMORI Satoshi"]
7
+ spec.email = ["tagomoris@gmail.com"]
8
+ spec.summary = %q{Fluentd plugin to forward data, by pulling from input plugin}
9
+ spec.description = %q{Fluentd plugin that store data to be forwarded, and send these when client(input plugin) requests it, over HTTPS and authentication}
10
+ spec.homepage = "https://github.com/tagomoris/fluent-plugin-pull_forward"
11
+ spec.license = "APLv2"
12
+
13
+ spec.files = `git ls-files -z`.split("\x0")
14
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
15
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
+ spec.require_paths = ["lib"]
17
+
18
+ spec.add_development_dependency "bundler", "~> 1.6"
19
+ spec.add_development_dependency "rake"
20
+
21
+ spec.add_runtime_dependency "fluentd"
22
+ spec.add_runtime_dependency "fluent-plugin-buffer-pullpool"
23
+ spec.add_runtime_dependency "fluent-mixin-config-placeholders"
24
+ spec.add_runtime_dependency "fluent-mixin-certificate"
25
+ spec.add_runtime_dependency "resolve-hostname", ">= 0.0.4"
26
+ end
@@ -0,0 +1,118 @@
1
+ module Fluent
2
+ class PullForwardInput < Input
3
+ DEFAULT_PULLFORWARD_LISTEN_PORT = 24280
4
+
5
+ Fluent::Plugin.register_input('pull_forward', self)
6
+
7
+ config_param :allow_self_signed_certificate, :bool, :default => true
8
+
9
+ config_param :fetch_interval, :time, :default => 600 # 10m
10
+ config_param :timeout, :time, :default => 60
11
+
12
+ config_section :server, param_name: :servers do
13
+ config_param :host, :string
14
+ config_param :port, :integer, :default => DEFAULT_PULLFORWARD_LISTEN_PORT
15
+ config_param :username, :string
16
+ config_param :password, :string
17
+ end
18
+
19
+ attr_reader :hostname_resolver
20
+
21
+ def initialize
22
+ super
23
+ require 'resolve/hostname'
24
+ require 'net/http'
25
+ require 'net/https'
26
+ require 'openssl'
27
+ require 'yajl'
28
+ end
29
+
30
+ # Define `log` method for v0.10.42 or earlier
31
+ unless method_defined?(:log)
32
+ define_method("log") { $log }
33
+ end
34
+
35
+ def configure(conf)
36
+ super
37
+
38
+ @verify_mode = if @allow_self_signed_certificate
39
+ OpenSSL::SSL::VERIFY_NONE
40
+ else
41
+ OpenSSL::SSL::VERIFY_PEER
42
+ end
43
+ @resolver = Resolve::Hostname.new(:system_resolver => true)
44
+ end
45
+
46
+ def start
47
+ super
48
+ @running = true
49
+ @thread = Thread.new(&method(:fetcher))
50
+ end
51
+
52
+ def shutdown
53
+ super
54
+ @running = false
55
+ @thread.join
56
+ end
57
+
58
+ def fetcher
59
+ next_fetch = Time.now
60
+ while @running
61
+ if Time.now >= next_fetch
62
+ @servers.each do |server|
63
+ if @running
64
+ fetch(server)
65
+ end
66
+ end
67
+ next_fetch = Time.now + @fetch_interval
68
+ end
69
+ break unless @running
70
+ sleep 1
71
+ end
72
+ end
73
+
74
+ def fetch(server)
75
+ body = nil
76
+
77
+ begin
78
+ address = @resolver.getaddress(server.host)
79
+ https = Net::HTTP.new(address, server.port)
80
+ https.open_timeout = @timeout
81
+ https.read_timeout = @timeout
82
+ https.use_ssl = true
83
+ https.verify_mode = @verify_mode
84
+
85
+ req = Net::HTTP::Get.new('/')
86
+ req.basic_auth server.username, server.password
87
+
88
+ res = https.start{ https.request(req) }
89
+ if res && res.is_a?(Net::HTTPSuccess)
90
+ body = res.body
91
+ else
92
+ log.warn "failed to GET from Fluentd PullForward: #{server.host}, #{address}:#{server.port}, by #{res.class}"
93
+ end
94
+ rescue IOError, EOFError, SystemCallError => e
95
+ log.warn "net/http GET raised an exception: #{e.class}, '#{e.message}'"
96
+ end
97
+ return unless body
98
+
99
+ data = nil
100
+ begin
101
+ data = Yajl::Parser.parse(body)
102
+ rescue => e
103
+ # maybe parse error
104
+ log.warn "an error occured for parse of transferred content: #{e.class}, '#{e.message}'"
105
+ end
106
+ return unless data
107
+
108
+ bundle = {}
109
+ data.each do |tag, time, record|
110
+ bundle[tag] ||= Fluent::MultiEventStream.new
111
+ bundle[tag].add(time, record)
112
+ end
113
+ bundle.each do |tag, es|
114
+ Fluent::Engine.emit_stream(tag, es)
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,145 @@
1
+ require 'fluent/mixin/config_placeholders'
2
+ require 'fluent/mixin/certificate'
3
+ require 'webrick'
4
+ require 'webrick/https'
5
+
6
+ require_relative 'webrick_logger_bridge'
7
+
8
+ module Fluent
9
+ class PullForwardOutput < BufferedOutput
10
+ DEFAULT_PULLFORWARD_LISTEN_PORT = 24280
11
+
12
+ Fluent::Plugin.register_output('pull_forward', self)
13
+
14
+ config_param :self_hostname, :string
15
+ include Fluent::Mixin::ConfigPlaceholders
16
+
17
+ config_param :bind, :string, :default => '0.0.0.0'
18
+ config_param :port, :integer, :default => DEFAULT_PULLFORWARD_LISTEN_PORT
19
+
20
+ config_param :server_loglevel, :string, :default => 'WARN'
21
+ config_param :auth_loglevel, :string, :default => 'FATAL'
22
+
23
+ config_set_default :buffer_type, 'pullpool'
24
+ config_set_default :flush_interval, 3600 # 1h
25
+
26
+ # REQUIRED: buffer_path
27
+
28
+ # same with TimeSlicedOutput + FileBuffer
29
+ # 16MB * 256 -> 4096MB
30
+ config_set_default :buffer_chunk_limit, 1024 * 1024 * 16 # 16MB
31
+ config_set_default :buffer_queue_limit, 256
32
+
33
+ include Fluent::Mixin::Certificate
34
+ # REQUIRED: self_hostname
35
+ # REQUIRED: 'cert_auto_generate yes' or 'cert_file_path PATH'
36
+
37
+ config_section :user, param_name: :users do
38
+ config_param :username, :string
39
+ config_param :password, :string
40
+ end
41
+
42
+ def initialize
43
+ super
44
+ end
45
+
46
+ unless method_defined?(:log)
47
+ define_method("log") { $log }
48
+ end
49
+
50
+ def configure(conf)
51
+ super
52
+ if @users.size < 1
53
+ raise Fluent::ConfigError, "no <user> sections specified"
54
+ end
55
+ end
56
+
57
+ def start
58
+ super
59
+ @thread = Thread.new(&method(:run))
60
+ end
61
+
62
+ def shutdown
63
+ @server.stop if @server
64
+ @thread.kill
65
+ @thread.join
66
+ end
67
+
68
+ class HtpasswdDummy < WEBrick::HTTPAuth::Htpasswd
69
+ # overwrite constructor NOT to generate htpasswd file on local filesystem
70
+ def initialize
71
+ @path = '/'
72
+ @mtime = Time.at(0)
73
+ @passwd = Hash.new
74
+ @auth_type = WEBrick::HTTPAuth::BasicAuth
75
+ end
76
+ end
77
+
78
+ def run
79
+ cert, key = self.certificate
80
+ realm = "Fluentd fluent-plugin-pullforward server"
81
+
82
+ logger = $log
83
+ auth_logger = Fluent::PluginLogger.new(logger)
84
+ auth_logger.level = @auth_loglevel
85
+ server_logger = Fluent::PluginLogger.new(logger)
86
+ server_logger.level = @server_loglevel
87
+
88
+ auth_db = HtpasswdDummy.new
89
+ @users.each do |user|
90
+ auth_db.set_passwd(realm, user.username, user.password)
91
+ end
92
+ authenticator = WEBrick::HTTPAuth::BasicAuth.new(
93
+ :UserDB => auth_db,
94
+ :Realm => realm,
95
+ :Logger => Fluent::PullForward::WEBrickLogger.new(auth_logger),
96
+ )
97
+
98
+ @server = WEBrick::HTTPServer.new(
99
+ :BindAddress => @bind,
100
+ :Port => @port,
101
+ # :DocumentRoot => '.',
102
+ :Logger => Fluent::PullForward::WEBrickLogger.new(server_logger),
103
+ :AccessLog => [],
104
+ :SSLEnable => true,
105
+ :SSLCertificate => cert,
106
+ :SSLPrivateKey => key
107
+ )
108
+ @server.logger.info("hogepos")
109
+
110
+ @server.mount_proc('/') do |req, res|
111
+ unless req.ssl?
112
+ raise WEBrick::HTTPStatus::Forbidden, "pullforward plugin does not permit non-HTTPS requests"
113
+ end
114
+ if req.path != '/'
115
+ raise WEBrick::HTTPStatus::NotFound, "valid path is only '/'"
116
+ end
117
+ authenticator.authenticate(req, res)
118
+ res.content_type = 'application/json'
119
+ res.body = dequeue_chunks()
120
+ end
121
+
122
+ log.info "listening pullforward socket on #{@bind}:#{@port}"
123
+ @server.start
124
+ end
125
+
126
+ def format(tag, time, record)
127
+ [tag, time, record].to_msgpack
128
+ end
129
+
130
+ def dequeue_chunks
131
+ response = []
132
+
133
+ unpacker = MessagePack::Unpacker.new
134
+
135
+ @buffer.pull_chunks do |chunk|
136
+ next if chunk.empty?
137
+ unpacker.feed_each(chunk.read) do |ary|
138
+ response << ary
139
+ end
140
+ end
141
+
142
+ response.to_json
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,104 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Fluent
3
+ module PullForward
4
+ class WEBrickLogger
5
+ FATAL = 1
6
+ ERROR = 2
7
+ WARN = 3
8
+ INFO = 4
9
+ DEBUG = 5
10
+
11
+ def initialize(logger)
12
+ @logger = logger
13
+ end
14
+
15
+ def <<(str)
16
+ self.log(INFO, str.to_s)
17
+ end
18
+
19
+ def close
20
+ # NOP
21
+ end
22
+
23
+ def debug(msg)
24
+ self.log(DEBUG, msg)
25
+ end
26
+
27
+ def debug?
28
+ @logger.level > Fluent::Log::LEVEL_TRACE
29
+ end
30
+
31
+ def error(msg)
32
+ self.log(ERROR, msg)
33
+ end
34
+
35
+ def error?
36
+ @logger.level > Fluent::Log::LEVEL_WARN
37
+ end
38
+
39
+ def fatal(msg)
40
+ self.log(FATAL, msg)
41
+ end
42
+
43
+ def fatal?
44
+ @logger.level > Fluent::Log::LEVEL_ERROR
45
+ end
46
+
47
+ def info(msg)
48
+ self.log(INFO, msg)
49
+ end
50
+
51
+ def info?
52
+ @logger.level > Fluent::Log::LEVEL_DEBUG
53
+ end
54
+
55
+ def level
56
+ # (Fluentd logger level num) -> (Webrick level num)
57
+ # 5 -> 1
58
+ # 4 -> 2
59
+ # 3 -> 3
60
+ # 2 -> 4
61
+ # 1 -> 5
62
+ # (6 - level)
63
+ 6 - @logger.level
64
+ end
65
+
66
+ def level=(lv)
67
+ @logger.level = case lv
68
+ when FATAL then 'fatal'
69
+ when ERROR then 'error'
70
+ when WARN then 'warn'
71
+ when INFO then 'info'
72
+ when DEBUG then 'debug'
73
+ else
74
+ raise ArgumentError, "Invalid loglevel for webrick bridge logger: #{lv}"
75
+ end
76
+ end
77
+
78
+ def log(level, msg)
79
+ case level
80
+ when FATAL
81
+ @logger.fatal(msg)
82
+ when ERROR
83
+ @logger.error(msg)
84
+ when WARN
85
+ @logger.warn(msg)
86
+ when INFO
87
+ @logger.info(msg)
88
+ when DEBUG
89
+ @logger.debug(msg)
90
+ else
91
+ raise ArgumentError, "Invalid loglevel for webrick bridge logger: #{lv}"
92
+ end
93
+ end
94
+
95
+ def warn(msg)
96
+ self.log(WARN, msg)
97
+ end
98
+
99
+ def warn?
100
+ @logger.level > Fluent::Log::LEVEL_INFO
101
+ end
102
+ end
103
+ end
104
+ end
Binary file
data/test/helper.rb ADDED
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
14
+ require 'fluent/test'
15
+ unless ENV.has_key?('VERBOSE')
16
+ nulllogger = Object.new
17
+ nulllogger.instance_eval {|obj|
18
+ def method_missing(method, *args)
19
+ # pass
20
+ end
21
+ }
22
+ $log = nulllogger
23
+ end
24
+
25
+ require 'fluent/plugin/in_pull_forward'
26
+ require 'fluent/plugin/out_pull_forward'
27
+
28
+ class Test::Unit::TestCase
29
+ end
@@ -0,0 +1,5 @@
1
+ require 'helper'
2
+
3
+ class PullForwardInputTest < Test::Unit::TestCase
4
+ # check syntax error only now...
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'helper'
2
+
3
+ class PullForwardOutputTest < Test::Unit::TestCase
4
+ # check syntax error only now...
5
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-pull_forward
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - TAGOMORI Satoshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: fluentd
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fluent-plugin-buffer-pullpool
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: fluent-mixin-config-placeholders
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: fluent-mixin-certificate
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: resolve-hostname
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 0.0.4
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 0.0.4
111
+ description: Fluentd plugin that store data to be forwarded, and send these when client(input
112
+ plugin) requests it, over HTTPS and authentication
113
+ email:
114
+ - tagomoris@gmail.com
115
+ executables: []
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - ".gitignore"
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - example/simple_in.conf
125
+ - example/simple_out.conf
126
+ - fluent-plugin-pull_forward.gemspec
127
+ - lib/fluent/plugin/in_pull_forward.rb
128
+ - lib/fluent/plugin/out_pull_forward.rb
129
+ - lib/fluent/plugin/webrick_logger_bridge.rb
130
+ - misc/plugin_image.png
131
+ - test/helper.rb
132
+ - test/plugin/test_in_pull_forward.rb
133
+ - test/plugin/test_out_pull_forward.rb
134
+ homepage: https://github.com/tagomoris/fluent-plugin-pull_forward
135
+ licenses:
136
+ - APLv2
137
+ metadata: {}
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 2.2.2
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: Fluentd plugin to forward data, by pulling from input plugin
158
+ test_files:
159
+ - test/helper.rb
160
+ - test/plugin/test_in_pull_forward.rb
161
+ - test/plugin/test_out_pull_forward.rb
162
+ has_rdoc: