fluent-plugin-nsq 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Y2M1NDBmNjFmOGY5ZjkyMTM4MTdkMDAwYmY0Y2U2OGMzZGJmNDZkZQ==
5
+ data.tar.gz: !binary |-
6
+ OGZlMzMyZmQ3N2ZjZjk2NzJiODdhODBkNGEzNjJkMTMzYTM0M2YwMw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YWIzNDZkZDViMzBkYjUzYWM5MzZkNDMyYzAyYzA2MDY5MTIwN2M0OGJhZDFh
10
+ NjdjMTFjZjYwNGYwMzRiNjY0MDlhNDkzN2U0OTRlOTgyMzNhZTQ0OGM0ZDVl
11
+ YjFkOWZjNmUxNzc3YmViYjBkZjliNWE3MjcxYTc4M2Y2NjA4OGE=
12
+ data.tar.gz: !binary |-
13
+ MTc4ZjA4MTMxOWI3ZDk4OTE0MWUyYzk4ZjQ1ZDg2N2Y4NTM4NGU4OThjNTQ0
14
+ MWQzY2U2Nzc2ZTE2MTAzZDBlNzA5NDAxNWZiZDY1ZTg1MTlmOGEzZTdhNDNj
15
+ NTI5NjIwODRkN2E5NmZhOGY4NjE5OTg4MzY2YzI3MmIyNWZkOWY=
@@ -0,0 +1,23 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "fluent-plugin-nsq"
5
+ s.version = `cat VERSION`
6
+ s.authors = ["lxfontes", "dterror"]
7
+ s.email = ["lucas@uken.com", "diogo@uken.com"]
8
+ s.description = %q{NSQ output plugin for Fluentd}
9
+ s.summary = %q{output plugin for fluentd}
10
+ s.homepage = "https://github.com/uken/fluent-plugin-nsq"
11
+ s.license = 'MIT'
12
+
13
+ git_files = `git ls-files`.split($/)
14
+
15
+ s.files = git_files.grep(%r{^(lib|fluent|bin)})
16
+ s.executables = git_files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ s.test_files = git_files.grep(%r{^(test|spec|features)/})
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_runtime_dependency 'fluentd', '~> 0.10'
21
+ s.add_runtime_dependency 'nsq-ruby', '~> 1.0'
22
+ s.add_development_dependency 'rake', '~> 10'
23
+ end
@@ -0,0 +1,52 @@
1
+ # coding: utf-8
2
+ require 'nsq'
3
+
4
+ module Fluent
5
+ class NSQOutput < BufferedOutput
6
+ Plugin.register_output('nsq', self)
7
+
8
+ config_param :topic, :string, default: nil
9
+ config_param :nsqlookupd, :string, default: nil
10
+
11
+ def initialize
12
+ super
13
+ end
14
+
15
+ def configure(conf)
16
+ super
17
+
18
+ raise ConfigError, "Missing nsqlookupd" unless @nsqlookupd
19
+ raise ConfigError, "Missing topic" unless @topic
20
+ end
21
+
22
+ def start
23
+ lookupds = @nsqlookupd.split(',')
24
+ @producer = Nsq::Producer.new(
25
+ nslookupd: lookupds,
26
+ topic: @topic
27
+ )
28
+ end
29
+
30
+ def shutdown
31
+ @producer.terminate
32
+ end
33
+
34
+ def format(tag, time, record)
35
+ [tag, time, record].to_msgpack
36
+ end
37
+
38
+ def write(chunk)
39
+ return if chunk.empty?
40
+
41
+ chunk.msgpack_each do |tag, time, record|
42
+ next unless record.is_a? Hash
43
+ #TODO get rid of this extra copy
44
+ tagged_record = record.merge(
45
+ _key: tag,
46
+ _ts: time
47
+ )
48
+ @producer.write(tagged_record.to_json)
49
+ end
50
+ end
51
+ end
52
+ end
data/test/helper.rb ADDED
@@ -0,0 +1 @@
1
+ require 'minitest/pride'
@@ -0,0 +1,49 @@
1
+ require 'test/unit'
2
+
3
+ require 'fluent/test'
4
+ require 'fluent/plugin/out_nsq'
5
+
6
+ require 'date'
7
+
8
+ require 'helper'
9
+
10
+ $:.push File.expand_path("../lib", __FILE__)
11
+ $:.push File.dirname(__FILE__)
12
+
13
+ class TestNSQOutput < Test::Unit::TestCase
14
+ TCONFIG = %[
15
+ nsqlookupd localhost:4161
16
+ topic logs
17
+ ]
18
+ def setup
19
+ #Nsq.logger = Logger.new(STDOUT)
20
+ Fluent::Test.setup
21
+ end
22
+
23
+ def test_configure
24
+ d = create_driver
25
+ assert_not_nil d.instance.topic
26
+ end
27
+
28
+ def create_driver(tag='test', conf=TCONFIG)
29
+ Fluent::Test::BufferedOutputTestDriver.new(Fluent::NSQOutput, tag).configure(conf, true)
30
+ end
31
+
32
+ def sample_record
33
+ {'age' => 26, 'request_id' => '42', 'parent_id' => 'parent', 'sub' => {'field'=>{'pos'=>15}}}
34
+ end
35
+
36
+ def test_wrong_config
37
+ assert_raise Fluent::ConfigError do
38
+ d = create_driver('test','')
39
+ end
40
+ end
41
+
42
+ def test_sample_record_loop
43
+ d = create_driver
44
+ 100.times.each do |t|
45
+ d.emit(sample_record)
46
+ end
47
+ d.run
48
+ end
49
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-nsq
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - lxfontes
8
+ - dterror
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-11-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fluentd
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '0.10'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '0.10'
28
+ - !ruby/object:Gem::Dependency
29
+ name: nsq-ruby
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: '1.0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: '1.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: '10'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '10'
56
+ description: NSQ output plugin for Fluentd
57
+ email:
58
+ - lucas@uken.com
59
+ - diogo@uken.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - fluent-plugin-nsq.gemspec
65
+ - lib/fluent/plugin/out_nsq.rb
66
+ - test/helper.rb
67
+ - test/plugin/test_out_nsq.rb
68
+ homepage: https://github.com/uken/fluent-plugin-nsq
69
+ licenses:
70
+ - MIT
71
+ metadata: {}
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 2.3.0
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: output plugin for fluentd
92
+ test_files:
93
+ - test/helper.rb
94
+ - test/plugin/test_out_nsq.rb