fluent-plugin-cassandra-cql 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.
- data/.rspec +4 -0
- data/.simplecov +5 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +20 -0
- data/README.md +54 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/fluent-plugin-cassandra-cql.gemspec +69 -0
- data/lib/fluent/plugin/out_cassandra.rb +68 -0
- data/spec/cassandra_output_spec.rb +138 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +9 -0
- metadata +174 -0
data/.rspec
ADDED
data/.simplecov
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
# Example:
|
4
|
+
# gem "activesupport", ">= 2.3.5"
|
5
|
+
gem "fluentd", ">=0.10.27"
|
6
|
+
gem "cassandra-cql", ">=1.1.3"
|
7
|
+
|
8
|
+
# Add dependencies to develop your gem here.
|
9
|
+
# Include everything needed to run rake, tests, features, etc.
|
10
|
+
group :development, :test do
|
11
|
+
gem "rdoc", ">= 3.12"
|
12
|
+
gem "bundler", ">= 1.0.0"
|
13
|
+
gem "jeweler", ">= 1.8.4"
|
14
|
+
gem "rspec", ">= 0"
|
15
|
+
gem "simplecov"
|
16
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012 obie quelland
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# Cassandra plugin for Fluentd
|
2
|
+
|
3
|
+
Cassandra output plugin for Fluentd.
|
4
|
+
|
5
|
+
Implemented using the cassandra-cql gem and targets CQL 3.0.0
|
6
|
+
and Cassandra 1.1.x
|
7
|
+
|
8
|
+
# Raison d'être
|
9
|
+
Currently, there's another Fluentd Cassandra plugin [see
|
10
|
+
here](https://github.com/tomitakazutaka/fluent-plugin-cassandra)
|
11
|
+
|
12
|
+
It's implemented via the Twitter Cassandra gem, which:
|
13
|
+
|
14
|
+
a) doesn't provide all of the niceties of CQL, i.e., create/alter/delete keyspaces/columnfamilies
|
15
|
+
b) doesn't allow a desktop client to make a call to a Cassandra instance hosted on EC2
|
16
|
+
(the gem resolves a cassandra node's IP address to its private EC2
|
17
|
+
IP address (ex: 10.x.x.x), which isn't accessible outside EC2)
|
18
|
+
|
19
|
+
# Installation
|
20
|
+
|
21
|
+
via RubyGems
|
22
|
+
|
23
|
+
gem install fluent-plugin-cassandra-cql
|
24
|
+
|
25
|
+
# Quick Start
|
26
|
+
|
27
|
+
## Cassandra Configuration
|
28
|
+
# create keyspace (via CQL)
|
29
|
+
CREATE KEYSPACE \"FluentdLoggers\" WITH strategy_class='org.apache.cassandra.locator.SimpleStrategy' AND strategy_options:replication_factor=1;
|
30
|
+
|
31
|
+
# create table (column family)
|
32
|
+
CREATE TABLE events (id varchar, ts bigint, payload text, PRIMARY KEY (id, ts)) WITH CLUSTERING ORDER BY (ts DESC);
|
33
|
+
|
34
|
+
|
35
|
+
## Fluentd.conf Configuration
|
36
|
+
<match cassandra.**>
|
37
|
+
type cassandra
|
38
|
+
host 127.0.0.1 # cassandra hostname.
|
39
|
+
port 9160 # cassandra thrft port.
|
40
|
+
keyspace FluentdLoggers # cassandra keyspace
|
41
|
+
columnfamily events # cassandra column family
|
42
|
+
ttl 60 # cassandra ttl *optional => default is 0*
|
43
|
+
</match>
|
44
|
+
|
45
|
+
# Tests
|
46
|
+
|
47
|
+
rake rspec
|
48
|
+
|
49
|
+
NOTE: requires that cassandra be installed on the machine running the tests
|
50
|
+
|
51
|
+
# TODOs
|
52
|
+
1) make host and port configurable for tests
|
53
|
+
2) make schema definition configurable
|
54
|
+
3) add rake task to generate keyspace and columnfamily
|
data/Rakefile
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "fluent-plugin-cassandra-cql"
|
18
|
+
gem.homepage = "http://github.com/obieq/fluent-plugin-cassandra-cql"
|
19
|
+
gem.license = "MIT"
|
20
|
+
gem.summary = %Q{Fluent output plugin for Cassandra}
|
21
|
+
gem.description = %Q{Fluent output plugin for Cassandra via CQL version 3.0.0}
|
22
|
+
gem.email = "quelland@gmail.com"
|
23
|
+
gem.authors = ["obie quelland"]
|
24
|
+
# dependencies defined in Gemfile
|
25
|
+
end
|
26
|
+
Jeweler::RubygemsDotOrgTasks.new
|
27
|
+
|
28
|
+
require 'rdoc/task'
|
29
|
+
Rake::RDocTask.new do |rdoc|
|
30
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
31
|
+
|
32
|
+
rdoc.rdoc_dir = 'rdoc'
|
33
|
+
rdoc.title = "fluent-plugin-cassandra-cql #{version}"
|
34
|
+
rdoc.rdoc_files.include('README*')
|
35
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
36
|
+
end
|
37
|
+
|
38
|
+
# Get spec rake tasks working in RSpec 2.0
|
39
|
+
require 'rspec/core/rake_task'
|
40
|
+
|
41
|
+
desc 'Default: run specs.'
|
42
|
+
task :default => :spec
|
43
|
+
|
44
|
+
desc "Run specs"
|
45
|
+
RSpec::Core::RakeTask.new do |t|
|
46
|
+
|
47
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "fluent-plugin-cassandra-cql"
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["obie quelland"]
|
12
|
+
s.date = "2012-11-07"
|
13
|
+
s.description = "Fluent output plugin for Cassandra via CQL version 3.0.0"
|
14
|
+
s.email = "quelland@gmail.com"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".rspec",
|
21
|
+
".simplecov",
|
22
|
+
"Gemfile",
|
23
|
+
"LICENSE.txt",
|
24
|
+
"README.md",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"fluent-plugin-cassandra-cql.gemspec",
|
28
|
+
"lib/fluent/plugin/out_cassandra.rb",
|
29
|
+
"spec/cassandra_output_spec.rb",
|
30
|
+
"spec/spec.opts",
|
31
|
+
"spec/spec_helper.rb"
|
32
|
+
]
|
33
|
+
s.homepage = "http://github.com/obieq/fluent-plugin-cassandra-cql"
|
34
|
+
s.licenses = ["MIT"]
|
35
|
+
s.require_paths = ["lib"]
|
36
|
+
s.rubygems_version = "1.8.19"
|
37
|
+
s.summary = "Fluent output plugin for Cassandra"
|
38
|
+
|
39
|
+
if s.respond_to? :specification_version then
|
40
|
+
s.specification_version = 3
|
41
|
+
|
42
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
43
|
+
s.add_runtime_dependency(%q<fluentd>, [">= 0.10.27"])
|
44
|
+
s.add_runtime_dependency(%q<cassandra-cql>, [">= 1.1.3"])
|
45
|
+
s.add_development_dependency(%q<rdoc>, [">= 3.12"])
|
46
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
|
47
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.8.4"])
|
48
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
49
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
50
|
+
else
|
51
|
+
s.add_dependency(%q<fluentd>, [">= 0.10.27"])
|
52
|
+
s.add_dependency(%q<cassandra-cql>, [">= 1.1.3"])
|
53
|
+
s.add_dependency(%q<rdoc>, [">= 3.12"])
|
54
|
+
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
55
|
+
s.add_dependency(%q<jeweler>, [">= 1.8.4"])
|
56
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
57
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
58
|
+
end
|
59
|
+
else
|
60
|
+
s.add_dependency(%q<fluentd>, [">= 0.10.27"])
|
61
|
+
s.add_dependency(%q<cassandra-cql>, [">= 1.1.3"])
|
62
|
+
s.add_dependency(%q<rdoc>, [">= 3.12"])
|
63
|
+
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
64
|
+
s.add_dependency(%q<jeweler>, [">= 1.8.4"])
|
65
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
66
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'cassandra-cql'
|
2
|
+
require 'msgpack'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Fluent
|
6
|
+
|
7
|
+
class CassandraOutput < BufferedOutput
|
8
|
+
Fluent::Plugin.register_output('cassandra', self)
|
9
|
+
include SetTimeKeyMixin
|
10
|
+
include SetTagKeyMixin
|
11
|
+
|
12
|
+
config_param :host, :string
|
13
|
+
config_param :port, :integer
|
14
|
+
config_param :keyspace, :string
|
15
|
+
config_param :columnfamily, :string
|
16
|
+
config_param :ttl, :integer, :default => 0
|
17
|
+
|
18
|
+
def connection
|
19
|
+
@connection ||= get_connection
|
20
|
+
end
|
21
|
+
|
22
|
+
#config_set_default :include_time_key, true
|
23
|
+
#config_set_default :include_tag_key, true
|
24
|
+
#config_set_default :time_format, "%Y%m%d%H%M%S"
|
25
|
+
|
26
|
+
def configure(conf)
|
27
|
+
super
|
28
|
+
|
29
|
+
raise ConfigError, "'Host' is required by Cassandra output (ex: localhost, 127.0.0.1, ec2-54-242-141-252.compute-1.amazonaws.com" unless self.keyspace = conf['keyspace']
|
30
|
+
raise ConfigError, "'Port' is required by Cassandra output (ex: 9160)" unless self.columnfamily = conf['columnfamily']
|
31
|
+
raise ConfigError, "'Keyspace' is required by Cassandra output (ex: FluentdLoggers)" unless self.keyspace = conf['keyspace']
|
32
|
+
raise ConfigError, "'ColumnFamily' is required by Cassandra output (ex: events)" unless self.columnfamily = conf['columnfamily']
|
33
|
+
|
34
|
+
#@host = conf.has_key?('host') ? conf['host'] : 'localhost'
|
35
|
+
#@port = conf.has_key?('port') ? conf['port'] : 9160
|
36
|
+
end
|
37
|
+
|
38
|
+
def start
|
39
|
+
super
|
40
|
+
connection
|
41
|
+
end
|
42
|
+
|
43
|
+
def shutdown
|
44
|
+
super
|
45
|
+
end
|
46
|
+
|
47
|
+
def format(tag, time, record)
|
48
|
+
record.to_msgpack
|
49
|
+
end
|
50
|
+
|
51
|
+
def write(chunk)
|
52
|
+
chunk.msgpack_each { |record|
|
53
|
+
@connection.execute("INSERT INTO #{self.columnfamily} (id, ts, payload) " +
|
54
|
+
"VALUES ('#{record['tag']}', #{record['time']}, '#{record.to_json}') " +
|
55
|
+
"USING TTL #{self.ttl}")
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def get_connection
|
62
|
+
connection_string = "#{self.host}:#{self.port}"
|
63
|
+
::CassandraCQL::Database.new(connection_string, {:keyspace => "\"#{self.keyspace}\"", :cql_version => "3.0.0"})
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
Fluent::Test.setup
|
3
|
+
|
4
|
+
CONFIG = %[
|
5
|
+
host 127.0.0.1
|
6
|
+
port 9160
|
7
|
+
keyspace FluentdLoggers
|
8
|
+
columnfamily events
|
9
|
+
]
|
10
|
+
|
11
|
+
describe Fluent::CassandraOutput do
|
12
|
+
let(:driver) { Fluent::Test::BufferedOutputTestDriver.new(Fluent::CassandraOutput, 'test') }
|
13
|
+
|
14
|
+
after(:each) do
|
15
|
+
d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::CassandraOutput, 'test')
|
16
|
+
d.configure(CONFIG)
|
17
|
+
d.instance.connection.execute("TRUNCATE events")
|
18
|
+
end
|
19
|
+
|
20
|
+
def add_ttl_to_config(ttl)
|
21
|
+
return CONFIG + %[ ttl #{ttl}\n]
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'configuring' do
|
25
|
+
|
26
|
+
it 'should be properly configured' do
|
27
|
+
driver.configure(CONFIG)
|
28
|
+
driver.tag.should eq('test')
|
29
|
+
driver.instance.host.should eq('127.0.0.1')
|
30
|
+
driver.instance.port.should eq(9160)
|
31
|
+
driver.instance.keyspace.should eq('FluentdLoggers')
|
32
|
+
driver.instance.columnfamily.should eq('events')
|
33
|
+
driver.instance.ttl.should eq(0)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should configure ttl' do
|
37
|
+
ttl = 20
|
38
|
+
driver.configure(add_ttl_to_config(ttl))
|
39
|
+
driver.instance.ttl.should eq(ttl)
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'exceptions' do
|
43
|
+
|
44
|
+
it 'should raise an exception if host is not configured' do
|
45
|
+
expect { driver.configure(CONFIG.gsub("host", "invalid_config_name")) }.to raise_error Fluent::ConfigError
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should raise an exception if port is not configured' do
|
49
|
+
expect { driver.configure(CONFIG.gsub("port", "invalid_config_name")) }.to raise_error Fluent::ConfigError
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should raise an exception if keyspace is not configured' do
|
53
|
+
expect { driver.configure(CONFIG.gsub("keyspace", "invalid_config_name")) }.to raise_error Fluent::ConfigError
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should raise an exception if columnfamily is not configured' do
|
57
|
+
expect { driver.configure(CONFIG.gsub("columnfamily", "invalid_config_name")) }.to raise_error Fluent::ConfigError
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'fluentd logging' do
|
65
|
+
|
66
|
+
it 'should start' do
|
67
|
+
driver.configure(CONFIG)
|
68
|
+
driver.instance.start
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should shutdown' do
|
72
|
+
driver.configure(CONFIG)
|
73
|
+
driver.instance.start
|
74
|
+
driver.instance.shutdown
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should format' do
|
78
|
+
driver.configure(CONFIG)
|
79
|
+
time = Time.now.to_i
|
80
|
+
record = {'tag' => 'test', 'time' => time, 'a' => 1}
|
81
|
+
|
82
|
+
driver.emit(record)
|
83
|
+
driver.expect_format(record.to_msgpack)
|
84
|
+
driver.run
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should write' do
|
88
|
+
driver.configure(CONFIG)
|
89
|
+
tag1 = "test1"
|
90
|
+
tag2 = "test2"
|
91
|
+
time1 = Time.now.to_i
|
92
|
+
time2 = Time.now.to_i + 2
|
93
|
+
record1 = {'tag' => tag1, 'time' => time1, 'a' => 10, 'b' => 'Tesla'}
|
94
|
+
record2 = {'tag' => tag2, 'time' => time2, 'a' => 20, 'b' => 'Edison'}
|
95
|
+
records = [record1, record2]
|
96
|
+
|
97
|
+
driver.emit(records[0])
|
98
|
+
driver.emit(records[1])
|
99
|
+
driver.run # persists to cassandra
|
100
|
+
|
101
|
+
# query cassandra to verify data was correctly persisted
|
102
|
+
row_num = records.count # non-zero based index
|
103
|
+
events = driver.instance.connection.execute("SELECT * FROM events")
|
104
|
+
events.rows.should eq(records.count)
|
105
|
+
events.fetch do | event | # events should be sorted desc by tag, then time
|
106
|
+
row_num -= 1 # zero-based index
|
107
|
+
hash = event.to_hash
|
108
|
+
hash['id'].should eq(records[row_num]['tag'])
|
109
|
+
hash['ts'].should eq(records[row_num]['time'])
|
110
|
+
hash['payload'].should eq(records[row_num].to_json)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should not locate event after ttl has expired' do
|
115
|
+
time = Time.now.to_i
|
116
|
+
tag = "ttl_test"
|
117
|
+
ttl = 1 # set ttl to 1 second
|
118
|
+
|
119
|
+
driver.configure(add_ttl_to_config(ttl))
|
120
|
+
driver.emit({'tag' => tag, 'time' => time, 'a' => 1})
|
121
|
+
driver.run
|
122
|
+
|
123
|
+
# verify record... should return in less than one sec if hitting
|
124
|
+
# cassandra running on localhost
|
125
|
+
events = driver.instance.connection.execute("SELECT * FROM events where ts = #{time}")
|
126
|
+
events.rows.should eq(1)
|
127
|
+
|
128
|
+
# now, sleep long enough for the event to be expired from cassandra
|
129
|
+
sleep(ttl)
|
130
|
+
|
131
|
+
# re-query and verify that no events were returned
|
132
|
+
events = driver.instance.connection.execute("SELECT * FROM events where ts = #{time}")
|
133
|
+
events.rows.should eq(0)
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
end # CassandraOutput
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fluent-plugin-cassandra-cql
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- obie quelland
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: fluentd
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.10.27
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.10.27
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: cassandra-cql
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.1.3
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.1.3
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rdoc
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.12'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.12'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: bundler
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.0.0
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.0.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: jeweler
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 1.8.4
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.8.4
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rspec
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: simplecov
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: Fluent output plugin for Cassandra via CQL version 3.0.0
|
127
|
+
email: quelland@gmail.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files:
|
131
|
+
- LICENSE.txt
|
132
|
+
- README.md
|
133
|
+
files:
|
134
|
+
- .rspec
|
135
|
+
- .simplecov
|
136
|
+
- Gemfile
|
137
|
+
- LICENSE.txt
|
138
|
+
- README.md
|
139
|
+
- Rakefile
|
140
|
+
- VERSION
|
141
|
+
- fluent-plugin-cassandra-cql.gemspec
|
142
|
+
- lib/fluent/plugin/out_cassandra.rb
|
143
|
+
- spec/cassandra_output_spec.rb
|
144
|
+
- spec/spec.opts
|
145
|
+
- spec/spec_helper.rb
|
146
|
+
homepage: http://github.com/obieq/fluent-plugin-cassandra-cql
|
147
|
+
licenses:
|
148
|
+
- MIT
|
149
|
+
post_install_message:
|
150
|
+
rdoc_options: []
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
segments:
|
160
|
+
- 0
|
161
|
+
hash: -709806578343991657
|
162
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
|
+
none: false
|
164
|
+
requirements:
|
165
|
+
- - ! '>='
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
requirements: []
|
169
|
+
rubyforge_project:
|
170
|
+
rubygems_version: 1.8.19
|
171
|
+
signing_key:
|
172
|
+
specification_version: 3
|
173
|
+
summary: Fluent output plugin for Cassandra
|
174
|
+
test_files: []
|