fluent-plugin-riak2f 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: 8b7beab77e858e192eaada824cace1820196a979
4
+ data.tar.gz: 0136c5c1862058872fd54e3ba59e82b9326fd7e5
5
+ SHA512:
6
+ metadata.gz: d409ac9126547b409b619075bf83e6f96e37bd4b93aacd7d4b873bb8dc30b2283aadd8cd3aa603268b986682441c71e2f0ee7466bcab2f63da0f09bb963f213d
7
+ data.tar.gz: d5d8f0da7053d1b89c5f6c902c457587ed4b3b231d7f014bb8dba7bd5334f821510cb4522118ec88b01bd1c249c145ed25476c727d63ed73c3666d9f880a2b2c
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+ *~
15
+ Gemfile.lock
16
+ # YARD artifacts
17
+ .yardoc
18
+ _yardoc
19
+ doc/
data/CHANGELOG ADDED
@@ -0,0 +1,13 @@
1
+ 0.0.5
2
+ =====
3
+
4
+ - update to support riak 2.0 bucket types
5
+ - update record to support riak search 2.0 (yokozuna) style json extraction
6
+ - write to a metadata crdt map bucket names
7
+
8
+ 0.0.4
9
+ =====
10
+
11
+ - hard fork from https://github.com/kuenishi/fluent-plugin-riak , see README for more info
12
+ - bare minimum to support riak-ruby-client v2.1
13
+ - change UUID to v1 (timestamp based)
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem "simplecov", :require => false
6
+ gem "uuidtools", :require => ">= 2.1.3"
data/LICENSE.md ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2014 Kota UENISHI, Collective Health, Inc.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,70 @@
1
+ [fluent-plugin-riak2f](https://github.com/kyanagimoto/fluent-plugin-riak2), a plugin for [Fluentd](http://fluentd.org)
2
+ ==================
3
+
4
+
5
+ `fluent-plugin-riak2f` is a fluentd output plugin designed to stuff log messages into a riak cluster.
6
+
7
+ This version is based on the work of [fluent-plugin-riak2](https://github.com/collectivehealth/fluent-plugin-riak2). We are very thankful for his effort and his decision to release the work under the Apache 2 license.
8
+
9
+ `fluent-plugin-riak2` is designed to be used with Riak 2.x clusters and it's yokozuna/solr based search engine. Support for secondary indicies is limited and should be considered deprecated.
10
+
11
+ Riak ( http://github.com/basho/riak ) is an open-source distributed KVS focused on availability.
12
+
13
+ Current status is still proof-of-concept: index setting and its configuration are to be decided. Also performance optimization is required. Another idea is in_tail_riak by using riak post-commit.
14
+
15
+ installation
16
+ ------------
17
+
18
+ ```bash
19
+ $ sudo gem install fluent-plugin-riak2f
20
+ ```
21
+
22
+ Notice: you need Riak configured using eleveldb as backend.
23
+
24
+
25
+ fluent.conf example
26
+ -------------------
27
+
28
+ ```
29
+ <match riak2.**>
30
+ type riak2
31
+
32
+ buffer_type memory
33
+ flush_interval 10s
34
+ retry_limit 5
35
+ retry_wait 1s
36
+ buffer_chunk_limit 256m
37
+ buffer_queue_limit 8096
38
+ bucket_type defalut # if not set, will use 'default'
39
+ bucket_name fluentdlog # if not set, will use 'fluentdlog'
40
+
41
+ # pb port
42
+ nodes 127.0.0.1:8087
43
+ #for cluster, define multiple machines
44
+ #nodes 192.168.100.128:10018 129.168.100.128:10028
45
+ </match>
46
+
47
+ ```
48
+
49
+ - key format -> %Y%m%d%H%M%S-<uuid>
50
+ - value format -> [records] in JSON
51
+ - index:
52
+
53
+ - year_int -> year
54
+ - month_bin -> <year>-<month>
55
+ - tag_bin -> tags
56
+
57
+ easy querying log
58
+ -----------------
59
+
60
+ ```bash
61
+ $ curl -X PUT http://localhost:8098/buckets/static/keys/browser.html -H 'Content-type: text/html' -d @browser.html
62
+ $ open http://localhost:8098/buckets/static/keys/browser.html
63
+ ```
64
+
65
+ License
66
+ =======
67
+
68
+ Apache 2.0
69
+
70
+ Copyright Kota UENISHI, Collective Health, Inc.
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new(:test) do |test|
7
+ test.libs << 'lib' << 'test'
8
+ test.test_files = FileList['test/plugin/*.rb']
9
+ test.verbose = true
10
+ end
11
+
12
+ task :coverage do |t|
13
+ ENV['SIMPLE_COV'] = '1'
14
+ Rake::Task["test"].invoke
15
+ end
16
+
17
+ task :default => [:build]
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
data/browser.html ADDED
@@ -0,0 +1,178 @@
1
+ <html>
2
+ <head>
3
+ <title>Riak mapreducer</title>
4
+ <style type="text/css">
5
+ body {
6
+ background: #678; text-align: center; width: 100%; font-family: 'Titillium', Monospace;
7
+ }
8
+ body div {
9
+ width: 80%; background: #ddd;
10
+ padding: 20px; text-align: left; margin: 0px auto;
11
+ }
12
+ h2 {
13
+ padding: 0px;
14
+ margin: 0px auto;
15
+ }
16
+ a {
17
+ text-shadow: 1px 1px #888888;
18
+ text-decoration:underline;
19
+ }
20
+ </style>
21
+ <script lang="JavaScript">
22
+ function get_map(){ return document.getElementById("map").value; }
23
+ function get_reduce(){ return document.getElementById("reduce").value; }
24
+ function get_bucketname(){ return document.getElementById("bucket").value; }
25
+ function exec_query(m, r){
26
+ var q = { inputs : get_bucketname(),
27
+ query : [
28
+ { map: { language: "javascript", source: m}},
29
+ { reduce: { language: "javascript", source: r}}
30
+ ]};
31
+ var xmlhttp = new XMLHttpRequest();
32
+ xmlhttp.open("POST", "/mapred", false);
33
+ xmlhttp.setRequestHeader("Content-Type", "application/json");
34
+ xmlhttp.send(JSON.stringify(q, null, ""));
35
+ var result = xmlhttp.responseText;
36
+
37
+ var resultBox = document.getElementById("result");
38
+ resultBox.innerText = result;
39
+ }
40
+ </script>
41
+ </head>
42
+
43
+ <body>
44
+ <div id="content">
45
+ <div style="text-align:right">
46
+ <script lang="JavaScript">
47
+ </script>
48
+ bucket name:<input type="text" id="bucket" value="fluentlog"/>
49
+ </div>
50
+
51
+ <h2>Run mapreduce on fluentd log</h2>
52
+ <table style="border: 1px solid black;">
53
+ <tr>
54
+ <th>map</th> <th>reduce</th>
55
+ </tr>
56
+ <tr>
57
+ <td>
58
+ <textarea name="map" id="map" rows="16" cols="50">
59
+ function(v){
60
+ var data = v.values[0].data;
61
+ var c = JSON.parse(data);
62
+ return [c.count];
63
+ }
64
+ </textarea>
65
+ </td><td>
66
+ <textarea name="reduce" id="reduce" rows="16" cols="50" >
67
+ function(v){
68
+ var sum = 0;
69
+ for( var i=0; i < v.length; ++i){
70
+ sum += v[i];
71
+ }
72
+ return [sum];
73
+ }
74
+ </textarea>
75
+ </td>
76
+ </tr>
77
+ <tr>
78
+ <th colspan="2"> <a onClick="exec_query(get_map(), get_reduce());">query</a> </th>
79
+ </tr>
80
+ <tr>
81
+ <td width="200px" colspan="2">
82
+ <div id="result" style="font: bold;"></div>
83
+ </td>
84
+ </tr>
85
+ <tr><td colspan="3">
86
+ <script lang="JavaScript">
87
+ function grep(){
88
+
89
+ }
90
+ </script>
91
+ <script lang="JavaScript" type="text/javascript">
92
+ function count_rank(){
93
+ var m = "function(v){
94
+ var data = v.values[0].data;
95
+ var c = JSON.parse(data);
96
+ var tags = {};
97
+ for(var i=0; i<c.length; ++i){
98
+ count = tags[c[i].tag];
99
+ if(count == null){ tags[c[i].tag] = 1; }
100
+ else{ tags[c[i].tag] = count+1; }
101
+ }
102
+ return [tags];
103
+ }";
104
+ var r = "function(v){
105
+ var tags = {};
106
+ for(var i=0; i<v.length; ++i){
107
+ for (var prop in v[i]) {
108
+ count = tags[prop];
109
+ if(count == null){ tags[prop] = v[i][prop]; }
110
+ else{ tags[prop] = count+v[i][prop]; }
111
+ }
112
+ }
113
+ return [tags];
114
+ }";
115
+ exec_query(m, r);
116
+ }
117
+ </script>
118
+
119
+ <!-- <a onClick="grep();">grep</a> <input type="text" id="grep" value="debug"/> -->
120
+ <a onClick="count_rank();">count&amp;rank</a> <input type="text" id="count_rank" value="tag"/>
121
+ </td></tr>
122
+ </table>
123
+
124
+ <hr/>
125
+ <h2>Riak object viewer</h2>
126
+ <script lang="JavaScript">
127
+ function get(){
128
+ var key = document.getElementById("key").value;
129
+ var xmlhttp = new XMLHttpRequest();
130
+ xmlhttp.open("GET", "/buckets/"+ get_bucketname() +"/keys/"+key, false);
131
+ xmlhttp.send();
132
+ var result = xmlhttp.responseText;
133
+ console.log(result);
134
+ document.getElementById("object").innerText = result;
135
+ }
136
+ </script>
137
+ <a onClick="get();" >get</a> <input type="text" id="key" />
138
+ <div id="object"></div>
139
+
140
+
141
+ <h2>Riak keylister</h2>
142
+ <script lang="JavaScript">
143
+ function listkeys(){
144
+ var xmlhttp = new XMLHttpRequest();
145
+ xmlhttp.open("GET", "/buckets/"+ get_bucketname() +"/keys?keys=true", false);
146
+ xmlhttp.send();
147
+ var result = JSON.parse(xmlhttp.responseText);
148
+ console.log(result);
149
+
150
+ document.getElementById("keylist").innerText = result.keys.sort().join("\n");
151
+ }
152
+ </script>
153
+ <a onClick="listkeys();" >listkeys</a>
154
+ <div id="keylist"></div>
155
+ <hr/>
156
+ (C)@kuenishi distributed under Apache 2 license
157
+ </div>
158
+ <!--
159
+ <h2>Riak object putter</h2>
160
+ <script lang="JavaScript">
161
+ function put(){
162
+ var key = document.getElementById("key2").value;
163
+ var value = document.getElementById("value").value;
164
+ var xmlhttp = new XMLHttpRequest();
165
+ xmlhttp.open("PUT", "/buckets/fluentlog/keys/"+key, false);
166
+ xmlhttp.setRequestHeader("Content-Type", "application/json");
167
+ xmlhttp.send(value);
168
+ var result = xmlhttp.responseText;
169
+ console.log(result);
170
+ document.getElementById("object2").innerText = result;
171
+ }
172
+ </script>
173
+ <a onClick="put();" >put</a> <input type="text" id="key2" /> <input type="text" id="value" />
174
+ <div id="object2"></div>
175
+ -->
176
+
177
+ </body>
178
+ </html>
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = "fluent-plugin-riak2f"
6
+ gem.description = "Riak 2.x plugin for Fluent event collector"
7
+ gem.homepage = "https://github.com/kyanagimoto/fluent-plugin-riak2f"
8
+ gem.summary = gem.description
9
+ gem.version = File.read("VERSION").strip
10
+ gem.license = 'Apache-2.0'
11
+ gem.authors = ["koichi yanagimoto"]
12
+ gem.email = "kyanagi1107@gmail.com"
13
+ gem.has_rdoc = false
14
+ #gem.platform = Gem::Platform::RUBY
15
+ gem.files = `git ls-files`.split("\n")
16
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ gem.require_paths = ['lib']
19
+
20
+ gem.add_dependency "fluentd", "~> 0.10"
21
+ gem.add_dependency "riak-client", "~> 2.1.0"
22
+ gem.add_dependency "uuidtools", "~> 2.1.3"
23
+ gem.add_development_dependency "rake", ">= 0.9.2"
24
+ gem.add_development_dependency "simplecov", ">= 0.5.4"
25
+ gem.add_development_dependency "rr", ">= 1.0.0"
26
+ end
@@ -0,0 +1,107 @@
1
+ module Fluent
2
+ class Riak2Output < BufferedOutput
3
+ Fluent::Plugin.register_output('riak2', self)
4
+ include SetTimeKeyMixin
5
+ config_set_default :include_tag_key, true
6
+ include SetTagKeyMixin
7
+ config_set_default :include_time_key, true
8
+
9
+ config_param :bucket_type, :string, :default => "default"
10
+ config_param :bucket_name, :string, :default => "fluentlog"
11
+ config_param :riak2_metadata_bucket_type, :string, :default => ""
12
+ config_param :nodes, :string, :default => "localhost:8087"
13
+
14
+ def initialize
15
+ super
16
+ require 'riak'
17
+ require 'msgpack'
18
+ require 'uuidtools'
19
+ end
20
+
21
+ def configure(conf)
22
+ super
23
+ @nodes = @nodes.split(',').map do |s|
24
+ ip,port = s.split(':')
25
+ { :host => ip, :pb_port => port.to_i }
26
+ end
27
+ $log.info "riak nodes=#{@nodes}"
28
+ end
29
+
30
+ def start
31
+ $log.debug " => #{@buffer.chunk_limit} #{@buffer.queue_limit} "
32
+ @client = Riak::Client.new(:nodes => @nodes)
33
+ @bucket = @client.bucket(@bucket_name)
34
+ @buf = {}
35
+
36
+ # $log.debug "riak2_metadata_bucket_type => #{@riak2_metadata_bucket_type}"
37
+ # $log.debug "bucket_type => #{@bucket_type}"
38
+
39
+ unless @riak2_metadata_bucket_type.empty?
40
+ # Here we are storing our bucket type and bucket name in a metadata map. This allows clients to query that map to see a list of all fluentd buckets.
41
+
42
+ # bucket_type/name/key is returns a metadata map
43
+ # config defined bucket type
44
+ metadata_bucket_type = @riak2_metadata_bucket_type
45
+ # bucket name
46
+ metadata_bucket_name = "fluent-plugin-riak2-metadata"
47
+ # root level key for our metadata map
48
+ metadata_key = "fluent-plugin-riak2-metadata-key"
49
+
50
+ # our metadata map has a kv where:
51
+ # 1. key is set_of_logfile_buckets_key
52
+ # 2. value is a set of strings.
53
+ #each string represents the bucket type and name for a single logfile
54
+ set_of_logfile_buckets_key = "all_buckets"
55
+ # inner key for our set of all logfile bucket type/name
56
+
57
+ mdbucket = @client.bucket(metadata_bucket_name)
58
+ Riak::Crdt::DEFAULT_BUCKET_TYPES[:map] = metadata_bucket_type
59
+ map = Riak::Crdt::Map.new(mdbucket, metadata_key)
60
+ map.sets[set_of_logfile_buckets_key].add "#{@bucket_type} #{@bucket_name}"
61
+ end
62
+ super
63
+ end
64
+
65
+ def format(tag, time, record)
66
+ [time, tag, record].to_msgpack
67
+ end
68
+
69
+ def write(chunk)
70
+ $log.debug " <<<<<===========\n"
71
+ records = []
72
+ chunk.msgpack_each do |time, tag, record|
73
+ record[@tag_key] = tag
74
+ records << record
75
+ $log.debug record
76
+ end
77
+ put_now(records)
78
+ end
79
+
80
+ private
81
+
82
+ def put_now(records)
83
+ unless records.empty?
84
+ threads = []
85
+ records.each do |record|
86
+ # if you put log statements here,
87
+ # you must take care to NOT forward fluentd's logs to riak.
88
+ # you will trigger a recursive avalance of riak storage activity.
89
+ now = DateTime.now.strftime("%Y%m%d%H%M%S")
90
+ key = "#{now}-#{UUIDTools::UUID.timestamp_create.to_s}"
91
+ # $log.debug "#{@bucket_name} #{key} \n"
92
+
93
+ threads << Thread.new {
94
+ begin
95
+ robj = Riak::RObject.new(@bucket, key)
96
+ robj.content_type = "application/json"
97
+ robj.raw_data = record
98
+ robj.store(type: @bucket_type)
99
+ rescue => e
100
+ $log.error "ERROR #{e}"
101
+ end
102
+ }
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
data/listkeys.rb ADDED
@@ -0,0 +1,36 @@
1
+ require 'riak'
2
+
3
+ nodes = [{ :host => "127.0.0.1",
4
+ :pb_port => 8087 }]
5
+
6
+
7
+ c = Riak::Client.new( :nodes => nodes, :protocol => "pbc" )
8
+ #c.list_buckets
9
+ b = c.bucket("fluentlog")
10
+
11
+ def put(bucket)
12
+ o = Riak::RObject.new(bucket, "hoge")
13
+ o.content_type = "text/plain"
14
+ o.raw_data = "hogehoge"
15
+ o.store
16
+ end
17
+
18
+ def get(bucket)
19
+ o = bucket.get("hoge")
20
+ p o.content_type
21
+ p o.raw_data
22
+ end
23
+
24
+ def keys(bucket)
25
+ bucket.keys { |ks|
26
+ ks.each { |k|
27
+ o = bucket.get(k)
28
+ print "#{o.bucket.name}/#{o.key} (#{o.content_type})\n"
29
+ print " => #{o.raw_data}\n"
30
+ }
31
+ }
32
+ end
33
+
34
+ #put b
35
+ #get b
36
+ keys b
data/setup_index.sh ADDED
@@ -0,0 +1,11 @@
1
+ #!/bin/sh
2
+
3
+ HOST=$1
4
+
5
+ echo setting up fluentlog_index at $HOST
6
+ curl -X PUT http://${HOST}/yz/index/fluentlog_index
7
+ echo "setting fluentlog_index to fluentlog bucket"
8
+ curl -X PUT http://${HOST}/buckets/fluentlog/props -H 'Content-type:application/json' -d '{"props":{"yz_index":"fluentlog_index"}}'
9
+
10
+ curl http://${HOST}/yz/index?index=true
11
+ curl http://${HOST}/buckets/fluentlog/props
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-riak2f
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - koichi yanagimoto
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fluentd
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.10'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: riak-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: uuidtools
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.1.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.1.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.2
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.9.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.5.4
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.5.4
83
+ - !ruby/object:Gem::Dependency
84
+ name: rr
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 1.0.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 1.0.0
97
+ description: Riak 2.x plugin for Fluent event collector
98
+ email: kyanagi1107@gmail.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - ".gitignore"
104
+ - CHANGELOG
105
+ - Gemfile
106
+ - LICENSE.md
107
+ - README.md
108
+ - Rakefile
109
+ - VERSION
110
+ - browser.html
111
+ - fluent-plugin-riak2f.gemspec
112
+ - lib/fluent/plugin/out_riak2.rb
113
+ - listkeys.rb
114
+ - setup_index.sh
115
+ homepage: https://github.com/kyanagimoto/fluent-plugin-riak2f
116
+ licenses:
117
+ - Apache-2.0
118
+ metadata: {}
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements: []
134
+ rubyforge_project:
135
+ rubygems_version: 2.2.2
136
+ signing_key:
137
+ specification_version: 4
138
+ summary: Riak 2.x plugin for Fluent event collector
139
+ test_files: []