fluent-plugin-consul 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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a5a83cabdee56c95a05a17511e58376076356884
4
+ data.tar.gz: b0c8555f1b687c7b662a47b78f04b44297a55124
5
+ SHA512:
6
+ metadata.gz: a37c6dbfe10a1fbc2cdff92d03190d755ef9d7db1d9c0d7d68ac7de4c77ffae9e7e398460de17a6aa31c59e347e630197a24db5553dc9392686ba64a62757f43
7
+ data.tar.gz: acd00bf1f706a5f1a5327405941fbe8307cf166106b92e2e57e32cdf8286e3d037740dec3b1a1ba5d091e0cae048ee0963261dc5de195d153821b4d63d68e4d6
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ .idea
2
+ *.iml
3
+
4
+ Gemfile.lock
5
+ .bundle/*
6
+ pkg/*
7
+ vendor/*
data/CHANGELOG ADDED
@@ -0,0 +1,3 @@
1
+ ## v0.0.1 2014/xx/xx
2
+
3
+ - Initial release
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,8 @@
1
+ # Consul output plugin for [Fluentd](http://www.fluentd.org)
2
+
3
+ fluent-plugin-consul store Fluentd event to Consul Key/Value Storage
4
+
5
+ ## Installing
6
+
7
+ to be uploaded on Rubygems
8
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |test|
5
+ test.libs << "test" << "lib"
6
+ test.pattern = 'test/test_*.rb'
7
+ test.verbose = true
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "fluent-plugin-consul"
7
+ spec.version = "0.0.1"
8
+ spec.authors = ["foostan"]
9
+ spec.email = ["ks@fstn.jp"]
10
+ spec.summary = %q{Store Fluentd event to Consul Key/Value Storage}
11
+ spec.homepage = "https://github.com/foostan/fluent-plugin-consul"
12
+ spec.license = "Apache License, Version 2.0"
13
+
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_development_dependency "bundler"
20
+ spec.add_development_dependency "rake"
21
+ spec.add_runtime_dependency "fluentd"
22
+ spec.add_runtime_dependency 'diplomat', '~> 0.2.1'
23
+ end
@@ -0,0 +1,50 @@
1
+ module Fluent
2
+
3
+ class ConsulOutput < Fluent::BufferedOutput
4
+ Fluent::Plugin.register_output('consul', self)
5
+
6
+ config_param :consul_uri, :string, :default => 'http://localhost:8500'
7
+ config_param :kv_prefix, :string, :default => 'fluentd'
8
+
9
+ def initialize
10
+ super
11
+ require 'diplomat'
12
+ end
13
+
14
+ def configure(conf)
15
+ super
16
+ ::Diplomat.configure do |config|
17
+ config.url = @consul_uri
18
+ end
19
+ end
20
+
21
+ def format(tag, time, record)
22
+ { tag => { time: time, record: record } }.to_json
23
+ end
24
+
25
+ def write(chunk)
26
+ data = JSON.parse(chunk.read)
27
+
28
+ consul_kvs_fmt(data).each do |kv|
29
+ ::Diplomat.put(@kv_prefix + kv[:key].to_s, kv[:value].to_s)
30
+ end
31
+ end
32
+
33
+ def consul_kvs_fmt(data)
34
+ kvs = []
35
+
36
+ if data.is_a?(Array) || data.is_a?(Hash)
37
+ data.each_key do |k|
38
+ r_kvs = consul_kvs_fmt(data[k])
39
+ r_kvs.each do |r_kv|
40
+ kvs << { key: '/' + k + r_kv[:key], value: r_kv[:value] }
41
+ end
42
+ end
43
+ else
44
+ kvs << { key: '', value: data }
45
+ end
46
+
47
+ kvs
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,52 @@
1
+ require 'fluent/test'
2
+ require 'fluent/plugin/out_consul'
3
+
4
+ class TestConsulOutput < MiniTest::Unit::TestCase
5
+ def setup
6
+ Fluent::Test.setup
7
+ end
8
+
9
+ CONFIG = '
10
+ consul_uri localhost:8500
11
+ kv_prefix fluentd
12
+ '
13
+
14
+ def create_driver(conf = CONFIG)
15
+ Fluent::Test::BufferedOutputTestDriver.new(Fluent::ConsulOutput) do
16
+ def write(chunk)
17
+ chunk.read
18
+ end
19
+ end.configure(conf)
20
+ end
21
+
22
+ def test_configure
23
+ d = create_driver
24
+ assert_equal 'localhost:8500', d.instance.consul_uri
25
+ assert_equal 'fluentd', d.instance.kv_prefix
26
+ end
27
+
28
+ def test_consul_kvs_fmt
29
+ d = create_driver
30
+ data = {
31
+ 'key1' => {
32
+ 'sub_key1-1' => 'value1',
33
+ 'sub_key1-2' => 'value2',
34
+ },
35
+ 'key2' => {
36
+ 'sub_key2-1' => 'value3',
37
+ 'sub_key2-2' => 'value4',
38
+ },
39
+ 'key3' => 'value5'
40
+ }
41
+
42
+ consul_kvs = [
43
+ Hash(:key => '/key1/sub_key1-1', :value => 'value1'),
44
+ Hash(:key => '/key1/sub_key1-2', :value => 'value2'),
45
+ Hash(:key => '/key2/sub_key2-1', :value => 'value3'),
46
+ Hash(:key => '/key2/sub_key2-2', :value => 'value4'),
47
+ Hash(:key => '/key3', :value => 'value5'),
48
+ ]
49
+
50
+ assert_equal consul_kvs, d.instance.consul_kvs_fmt(data)
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-consul
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - foostan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-25 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: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
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: diplomat
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.2.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.2.1
69
+ description:
70
+ email:
71
+ - ks@fstn.jp
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - CHANGELOG
78
+ - Gemfile
79
+ - README.md
80
+ - Rakefile
81
+ - fluent-plugin-consul.gemspec
82
+ - lib/fluent/plugin/out_consul.rb
83
+ - test/test_out_consul.rb
84
+ homepage: https://github.com/foostan/fluent-plugin-consul
85
+ licenses:
86
+ - Apache License, Version 2.0
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.2.2
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: Store Fluentd event to Consul Key/Value Storage
108
+ test_files:
109
+ - test/test_out_consul.rb