fluent-plugin-msgpack-rpc 0.2.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.
- data/AUTHORS +1 -0
- data/README.rst +41 -0
- data/Rakefile +40 -0
- data/VERSION +1 -0
- data/lib/fluent/plugin/in_msgpack_rpc.rb +67 -0
- data/test/plugin/in_msgpack_rpc.rb +90 -0
- metadata +74 -0
data/AUTHORS
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Nobuyuki Kubota <nobu.k.jp+github _at_ gmail.com>
|
data/README.rst
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
About This Plugin
|
2
|
+
-----------------
|
3
|
+
|
4
|
+
This plugin is an input plugin for Fluent.
|
5
|
+
All applications using MessagePack-RPC client can send events to Fluent by using this plugin.
|
6
|
+
|
7
|
+
How to Configure
|
8
|
+
----------------
|
9
|
+
|
10
|
+
::
|
11
|
+
|
12
|
+
<source>
|
13
|
+
type msgpack_rpc
|
14
|
+
port 9000
|
15
|
+
bind 0.0.0.0
|
16
|
+
</source>
|
17
|
+
|
18
|
+
'bind' is an optional parameter.
|
19
|
+
|
20
|
+
Interface of the Server
|
21
|
+
-----------------------
|
22
|
+
|
23
|
+
The server has following interface::
|
24
|
+
|
25
|
+
def log(tag, time, record)
|
26
|
+
def logs(tag, entries)
|
27
|
+
|
28
|
+
'time' is a time when the event occurred. 'record' is a Hash having information of the event.
|
29
|
+
'entries' argument is an array of lists having [time, record].
|
30
|
+
When passing 0 to 'time', the server automatically use the current time as 'time'.
|
31
|
+
See also a sample client code below.
|
32
|
+
|
33
|
+
Sample Client Code
|
34
|
+
------------------
|
35
|
+
|
36
|
+
::
|
37
|
+
|
38
|
+
require 'msgpack/rpc'
|
39
|
+
cli = MessagePack::RPC::Client.new('127.0.0.1', 9000)
|
40
|
+
cli.call(:log, 'debug.tag', 0, { 'key' => 'value' })
|
41
|
+
cli.call(:logs, 'debug.tag', [[0, {'key' => 'value'}], [Time.now.to_i, {'red' => 'bull'}]])
|
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/clean'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'jeweler'
|
7
|
+
Jeweler::Tasks.new do |gemspec|
|
8
|
+
gemspec.name = "fluent-plugin-msgpack-rpc"
|
9
|
+
gemspec.summary = "Input plugin for Fluent using MessagePack-RPC"
|
10
|
+
gemspec.author = "Nobuyuki Kubota"
|
11
|
+
gemspec.email = "nobu.k.jp+github@gmail.com"
|
12
|
+
gemspec.homepage = "http://github.com/fluent"
|
13
|
+
gemspec.has_rdoc = false
|
14
|
+
gemspec.require_paths = ["lib"]
|
15
|
+
gemspec.add_dependency "fluent", "~> 0.10.0"
|
16
|
+
gemspec.add_dependency "msgpack-rpc", "~> 0.4.5"
|
17
|
+
gemspec.test_files = Dir["test/**/*.rb"]
|
18
|
+
gemspec.files = Dir["bin/**/*", "lib/**/*", "test/**/*.rb"] + %w[VERSION AUTHORS Rakefile]
|
19
|
+
gemspec.executables = []
|
20
|
+
end
|
21
|
+
Jeweler::GemcutterTasks.new
|
22
|
+
rescue LoadError
|
23
|
+
puts "Jeweler not available. Install it with: gem install jeweler"
|
24
|
+
end
|
25
|
+
|
26
|
+
Rake::TestTask.new(:test) do |t|
|
27
|
+
t.test_files = Dir['test/*_test.rb']
|
28
|
+
t.ruby_opts = ['-rubygems'] if defined? Gem
|
29
|
+
t.ruby_opts << '-I.'
|
30
|
+
end
|
31
|
+
|
32
|
+
task :test => [:base_test]
|
33
|
+
|
34
|
+
Rake::TestTask.new(:base_test) do |t|
|
35
|
+
t.libs << "test"
|
36
|
+
t.test_files = Dir["test/plugin/*.rb"]
|
37
|
+
t.verbose = true
|
38
|
+
end
|
39
|
+
|
40
|
+
task :default => [:build]
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.1
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#
|
2
|
+
# Input plugin for Fluent using MessagePack-RPC
|
3
|
+
#
|
4
|
+
# Copyright (C) 2011 Nobuyuki Kubota
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module Fluent
|
19
|
+
|
20
|
+
class MessagePackRPCInput < Input
|
21
|
+
Plugin.register_input('msgpack_rpc', self)
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
require 'msgpack/rpc'
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
config_param :port, :integer
|
29
|
+
config_param :bind, :string, :default => '0.0.0.0'
|
30
|
+
|
31
|
+
def configure(conf)
|
32
|
+
# TODO: Reject invalid bind parameter
|
33
|
+
super
|
34
|
+
end
|
35
|
+
|
36
|
+
def start
|
37
|
+
@server = MessagePack::RPC::Server.new
|
38
|
+
@server.listen @bind, @port, Server.new
|
39
|
+
@thread = Thread.new {
|
40
|
+
@server.run
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def shutdown
|
45
|
+
@server.close
|
46
|
+
@thread.join
|
47
|
+
end
|
48
|
+
|
49
|
+
class Server
|
50
|
+
def log(tag, time, record)
|
51
|
+
time = Engine.now if time == 0
|
52
|
+
Engine.emit(tag, time, record)
|
53
|
+
nil
|
54
|
+
end
|
55
|
+
|
56
|
+
def logs(tag, entries)
|
57
|
+
current = Engine.now
|
58
|
+
# TODO: need type validation for entries?
|
59
|
+
Engine.emit_array(tag, entries.map { |e|
|
60
|
+
e[0] = current if e[0] == 0
|
61
|
+
e
|
62
|
+
})
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'fluent/test'
|
2
|
+
require 'fluent/plugin/in_msgpack_rpc'
|
3
|
+
|
4
|
+
class MessagePackRPCInputTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
Fluent::Test.setup
|
7
|
+
@default_time = Time.parse("2011-10-05 12:24:48 UTC").to_i
|
8
|
+
Fluent::Engine.now = @default_time
|
9
|
+
end
|
10
|
+
|
11
|
+
CONFIG = %[
|
12
|
+
port 9123
|
13
|
+
bind 127.0.0.1
|
14
|
+
]
|
15
|
+
|
16
|
+
def create_driver(conf = CONFIG)
|
17
|
+
Fluent::Test::InputTestDriver.new(Fluent::MessagePackRPCInput).configure(conf)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_configure
|
21
|
+
d = create_driver
|
22
|
+
assert_equal 9123, d.instance.port
|
23
|
+
assert_equal '127.0.0.1', d.instance.bind
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_missing_port
|
27
|
+
assert_raise(Fluent::ConfigError){
|
28
|
+
d = create_driver(%[
|
29
|
+
bind 127.0.0.1
|
30
|
+
])
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
# TODO: Add test for invalid 'bind' parameter
|
35
|
+
|
36
|
+
def test_default_time
|
37
|
+
d = create_driver
|
38
|
+
|
39
|
+
d.expect_emit "tag1", @default_time, {"a" => 1}
|
40
|
+
d.expect_emit "tag2", @default_time, {"a" => 2}
|
41
|
+
d.run do
|
42
|
+
d.expected_emits.each { |tag, time, record|
|
43
|
+
post(tag, 0, record)
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_time
|
49
|
+
d = create_driver
|
50
|
+
|
51
|
+
d.expect_emit "tag1", 12345, {"a" => 1}
|
52
|
+
d.expect_emit "tag2", 20, {"a" => 2}
|
53
|
+
d.run do
|
54
|
+
post("tag1", 12345, {"a" => 1})
|
55
|
+
post("tag2", 20, {"a" => 2})
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_default_time_with_array
|
60
|
+
d = create_driver
|
61
|
+
|
62
|
+
d.expect_emit "tag", @default_time, {"a" => 1}
|
63
|
+
d.expect_emit "tag", @default_time, {"a" => 2}
|
64
|
+
d.run do
|
65
|
+
post_array("tag", d.expected_emits.map { |tag, time, record| [0, record] })
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_time_with_array
|
70
|
+
d = create_driver
|
71
|
+
|
72
|
+
d.expect_emit "tag", 54321, {"a" => 1}
|
73
|
+
d.expect_emit "tag", 128, {"a" => 2}
|
74
|
+
d.run do
|
75
|
+
post_array("tag", [[54321, {"a" => 1}], [128, {"a" => 2}]])
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def post(tag, time, record)
|
80
|
+
cli = MessagePack::RPC::Client.new('127.0.0.1', 9123)
|
81
|
+
cli.call(:log, tag, time, record)
|
82
|
+
cli.close
|
83
|
+
end
|
84
|
+
|
85
|
+
def post_array(tag, events)
|
86
|
+
cli = MessagePack::RPC::Client.new('127.0.0.1', 9123)
|
87
|
+
cli.call(:logs, tag, events)
|
88
|
+
cli.close
|
89
|
+
end
|
90
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fluent-plugin-msgpack-rpc
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Nobuyuki Kubota
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-10-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: fluent
|
16
|
+
requirement: &24305680 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.10.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *24305680
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: msgpack-rpc
|
27
|
+
requirement: &24305180 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.4.5
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *24305180
|
36
|
+
description:
|
37
|
+
email: nobu.k.jp+github@gmail.com
|
38
|
+
executables: []
|
39
|
+
extensions: []
|
40
|
+
extra_rdoc_files:
|
41
|
+
- README.rst
|
42
|
+
files:
|
43
|
+
- AUTHORS
|
44
|
+
- Rakefile
|
45
|
+
- VERSION
|
46
|
+
- lib/fluent/plugin/in_msgpack_rpc.rb
|
47
|
+
- test/plugin/in_msgpack_rpc.rb
|
48
|
+
- README.rst
|
49
|
+
homepage: http://github.com/fluent
|
50
|
+
licenses: []
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options: []
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
requirements: []
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 1.8.6
|
70
|
+
signing_key:
|
71
|
+
specification_version: 3
|
72
|
+
summary: Input plugin for Fluent using MessagePack-RPC
|
73
|
+
test_files:
|
74
|
+
- test/plugin/in_msgpack_rpc.rb
|