fluent-plugin-cassandra-cql 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|