logstash-output-custom-solr 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/logstash/outputs/solr.rb +11 -70
- data/logstash-output-custom-solr.gemspec +2 -2
- data/spec/outputs/solr_spec.rb +9 -43
- metadata +3 -5
- data/spec/files/collections/collection1/state.json +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86a1d9be1b49383ea421b542e8f6b0e3c6c304b6508ec6e816d0b2909c8112a8
|
4
|
+
data.tar.gz: fbad8b4206fdb73820455507da630268669613dce94d8179a842a979188beb7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '099c1b1bb09b013a0933bccf58e0f6535114b7ce062ef7ab6dfc130bea3fb2de6bbffb381f2b8e3594fa007994397291f416b8645645ec1184d2a188fad40e55'
|
7
|
+
data.tar.gz: 227b28125f95de3a9c11b0767f40f80bca346f2c7085ecdc638a81b0feaea8eec19d1dc4f3184cd2cf6a22115f37a5e1ef029bee0168b00e3bd1e4e34f2de11e
|
@@ -22,15 +22,11 @@ class LogStash::Outputs::Solr < LogStash::Outputs::Base
|
|
22
22
|
# The SolrCloud collection name.
|
23
23
|
config :collection, :validate => :string, :default => 'collection1'
|
24
24
|
|
25
|
-
#
|
26
|
-
config :
|
27
|
-
# Ignore undefined fields in the Solr schema.xml.
|
28
|
-
config :ignore_undefined_fields, :validate => :boolean, :default => false
|
25
|
+
# Commit every batch?
|
26
|
+
config :commit, :validate => :boolean, :default => false
|
29
27
|
|
30
|
-
#
|
31
|
-
config :
|
32
|
-
# A field name of event timestamp in the Solr schema.xml (default event_timestamp).
|
33
|
-
config :timestamp_field, :validate => :string, :default => 'event_timestamp'
|
28
|
+
# Solr commitWithin parameter
|
29
|
+
config :commitWithin, :validate => :number, :default => 10000
|
34
30
|
|
35
31
|
# The batch size used in update.
|
36
32
|
config :flush_size, :validate => :number, :default => 100
|
@@ -77,39 +73,24 @@ class LogStash::Outputs::Solr < LogStash::Outputs::Base
|
|
77
73
|
def flush(events, close=false)
|
78
74
|
documents = []
|
79
75
|
|
80
|
-
#@fields = @defined_fields.nil? || @defined_fields.empty? ? get_fields : @defined_fields
|
81
|
-
|
82
|
-
#@unique_key = @unique_key_field.nil? ? get_unique_key : @unique_key_field
|
83
|
-
|
84
76
|
events.each do |event|
|
85
77
|
document = event.to_hash()
|
86
78
|
|
87
|
-
#unless document.has_key?(@unique_key) then
|
88
|
-
#document.merge!({@unique_key => SecureRandom.uuid})
|
89
|
-
#end
|
90
|
-
|
91
|
-
#unless document.has_key?(@timestamp_field) then
|
92
|
-
#document.merge!({@timestamp_field => document['@timestamp']})
|
93
|
-
#end
|
94
|
-
|
95
|
-
#if @ignore_undefined_fields then
|
96
|
-
#document.each_key do |key|
|
97
|
-
#unless @fields.include?(key) then
|
98
|
-
#document.delete(key)
|
99
|
-
#end
|
100
|
-
#end
|
101
|
-
#end
|
102
|
-
|
103
79
|
@logger.info 'Record: %s' % document.inspect
|
104
80
|
|
105
81
|
documents.push(document)
|
106
82
|
end
|
107
83
|
|
84
|
+
params = {}
|
85
|
+
if @commit
|
86
|
+
params[:commit] = true
|
87
|
+
end
|
88
|
+
params[:commitWithin] = @commitWithin
|
108
89
|
if @mode == MODE_STANDALONE then
|
109
|
-
@solr.add documents, :params =>
|
90
|
+
@solr.add documents, :params => params
|
110
91
|
@logger.info 'Added %d document(s) to Solr' % documents.count
|
111
92
|
elsif @mode == MODE_SOLRCLOUD then
|
112
|
-
@solr.add documents, collection: @collection, :params =>
|
93
|
+
@solr.add documents, collection: @collection, :params => params
|
113
94
|
@logger.info 'Added %d document(s) to Solr' % documents.count
|
114
95
|
end
|
115
96
|
|
@@ -124,44 +105,4 @@ class LogStash::Outputs::Solr < LogStash::Outputs::Base
|
|
124
105
|
end
|
125
106
|
end # def close
|
126
107
|
|
127
|
-
private
|
128
|
-
def get_unique_key
|
129
|
-
response = nil
|
130
|
-
|
131
|
-
if @mode == MODE_STANDALONE then
|
132
|
-
response = @solr.get 'schema/uniquekey'
|
133
|
-
elsif @mode == MODE_SOLRCLOUD then
|
134
|
-
response = @solr.get 'schema/uniquekey', collection: @collection
|
135
|
-
end
|
136
|
-
|
137
|
-
unique_key = response['uniqueKey']
|
138
|
-
@logger.info 'Unique key: #{unique_key}'
|
139
|
-
|
140
|
-
return unique_key
|
141
|
-
|
142
|
-
rescue Exception => e
|
143
|
-
@logger.warn("Unique key", :exception => e.inspect)
|
144
|
-
end # def get_unique_key
|
145
|
-
|
146
|
-
private
|
147
|
-
def get_fields
|
148
|
-
response = nil
|
149
|
-
|
150
|
-
if @mode == MODE_STANDALONE then
|
151
|
-
response = @solr.get 'schema/fields'
|
152
|
-
elsif @mode == MODE_SOLRCLOUD then
|
153
|
-
response = @solr.get 'schema/fields', collection: @collection
|
154
|
-
end
|
155
|
-
|
156
|
-
fields = []
|
157
|
-
response['fields'].each do |field|
|
158
|
-
fields.push(field['name'])
|
159
|
-
end
|
160
|
-
@logger.info 'Fields: #{fields}'
|
161
|
-
|
162
|
-
return fields
|
163
|
-
|
164
|
-
rescue Exception => e
|
165
|
-
@logger.warn("Could not get fields", :exception => e.inspect)
|
166
|
-
end # def get_fields
|
167
108
|
end # class LogStash::Outputs::Solr
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-custom-solr'
|
3
|
-
s.version = "0.1.
|
3
|
+
s.version = "0.1.6"
|
4
4
|
s.licenses = ["Apache License (2.0)"]
|
5
5
|
s.summary = "Logstash output plugin for sending data to Solr."
|
6
6
|
s.description = "Logstash output plugin for sending data to Solr. It supports SolrCloud, not only Standalone Solr."
|
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
|
24
24
|
s.add_runtime_dependency 'rsolr', '~> 1.1.2'
|
25
25
|
s.add_runtime_dependency 'zk'
|
26
|
-
s.add_runtime_dependency 'rsolr-cloud'
|
26
|
+
s.add_runtime_dependency 'rsolr-cloud-custom'
|
27
27
|
s.add_runtime_dependency 'stud'
|
28
28
|
|
29
29
|
s.add_development_dependency "logstash-core", ">= 1.60", "<= 2.99"
|
data/spec/outputs/solr_spec.rb
CHANGED
@@ -19,11 +19,9 @@ describe LogStash::Outputs::Solr do
|
|
19
19
|
'url' => 'http://localhost:8983/solr/collection1',
|
20
20
|
'zk_host' => 'localhost:2181/solr',
|
21
21
|
'collection' => 'collection1',
|
22
|
-
'
|
23
|
-
'
|
24
|
-
'
|
25
|
-
'timestamp_field' => 'event_timestamp',
|
26
|
-
'flush_size' => 100
|
22
|
+
'flush_size' => 100,
|
23
|
+
'commit' => false,
|
24
|
+
'commitWithin' => 10000
|
27
25
|
}
|
28
26
|
}
|
29
27
|
|
@@ -42,29 +40,19 @@ describe LogStash::Outputs::Solr do
|
|
42
40
|
expect(output.config['collection']).to eq('collection1')
|
43
41
|
end
|
44
42
|
|
45
|
-
it '
|
46
|
-
output = LogStash::Outputs::Solr.new(config)
|
47
|
-
expect(output.config['defined_fields']).to eq(['id', 'title'])
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'ignore_undefined_fields' do
|
51
|
-
output = LogStash::Outputs::Solr.new(config)
|
52
|
-
expect(output.config['ignore_undefined_fields']).to eq(true)
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'unique_key_field' do
|
43
|
+
it 'flush_size' do
|
56
44
|
output = LogStash::Outputs::Solr.new(config)
|
57
|
-
expect(output.config['
|
45
|
+
expect(output.config['flush_size']).to eq(100)
|
58
46
|
end
|
59
47
|
|
60
|
-
it '
|
48
|
+
it 'commit' do
|
61
49
|
output = LogStash::Outputs::Solr.new(config)
|
62
|
-
expect(output.config['
|
50
|
+
expect(output.config['commit']).to eq(false)
|
63
51
|
end
|
64
52
|
|
65
|
-
it '
|
53
|
+
it 'commitWithin' do
|
66
54
|
output = LogStash::Outputs::Solr.new(config)
|
67
|
-
expect(output.config['
|
55
|
+
expect(output.config['commitWithin']).to eq(10000)
|
68
56
|
end
|
69
57
|
end
|
70
58
|
|
@@ -72,10 +60,6 @@ describe LogStash::Outputs::Solr do
|
|
72
60
|
let(:config) {
|
73
61
|
{
|
74
62
|
'url' => 'http://localhost:8983/solr/collection1',
|
75
|
-
'defined_fields' => ['id', 'title'],
|
76
|
-
'ignore_undefined_fields' => true,
|
77
|
-
'unique_key_field' => 'id',
|
78
|
-
'timestamp_field' => 'event_timestamp',
|
79
63
|
'flush_size' => 100
|
80
64
|
}
|
81
65
|
}
|
@@ -102,10 +86,6 @@ describe LogStash::Outputs::Solr do
|
|
102
86
|
{
|
103
87
|
'zk_host' => 'localhost:3292/solr',
|
104
88
|
'collection' => 'collection1',
|
105
|
-
'defined_fields' => ['id', 'title'],
|
106
|
-
'ignore_undefined_fields' => true,
|
107
|
-
'unique_key_field' => 'id',
|
108
|
-
'timestamp_field' => 'event_timestamp',
|
109
89
|
'flush_size' => 100
|
110
90
|
}
|
111
91
|
}
|
@@ -123,10 +103,6 @@ describe LogStash::Outputs::Solr do
|
|
123
103
|
let(:config) {
|
124
104
|
{
|
125
105
|
'url' => 'http://localhost:8983/solr/collection1',
|
126
|
-
'defined_fields' => ['id', 'title'],
|
127
|
-
'ignore_undefined_fields' => true,
|
128
|
-
'unique_key_field' => 'id',
|
129
|
-
'timestamp_field' => 'event_timestamp',
|
130
106
|
'flush_size' => 100
|
131
107
|
}
|
132
108
|
}
|
@@ -159,10 +135,6 @@ describe LogStash::Outputs::Solr do
|
|
159
135
|
{
|
160
136
|
'zk_host' => 'localhost:3292/solr',
|
161
137
|
'collection' => 'collection1',
|
162
|
-
'defined_fields' => ['id', 'title'],
|
163
|
-
'ignore_undefined_fields' => true,
|
164
|
-
'unique_key_field' => 'id',
|
165
|
-
'timestamp_field' => 'event_timestamp',
|
166
138
|
'flush_size' => 100
|
167
139
|
}
|
168
140
|
}
|
@@ -194,15 +166,9 @@ describe LogStash::Outputs::Solr do
|
|
194
166
|
zk = ZK.new('localhost:3292')
|
195
167
|
delete_nodes(zk, '/solr')
|
196
168
|
create_nodes(zk, '/solr/live_nodes')
|
197
|
-
create_nodes(zk, '/solr/collections')
|
198
169
|
['localhost:8983_solr'].each do |node|
|
199
170
|
zk.create("/solr/live_nodes/#{node}", '', mode: :ephemeral)
|
200
171
|
end
|
201
|
-
['collection1'].each do |collection|
|
202
|
-
zk.create("/solr/collections/#{collection}")
|
203
|
-
json = File.read("spec/files/collections/#{collection}/state.json")
|
204
|
-
zk.create("/solr/collections/#{collection}/state.json", json, mode: :ephemeral)
|
205
|
-
end
|
206
172
|
end
|
207
173
|
|
208
174
|
def stop_zookeeper
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-custom-solr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Minoru Osuka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,7 +78,7 @@ dependencies:
|
|
78
78
|
- - ">="
|
79
79
|
- !ruby/object:Gem::Version
|
80
80
|
version: '0'
|
81
|
-
name: rsolr-cloud
|
81
|
+
name: rsolr-cloud-custom
|
82
82
|
prerelease: false
|
83
83
|
type: :runtime
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -177,7 +177,6 @@ files:
|
|
177
177
|
- README.md
|
178
178
|
- lib/logstash/outputs/solr.rb
|
179
179
|
- logstash-output-custom-solr.gemspec
|
180
|
-
- spec/files/collections/collection1/state.json
|
181
180
|
- spec/outputs/solr_spec.rb
|
182
181
|
homepage: https://github.com/mosuka/logstash-output-solr
|
183
182
|
licenses:
|
@@ -206,5 +205,4 @@ signing_key:
|
|
206
205
|
specification_version: 4
|
207
206
|
summary: Logstash output plugin for sending data to Solr.
|
208
207
|
test_files:
|
209
|
-
- spec/files/collections/collection1/state.json
|
210
208
|
- spec/outputs/solr_spec.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
{"collection1":{
|
2
|
-
"replicationFactor":"1",
|
3
|
-
"router":{"name":"compositeId"},
|
4
|
-
"maxShardsPerNode":"1",
|
5
|
-
"autoAddReplicas":"false",
|
6
|
-
"shards":{"shard1":{
|
7
|
-
"range":"80000000-7fffffff",
|
8
|
-
"state":"active",
|
9
|
-
"replicas":{"core_node1":{
|
10
|
-
"core":"collection1_shard1_replica1",
|
11
|
-
"base_url":"http://localhost:8983/solr",
|
12
|
-
"node_name":"localhost:8983_solr",
|
13
|
-
"state":"active",
|
14
|
-
"leader":"true"}}}}}}
|