fluent-plugin-consul 0.0.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.
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