logstash-input-mongodb 0.1.0 → 0.1.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 +4 -4
- data/lib/logstash/inputs/mongodb.rb +32 -21
- data/logstash-input-mongodb.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 797d63879b842bd324be17f4afafeb142cbc16d4
|
4
|
+
data.tar.gz: 8becb42077309b41d88a2b1808d00980433af012
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b0f0be58b4a1b57cd24d8560e5bb71649bf93775e33bc570c94ac30a39c2fecc2baa5e88f00e80058af69dc89594835ec90747fbe9cc196043337fd89b3043b
|
7
|
+
data.tar.gz: e97852fee59bba3b14739fef7a89f6fcde0e9f29a3eede187d006688c68f178ebe668b6c144cff1e4fa72ff4a82ab213835d7e19446bf557006b51eeda41219d
|
@@ -79,12 +79,24 @@ class LogStash::Inputs::MongoDB < LogStash::Inputs::Base
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
|
+
public
|
83
|
+
def init_placeholder(sqlitedb, since_table, mongodb, mongo_collection_name)
|
84
|
+
@logger.debug("init placeholder for #{since_table}_#{mongo_collection_name}")
|
85
|
+
since = sqlitedb[SINCE_TABLE]
|
86
|
+
mongo_collection = mongodb.collection(mongo_collection_name)
|
87
|
+
first_entry = mongo_collection.find({}, :sort => ['_id', Mongo::ASCENDING], :limit => 1).first
|
88
|
+
first_entry_id = first_entry['_id'].to_s
|
89
|
+
since.insert(:table => "#{since_table}_#{mongo_collection_name}", :place => first_entry_id)
|
90
|
+
return first_entry_id
|
91
|
+
end
|
92
|
+
|
82
93
|
public
|
83
94
|
def get_placeholder(sqlitedb, since_table, mongodb, mongo_collection_name)
|
84
95
|
since = sqlitedb[SINCE_TABLE]
|
85
96
|
x = since.where(:table => "#{since_table}_#{mongo_collection_name}")
|
86
97
|
if x[:place].nil? || x[:place] == 0
|
87
98
|
first_entry_id = init_placeholder(sqlitedb, since_table, mongodb, mongo_collection_name)
|
99
|
+
@logger.debug("FIRST ENTRY ID for #{mongo_collection_name} is #{first_entry_id}")
|
88
100
|
return first_entry_id
|
89
101
|
else
|
90
102
|
@logger.debug("placeholder already exists, it is #{x[:place]}")
|
@@ -92,20 +104,9 @@ class LogStash::Inputs::MongoDB < LogStash::Inputs::Base
|
|
92
104
|
end
|
93
105
|
end
|
94
106
|
|
95
|
-
public
|
96
|
-
def init_placeholder(sqlitedb, since_table, mongodb, mongo_collection_name)
|
97
|
-
@logger.debug("init placeholder for #{since_table}_#{mongo_collection_name}")
|
98
|
-
since = sqlitedb[SINCE_TABLE]
|
99
|
-
mongo_collection = mongodb.collection(mongo_collection_name)
|
100
|
-
first_entry = mongo_collection.find_one({})
|
101
|
-
first_entry_id = first_entry['_id'].to_s
|
102
|
-
since.insert(:table => "#{since_table}_#{mongo_collection_name}", :place => first_entry_id)
|
103
|
-
return first_entry_id
|
104
|
-
end
|
105
|
-
|
106
107
|
public
|
107
108
|
def update_placeholder(sqlitedb, since_table, mongo_collection_name, place)
|
108
|
-
|
109
|
+
#@logger.debug("updating placeholder for #{since_table}_#{mongo_collection_name} to #{place}")
|
109
110
|
since = sqlitedb[SINCE_TABLE]
|
110
111
|
since.where(:table => "#{since_table}_#{mongo_collection_name}").update(:place => place)
|
111
112
|
end
|
@@ -130,7 +131,9 @@ class LogStash::Inputs::MongoDB < LogStash::Inputs::Base
|
|
130
131
|
public
|
131
132
|
def get_cursor_for_collection(mongodb, mongo_collection_name, last_id_object, batch_size)
|
132
133
|
collection = mongodb.collection(mongo_collection_name)
|
133
|
-
|
134
|
+
# Need to make this sort by date in object id then get the first of the series
|
135
|
+
# db.events_20150320.find().limit(1).sort({ts:1})
|
136
|
+
return collection.find({:_id => {:$gte => last_id_object}}).limit(batch_size)
|
134
137
|
end
|
135
138
|
|
136
139
|
public
|
@@ -222,24 +225,23 @@ class LogStash::Inputs::MongoDB < LogStash::Inputs::Base
|
|
222
225
|
collection_name = collection[:name]
|
223
226
|
@logger.debug("collection_data is: #{@collection_data}")
|
224
227
|
last_id = @collection_data[index][:last_id]
|
225
|
-
|
228
|
+
#@logger.debug("last_id is #{last_id}", :index => index, :collection => collection_name)
|
226
229
|
# get batch of events starting at the last_place if it is set
|
227
230
|
last_id_object = BSON::ObjectId(last_id)
|
228
231
|
cursor = get_cursor_for_collection(@mongodb, collection_name, last_id_object, batch_size)
|
229
232
|
cursor.each do |doc|
|
230
|
-
@logger.debug("Date from mongo: #{doc['_id'].generation_time.to_s}")
|
231
233
|
logdate = DateTime.parse(doc['_id'].generation_time.to_s)
|
232
|
-
@logger.debug("logdate.iso8601: #{logdate.iso8601}")
|
233
234
|
event = LogStash::Event.new("host" => @host)
|
234
235
|
decorate(event)
|
235
236
|
event["logdate"] = logdate.iso8601
|
236
|
-
@logger.debug("type of doc is: "+doc.class.to_s)
|
237
237
|
log_entry = doc.to_h.to_s
|
238
238
|
log_entry['_id'] = log_entry['_id'].to_s
|
239
239
|
event["log_entry"] = log_entry
|
240
|
-
|
241
|
-
@logger.debug("
|
242
|
-
|
240
|
+
event["mongo_id"] = doc['_id'].to_s
|
241
|
+
@logger.debug("mongo_id: "+doc['_id'].to_s)
|
242
|
+
#@logger.debug("EVENT looks like: "+event.to_s)
|
243
|
+
#@logger.debug("Sent message: "+doc.to_h.to_s)
|
244
|
+
#@logger.debug("EVENT looks like: "+event.to_s)
|
243
245
|
# Extract the HOST_ID and PID from the MongoDB BSON::ObjectID
|
244
246
|
if @unpack_mongo_id
|
245
247
|
doc_obj_bin = doc['_id'].to_a.pack("C*").unpack("a4 a3 a2 a3")
|
@@ -253,6 +255,14 @@ class LogStash::Inputs::MongoDB < LogStash::Inputs::Base
|
|
253
255
|
# Flatten the JSON so that the data is usable in Kibana
|
254
256
|
flat_doc = flatten(doc)
|
255
257
|
# Check for different types of expected values and add them to the event
|
258
|
+
if flat_doc['info_message'] && (flat_doc['info_message'] =~ /collection stats: .+/)
|
259
|
+
# Some custom stuff I'm having to do to fix formatting in past logs...
|
260
|
+
sub_value = flat_doc['info_message'].sub("collection stats: ", "")
|
261
|
+
JSON.parse(sub_value).each do |k1,v1|
|
262
|
+
flat_doc["collection_stats_#{k1.to_s}"] = v1
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
256
266
|
flat_doc.each do |k,v|
|
257
267
|
# Check for an integer
|
258
268
|
if /\A[-+]?\d+[.][\d]+\z/ === v
|
@@ -303,11 +313,12 @@ class LogStash::Inputs::MongoDB < LogStash::Inputs::Base
|
|
303
313
|
|
304
314
|
queue << event
|
305
315
|
@collection_data[index][:last_id] = doc['_id'].to_s
|
306
|
-
@collection_data = update_watched_collections(@mongodb, @collection, @sqlitedb)
|
307
316
|
end
|
308
317
|
# Store the last-seen doc in the database
|
309
318
|
update_placeholder(@sqlitedb, since_table, collection_name, @collection_data[index][:last_id])
|
310
319
|
end
|
320
|
+
@logger.debug("Updating watch collections")
|
321
|
+
@collection_data = update_watched_collections(@mongodb, @collection, @sqlitedb)
|
311
322
|
|
312
323
|
# nothing found in that iteration
|
313
324
|
# sleep a bit
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-input-mongodb'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.1'
|
4
4
|
s.licenses = ['Apache License (2.0)']
|
5
5
|
s.summary = "This takes entries from mongodb as an input to logstash."
|
6
6
|
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-mongodb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Philip Hutchins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logstash
|