fluent-plugin-named_pipe 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +6 -2
- data/CHANGELOG.md +12 -0
- data/Gemfile.v0.10 +4 -0
- data/Gemfile.v0.12 +4 -0
- data/fluent-plugin-named_pipe.gemspec +4 -7
- data/lib/fluent/plugin/in_named_pipe.rb +16 -10
- data/lib/fluent/plugin/named_pipe/fifo.rb +54 -0
- data/lib/fluent/plugin/out_named_pipe.rb +4 -6
- data/test/test_in_named_pipe.rb +26 -1
- data/test/test_out_named_pipe.rb +1 -2
- metadata +6 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5034743f0d689be092bb85e3b3dad91e7883147
|
4
|
+
data.tar.gz: b6c1a96e9972546bbb14fe34101ebde66283461a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7611d8aa5a27a979c884c520887452672c71d0f827225c352e7b9154dec2b94e1ff7823b3d3e239da952f97c74b4d7cdcd5910de55e4e90f4fcb276b57211535
|
7
|
+
data.tar.gz: dc6cb4142953e05a205f39b5f8b1b428010e736b5a998fb0fae61eef8e68c3512ff30056252bd57cb82e8e2ab56fb87c970ddf4c1f0c41968b97f7b86d180a64
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## 0.2.0 (2017/12/02)
|
2
|
+
|
3
|
+
Changes:
|
4
|
+
|
5
|
+
* Drop Windows Support
|
6
|
+
|
7
|
+
Enhancenments:
|
8
|
+
|
9
|
+
* Create lib/fluent/plugin/fifo.rb as own fifo library because `ruby-fifo` gem looks like not maintained (thanks to m-mizutani)
|
10
|
+
* Use `IO.sysread instead` of `File.read` to avoid read blocking
|
11
|
+
* Add error handling for EOF
|
12
|
+
|
1
13
|
## 0.1.2 (2015/08/04)
|
2
14
|
|
3
15
|
Fixes:
|
data/Gemfile.v0.10
ADDED
data/Gemfile.v0.12
ADDED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "fluent-plugin-named_pipe"
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.2.0"
|
7
7
|
s.authors = ["Naotoshi Seo"]
|
8
8
|
s.email = ["sonots@gmail.com"]
|
9
9
|
s.homepage = "https://github.com/sonots/fluent-plugin-named_pipe"
|
@@ -17,12 +17,9 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
|
19
19
|
s.add_runtime_dependency "fluentd", ">= 0.10.58"
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
else
|
24
|
-
s.add_runtime_dependency "mkfifo"
|
25
|
-
end
|
20
|
+
# File.mkfifo is available from ruby >= 2.3.0, though
|
21
|
+
s.add_runtime_dependency "mkfifo"
|
22
|
+
|
26
23
|
s.add_development_dependency "rake"
|
27
24
|
s.add_development_dependency "test-unit"
|
28
25
|
s.add_development_dependency "pry"
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'fluent/input'
|
2
|
+
require_relative 'named_pipe/fifo'
|
3
|
+
|
1
4
|
module Fluent
|
2
5
|
class NamedPipeInput < Input
|
3
6
|
Fluent::Plugin.register_input('named_pipe', self)
|
@@ -10,16 +13,16 @@ module Fluent
|
|
10
13
|
define_method(:log) { $log }
|
11
14
|
end
|
12
15
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
+
# Define `router` method of v0.12 to support v0.10 or earlier
|
17
|
+
unless method_defined?(:router)
|
18
|
+
define_method("router") { Fluent::Engine }
|
16
19
|
end
|
17
20
|
|
18
21
|
def configure(conf)
|
19
22
|
super
|
20
23
|
|
21
24
|
begin
|
22
|
-
pipe = Fifo.new(@path, :r
|
25
|
+
pipe = PluginNamedPipe::Fifo.new(@path, :r)
|
23
26
|
pipe.close # just to try open
|
24
27
|
rescue => e
|
25
28
|
raise ConfigError, "#{e.class}: #{e.message}"
|
@@ -42,16 +45,19 @@ module Fluent
|
|
42
45
|
end
|
43
46
|
|
44
47
|
def run
|
45
|
-
@pipe = Fifo.new(@path, :r
|
48
|
+
@pipe = PluginNamedPipe::Fifo.new(@path, :r)
|
46
49
|
|
47
50
|
while @running
|
48
51
|
begin
|
49
52
|
line = @pipe.readline # blocking
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
53
|
+
next if line.nil?
|
54
|
+
|
55
|
+
@parser.parse(line) do |time, record|
|
56
|
+
if time and record
|
57
|
+
router.emit(@tag, time, record)
|
58
|
+
else
|
59
|
+
log.warn "Pattern not match: #{line.inspect}"
|
60
|
+
end
|
55
61
|
end
|
56
62
|
rescue => e
|
57
63
|
log.error "in_named_pipe: unexpected error", :error_class => e.class, :error => e.to_s
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
require 'mkfifo'
|
3
|
+
|
4
|
+
module Fluent
|
5
|
+
module PluginNamedPipe
|
6
|
+
class Fifo
|
7
|
+
extend Forwardable
|
8
|
+
|
9
|
+
READ_TIMEOUT = 1
|
10
|
+
|
11
|
+
def initialize(file_path, mode = :r)
|
12
|
+
if !File.exist?(file_path)
|
13
|
+
File.mkfifo(file_path)
|
14
|
+
File.chmod(0666, file_path)
|
15
|
+
end
|
16
|
+
|
17
|
+
@file_path = file_path
|
18
|
+
@mode = mode
|
19
|
+
self.open
|
20
|
+
|
21
|
+
@buf = ''
|
22
|
+
end
|
23
|
+
|
24
|
+
def_delegators :@pipe, :read, :write, :close, :flush
|
25
|
+
|
26
|
+
def open
|
27
|
+
m = {:r => 'r+', :w => 'w+'}[@mode]
|
28
|
+
@pipe = File.open(@file_path, m)
|
29
|
+
end
|
30
|
+
|
31
|
+
def readline
|
32
|
+
res = IO.select([@pipe], [], [], READ_TIMEOUT)
|
33
|
+
return nil if res.nil?
|
34
|
+
|
35
|
+
while nil == (idx = @buf.index("\n")) do
|
36
|
+
tmp = ''
|
37
|
+
begin
|
38
|
+
s = @pipe.sysread(0xffff, tmp)
|
39
|
+
@buf << s
|
40
|
+
rescue EOFError
|
41
|
+
# reopen
|
42
|
+
@pipe.close
|
43
|
+
@pipe.open
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
line = @buf[0, idx + 1]
|
48
|
+
@buf = @buf[idx + 1, @buf.length - line.length]
|
49
|
+
return line
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative 'named_pipe/fifo'
|
2
|
+
|
1
3
|
module Fluent
|
2
4
|
class NamedPipeOutput < Output
|
3
5
|
Plugin.register_output('named_pipe', self)
|
@@ -9,16 +11,11 @@ module Fluent
|
|
9
11
|
define_method(:log) { $log }
|
10
12
|
end
|
11
13
|
|
12
|
-
def initialize
|
13
|
-
require 'fifo'
|
14
|
-
super
|
15
|
-
end
|
16
|
-
|
17
14
|
def configure(conf)
|
18
15
|
super
|
19
16
|
|
20
17
|
begin
|
21
|
-
@pipe = Fifo.new(@path, :w
|
18
|
+
@pipe = PluginNamedPipe::Fifo.new(@path, :w)
|
22
19
|
rescue => e
|
23
20
|
raise ConfigError, "#{e.class}: #{e.message}"
|
24
21
|
end
|
@@ -34,6 +31,7 @@ module Fluent
|
|
34
31
|
def emit(tag, es, chain)
|
35
32
|
es.each do |time, record|
|
36
33
|
@pipe.write @formatter.format(tag, time, record)
|
34
|
+
@pipe.flush
|
37
35
|
end
|
38
36
|
|
39
37
|
chain.next
|
data/test/test_in_named_pipe.rb
CHANGED
@@ -43,8 +43,9 @@ class NamedPipeInputTest < Test::Unit::TestCase
|
|
43
43
|
test 'read and emit' do
|
44
44
|
d = create_driver(CONFIG)
|
45
45
|
d.run {
|
46
|
-
pipe = Fifo.new(TEST_PATH, :w
|
46
|
+
pipe = ::Fluent::PluginNamedPipe::Fifo.new(TEST_PATH, :w)
|
47
47
|
pipe.write "foo:bar\n"
|
48
|
+
pipe.flush
|
48
49
|
}
|
49
50
|
|
50
51
|
emits = d.emits
|
@@ -53,6 +54,30 @@ class NamedPipeInputTest < Test::Unit::TestCase
|
|
53
54
|
assert_equal({"foo"=>"bar\n"}, record)
|
54
55
|
end
|
55
56
|
end
|
57
|
+
|
58
|
+
|
59
|
+
test 'fragmented emit' do
|
60
|
+
d = create_driver(CONFIG)
|
61
|
+
d.run {
|
62
|
+
pipe = ::Fluent::PluginNamedPipe::Fifo.new(TEST_PATH, :w)
|
63
|
+
pipe.write "fo"
|
64
|
+
pipe.flush
|
65
|
+
sleep 0.2
|
66
|
+
pipe.write "o:ba"
|
67
|
+
pipe.flush
|
68
|
+
sleep 0.2
|
69
|
+
pipe.write "r\n"
|
70
|
+
pipe.flush
|
71
|
+
}
|
72
|
+
|
73
|
+
emits = d.emits
|
74
|
+
emits.each do |tag, time, record|
|
75
|
+
assert_equal("named_pipe", tag)
|
76
|
+
assert_equal({"foo"=>"bar\n"}, record)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
|
56
81
|
end
|
57
82
|
end
|
58
83
|
|
data/test/test_out_named_pipe.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
require 'fluent/test'
|
3
3
|
require 'fluent/plugin/out_named_pipe'
|
4
|
-
require 'fifo'
|
5
4
|
|
6
5
|
Fluent::Test.setup
|
7
6
|
|
@@ -48,7 +47,7 @@ class NamedPipeOutputTest < Test::Unit::TestCase
|
|
48
47
|
test 'reader is waiting' do
|
49
48
|
readline = nil
|
50
49
|
thread = Thread.new {
|
51
|
-
pipe = Fifo.new(TEST_PATH, :r
|
50
|
+
pipe = ::Fluent::PluginNamedPipe::Fifo.new(TEST_PATH, :r)
|
52
51
|
readline = pipe.readline
|
53
52
|
}
|
54
53
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-named_pipe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naotoshi Seo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.10.58
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: ruby-fifo
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0.1
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - '='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0.1
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: mkfifo
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,11 +105,14 @@ files:
|
|
119
105
|
- ".travis.yml"
|
120
106
|
- CHANGELOG.md
|
121
107
|
- Gemfile
|
108
|
+
- Gemfile.v0.10
|
109
|
+
- Gemfile.v0.12
|
122
110
|
- LICENSE
|
123
111
|
- README.md
|
124
112
|
- Rakefile
|
125
113
|
- fluent-plugin-named_pipe.gemspec
|
126
114
|
- lib/fluent/plugin/in_named_pipe.rb
|
115
|
+
- lib/fluent/plugin/named_pipe/fifo.rb
|
127
116
|
- lib/fluent/plugin/out_named_pipe.rb
|
128
117
|
- test/helper.rb
|
129
118
|
- test/test_in_named_pipe.rb
|
@@ -148,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
137
|
version: '0'
|
149
138
|
requirements: []
|
150
139
|
rubyforge_project:
|
151
|
-
rubygems_version: 2.
|
140
|
+
rubygems_version: 2.5.2
|
152
141
|
signing_key:
|
153
142
|
specification_version: 4
|
154
143
|
summary: Named pipe input/output plugin for Fluentd
|