fluent-plugin-fedmsg 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 07e0e35e50a48c784740e30c5e72724ab777fcde
4
- data.tar.gz: 9f68c00a6bf1c3a7543aec0f3966c7d55c04284a
3
+ metadata.gz: 8b1f278f7df87e6c3ce1080d07f25a18f08affe1
4
+ data.tar.gz: 6343aadf248afa6a0c9573f31d6b8b6fd4ed52b0
5
5
  SHA512:
6
- metadata.gz: 8fdf99207957031f281e9b840279b5a958254ccbaefd5f358872d14c1ee447e09d45ea8965d20c9e912ffdabc3de951330fc3a65a2c9fc26cf9b35c412945178
7
- data.tar.gz: 3096204a1601d5328f683161e2813a386c4fcd868484408e55fad4ad3b4daa094e934b3a4a0152874115b2cde3630e12a05d5cd77b228e4367b0985456395e16
6
+ metadata.gz: 81059067eb76f509a78c630b0df9c8fdbe4952ef6da751213958c2d4e695fd0cba2d14f512297c1b2a5d55d4ea8c2a0644ad1eed5615afb52247a20173c6eea3
7
+ data.tar.gz: fc2808158c63f12f0180394a661280ee56d6c83a64ced70795fee5df7410d21a6b67deffd9313b1c1b1be515b145121002a0b91582020c4faa0d761527098387
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-zmq-pub.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ require 'rake/testtask'
5
+ Rake::TestTask.new(:test) do |test|
6
+ test.libs << 'lib' << 'test'
7
+ test.pattern = 'test/**/test_*.rb'
8
+ test.verbose = true
9
+ end
10
+
11
+ task :default => :test
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Anton Sherkhonov"]
6
+ gem.email = ["sherkhonov@gmail.com"]
7
+ gem.description = %q{FedMsg subscriber plugin for fluentd}
8
+ gem.summary = %q{FedMsg subscriber plugin for fluentd, use 0MQ v3.2 or greater version}
9
+ gem.homepage = ""
10
+ gem.licenses = ["Apache License, Version 2.0"]
11
+
12
+ gem.files = `git ls-files`.split($\)
13
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
+ gem.name = "fluent-plugin-fedmsg"
16
+ gem.require_paths = ["lib"]
17
+ gem.version = "0.0.2"
18
+ gem.add_development_dependency "rake"
19
+ gem.add_development_dependency "test-unit", "~> 3.2.0"
20
+ gem.add_runtime_dependency "fluentd"
21
+ gem.add_runtime_dependency "ffi-rzmq"
22
+ end
@@ -0,0 +1,89 @@
1
+ require 'fluent/input'
2
+
3
+ module Fluent
4
+
5
+ class ZmqSubInput < Fluent::Input
6
+ Fluent::Plugin.register_input('fedmsg', self)
7
+
8
+ config_param :subkey, :string, :default => ""
9
+ config_param :publisher, :string, :default => "tcp://127.0.0.1:5556"
10
+ config_param :tag_prefix, :string, :default => ""
11
+ config_param :drop_fields, :string, :default => "username,certificate,i,crypto,signature"
12
+
13
+ attr_reader :subkeys
14
+
15
+ def initialize
16
+ super
17
+ require 'ffi-rzmq'
18
+ end
19
+
20
+ def configure(conf)
21
+ super
22
+ @subkeys = @subkey.split(",")
23
+ @drop_fields_arr = @drop_fields.split(",")
24
+ end
25
+
26
+ def start
27
+ super
28
+ @context =ZMQ::Context.new()
29
+ @thread = Thread.new(&method(:run))
30
+ end
31
+
32
+ def shutdown
33
+ Thread.kill(@thread)
34
+ @thread.join
35
+ @context.terminate
36
+ super
37
+ end
38
+
39
+ def run
40
+ begin
41
+ @subscriber = @context.socket(ZMQ::SUB)
42
+ @subscriber.connect(@publisher)
43
+ @subscriber.setsockopt(ZMQ::SNDHWM, 100)
44
+ @subscriber.setsockopt(ZMQ::RCVHWM, 100)
45
+ if @subkeys.size > 0
46
+ @subkeys.each do |k|
47
+ @subscriber.setsockopt(ZMQ::SUBSCRIBE,k)
48
+ end
49
+ else
50
+ @subscriber.setsockopt(ZMQ::SUBSCRIBE,'')
51
+ end
52
+ loop do
53
+ msg = ''
54
+ while @subscriber.recv_string(msg,ZMQ::DONTWAIT) && msg.size > 0
55
+ begin
56
+ record = JSON.parse(msg)
57
+ rescue JSON::ParserError => e
58
+ log.trace "Ignoring non-JSON message '#{msg}'"
59
+ next
60
+ rescue => e
61
+ log.warn "Unknown error parsing JSON message.",:error_class => e.class, :error => e
62
+ log.warn_backtrace
63
+ end
64
+ begin
65
+ tag = @tag_prefix + "." + record['topic']
66
+ time = record['timestamp']
67
+ record.delete_if { |key, value| @drop_fields_arr.include? key}
68
+ Engine.emit(tag, time, record)
69
+ rescue => e
70
+ log.warn "Error in processing message.",:error_class => e.class, :error => e
71
+ log.warn_backtrace
72
+ end
73
+ msg = ''
74
+ end
75
+ sleep(0.1)
76
+ end
77
+ rescue => e
78
+ log.error "error occurred while executing plugin.", :error_class => e.class, :error => e
79
+ log.warn_backtrace
80
+ ensure
81
+ if @subscriber
82
+ @subscriber.close
83
+ end
84
+ end
85
+ end
86
+
87
+ end
88
+
89
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,28 @@
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_fedmsg'
26
+
27
+ class Test::Unit::TestCase
28
+ end
@@ -0,0 +1,97 @@
1
+ require 'helper'
2
+ require 'ffi-rzmq'
3
+
4
+ class FedMsgIntputTest < Test::Unit::TestCase
5
+ def setup
6
+ Fluent::Test.setup
7
+ @context = ZMQ::Context.new()
8
+ @publisher = @context.socket(ZMQ::PUB)
9
+ @publisher.bind("tcp://*:5556")
10
+ end
11
+
12
+ def teardown
13
+ @publisher.close
14
+ @context.terminate
15
+ end
16
+
17
+ PUBLISHER = "tcp://127.0.0.1:5556"
18
+ CONFIG = %[
19
+ publisher #{PUBLISHER}
20
+ subkey test1.,test2.
21
+ ]
22
+
23
+
24
+ def create_driver(conf=CONFIG)
25
+ Fluent::Test::InputTestDriver.new(Fluent::ZmqSubInput).configure(conf)
26
+ end
27
+
28
+ def test_configure
29
+ d = create_driver(CONFIG + "tag_prefix fed_msg_stuff")
30
+ assert_equal PUBLISHER, d.instance.publisher
31
+ assert_equal ["test1.","test2."], d.instance.subkeys
32
+ assert_equal "fed_msg_stuff", d.instance.tag_prefix
33
+ end
34
+
35
+ def test_receive
36
+ d = create_driver
37
+
38
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
39
+ Fluent::Engine.now = time
40
+
41
+ d.expect_emit "test1.aa", time, {"a"=>1}
42
+ d.expect_emit "test2.bb", time, {"a"=>2}
43
+
44
+ d.run do
45
+ d.expected_emits.each {|tag,time,record|
46
+ send_record("dummy",time,record) # This record should not be received.
47
+ send_record(tag,time,record)
48
+ }
49
+ sleep 1
50
+ end
51
+ end
52
+
53
+ def test_no_subkey
54
+ d = create_driver("")
55
+
56
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
57
+ Fluent::Engine.now = time
58
+
59
+ d.expect_emit "test1.aa", time, {"a"=>1}
60
+ d.expect_emit "test2.bb", time, {"a"=>2}
61
+
62
+ d.run do
63
+ d.expected_emits.each {|tag,time,record|
64
+ send_record(tag,time,record)
65
+ }
66
+ sleep 1
67
+ end
68
+ end
69
+
70
+
71
+ def test_receive_bulk
72
+ d = create_driver(CONFIG + "bulk_send true")
73
+
74
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
75
+ Fluent::Engine.now = time
76
+
77
+ d.expect_emit "test3.aa", time, {"a"=>1}
78
+ d.expect_emit "test4.bb", time, {"a"=>2}
79
+
80
+ d.run do
81
+ record_to_send = []
82
+ d.expected_emits.each {|tag,time,record|
83
+ record_to_send << [tag,time,record]
84
+ }
85
+ send_record_bulk("test1.aa",record_to_send)
86
+ sleep 1
87
+ end
88
+ end
89
+
90
+ def send_record(tag,time,record)
91
+ @publisher.send_string(tag + " " + [tag,time,record].to_msgpack)
92
+ end
93
+
94
+ def send_record_bulk(tag,records)
95
+ @publisher.send_string(tag + " " + records.to_msgpack)
96
+ end
97
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-fedmsg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Sherkhonov
@@ -74,8 +74,14 @@ extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
76
  - .gitignore
77
+ - Gemfile
77
78
  - LICENSE
78
79
  - README.md
80
+ - Rakefile
81
+ - fluent-plugin-fedmsg.gemspec
82
+ - lib/fluent/plugin/in_fedmsg.rb
83
+ - test/helper.rb
84
+ - test/plugin/test_in_fedmsg.rb
79
85
  homepage: ''
80
86
  licenses:
81
87
  - Apache License, Version 2.0
@@ -100,4 +106,6 @@ rubygems_version: 2.0.14.1
100
106
  signing_key:
101
107
  specification_version: 4
102
108
  summary: FedMsg subscriber plugin for fluentd, use 0MQ v3.2 or greater version
103
- test_files: []
109
+ test_files:
110
+ - test/helper.rb
111
+ - test/plugin/test_in_fedmsg.rb