logstash-input-mongoprofile 0.1.15 → 0.1.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4b22c8ef7d441e7d6d7130e51f18990fe34f272
4
- data.tar.gz: 3534f85ef64368f518f18ac27cb259a64c862a46
3
+ metadata.gz: 91179ba0a1df249cae35aa208dbe2439272eb878
4
+ data.tar.gz: d5df9210fd7cf7f60331f7d0c0a229ff670a4e69
5
5
  SHA512:
6
- metadata.gz: 40e4941008a948ab16952549645d78b6a4194d566024aba8bb1b38b66c2c9d83643228d141e42a76e2399acf9927917ab632adb20499608ca0aba456ddb847b6
7
- data.tar.gz: f560de9428f0d222f5810218cc1782efe77bd74f9143d257621b7a2191f48d7b4b3db9e41c8ae54f39f5d963bb652364b5b8c88c683f74aa025d9c8e1b5e5307
6
+ metadata.gz: b18b777e1f8d2862b563ce5bf698415ab6983de2712e35753657c838c577573031236b4e9ceca02c4f58e08ce63516ecdf04cdb8dd50b5f5856d69862422c3a2
7
+ data.tar.gz: cf27b8bae36e7aad52b6f1a03ec117cecc9644a51350369314f773533b97f5bf14ab56f8036aea7ff737f79b376379b0841032b226ad196546fa4f378f99bb2e
@@ -75,11 +75,11 @@ class MongoAccessor
75
75
  end
76
76
 
77
77
  def get_documents_by_ts(date, limit)
78
- @collection.find({:ts => {:$gt => DateTime.parse(date)}, :client => {:$ne => @client_host}}).limit(limit).sort(:ts => -1)
78
+ @collection.find({:ts => {:$gt => DateTime.parse(date) + 0.00002}, :client => {:$ne => @client_host}}).limit(limit).sort(:ts => 1)
79
79
  end
80
80
 
81
81
  def get_documents(limit)
82
- @collection.find({:client => {:$ne => @client_host}}).limit(limit).sort(:ts => -1)
82
+ @collection.find({:client => {:$ne => @client_host}}).limit(limit).sort(:ts => 1)
83
83
  end
84
84
  end
85
85
 
@@ -103,10 +103,12 @@ class ProfileCollection
103
103
 
104
104
  yield @parser.parse(document)
105
105
  end
106
+
107
+ @documents = []
106
108
  end
107
109
 
108
110
  def get_last_document_date
109
- if @documents and @documents[-1] != nil
111
+ if @documents != nil and @documents[-1] != nil
110
112
  @documents[-1]['ts']
111
113
  else
112
114
  nil
@@ -183,9 +185,9 @@ class Controller
183
185
 
184
186
  if profile_collection.get_last_document_date != nil
185
187
  @last_value_store.save_last_value(profile_collection.get_last_document_date)
186
- end
187
- @logger.info('Nothing to get...')
188
188
  else
189
+ @logger.info('Nothing to get...')
190
+ end
189
191
 
190
192
  profile_collection
191
193
  end
@@ -1,3 +1,176 @@
1
- require('date')
2
- a = DateTime.parse("2017-06-22 08:14:12 UTC\n")
3
- puts a
1
+ require 'mongo'
2
+
3
+ class Test
4
+ def each
5
+ arr = [1, 2, 3]
6
+
7
+ arr.each do |i|
8
+ yield i
9
+ end
10
+
11
+ puts 'end each'
12
+ end
13
+ end
14
+
15
+ test = Test.new
16
+
17
+ test.each do |i|
18
+ puts i
19
+ end
20
+
21
+ class EventMock
22
+ def set(arg)
23
+ puts arg
24
+ end
25
+ end
26
+
27
+ class LoggerMock
28
+ def info(arg)
29
+ puts arg
30
+ end
31
+
32
+ def debug(arg)
33
+ puts arg
34
+ end
35
+ end
36
+
37
+
38
+ class MongoAccessor
39
+ def initialize(url, collection, client_host)
40
+ connection = Mongo::Client.new(url)
41
+
42
+ @mongodb = connection.database
43
+ @collection = @mongodb.collection(collection)
44
+ @client_host = client_host
45
+ end
46
+
47
+ def get_documents_by_ts(date, limit)
48
+ @collection.find({:ts => {:$gt => DateTime.parse(date) + 0.00002}, :client => {:$ne => @client_host}}).limit(limit).sort(:ts => 1)
49
+ end
50
+
51
+ def get_documents(limit)
52
+ @collection.find({:client => {:$ne => @client_host}}).limit(limit).sort(:ts => 1)
53
+ end
54
+ end
55
+
56
+ class ProfileCollection
57
+ def initialize(documents, parser, generate_id)
58
+ @generate_id = generate_id
59
+ @documents = []
60
+
61
+ documents.each do |document|
62
+ @documents.push(document)
63
+ puts document['ts']
64
+ end
65
+
66
+ @parser = parser
67
+ end
68
+
69
+ def each
70
+ @documents.each do |document|
71
+ if @generate_id
72
+ document['_id'] = generate_id.to_s
73
+ end
74
+
75
+ yield @parser.parse(document)
76
+ end
77
+
78
+ @documents = []
79
+ end
80
+
81
+ def get_last_document_date
82
+ if @documents != nil and @documents[-1] != nil
83
+ @documents[-1]['ts']
84
+ else
85
+ nil
86
+ end
87
+ end
88
+
89
+ def length
90
+ @documents.length
91
+ end
92
+
93
+ private
94
+ def generate_id
95
+ # noinspection RubyArgCount
96
+ BSON::ObjectId.new
97
+ end
98
+ end
99
+
100
+ class DocumentParser
101
+ def initialize(host, logger)
102
+ @host = host
103
+ @logger = logger
104
+ end
105
+
106
+ def parse(document)
107
+ @logger.info('Start documents parsing')
108
+ event = LogStash::Event.new('host' => @host)
109
+
110
+ document.each do |key, value|
111
+ @logger.debug("Try set event field key: #{key} value: #{value}")
112
+ event.set(key, value)
113
+ end
114
+
115
+ event
116
+ end
117
+ end
118
+
119
+ class LastValueStore
120
+ def initialize(path, name)
121
+ @file_full_name = "#{path}/#{name}"
122
+ end
123
+
124
+ def save_last_value(value)
125
+ file = File.open(@file_full_name, 'a+')
126
+
127
+ file.truncate(0)
128
+ file.puts(value)
129
+
130
+ file.close
131
+ end
132
+
133
+ def get_last_value
134
+ File.read(@file_full_name)
135
+ end
136
+ end
137
+
138
+ class Controller
139
+ def initialize(event, url, collection, limit, path, client_host, logger, generate_id)
140
+ @mongo_accessor = MongoAccessor.new(url, collection, client_host)
141
+ @last_value_store = LastValueStore.new(path, collection)
142
+ @document_parser = DocumentParser.new(event, logger)
143
+ @generate_id = generate_id
144
+ @limit = limit
145
+ @logger = logger
146
+ end
147
+
148
+ def get_next_events
149
+ last_date_value = @last_value_store.get_last_value
150
+
151
+ if last_date_value == ''
152
+ @logger.info('Getting documents from mongo first time')
153
+ documents = @mongo_accessor.get_documents(@limit)
154
+ else
155
+ @logger.info("Getting documents from mongo start at #{last_date_value}")
156
+ documents = @mongo_accessor.get_documents_by_ts(last_date_value, @limit)
157
+ end
158
+
159
+ profile_collection = ProfileCollection.new(documents, @document_parser, @generate_id)
160
+
161
+ if profile_collection.get_last_document_date != nil
162
+ @last_value_store.save_last_value(profile_collection.get_last_document_date)
163
+ else
164
+ @logger.info('Nothing to get...')
165
+ end
166
+
167
+ profile_collection
168
+ end
169
+ end
170
+
171
+ controller = Controller.new(EventMock.new, 'mongodb://192.168.1.37/eleet-v2-dev', 'system.profile', 10, '/home/artem/', '192.168.1.35', LoggerMock.new, false)
172
+
173
+ while true
174
+ events = controller.get_next_events
175
+ puts events.length
176
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-input-mongoprofile'
3
- s.version = '0.1.15'
3
+ s.version = '0.1.16'
4
4
  s.licenses = ['Apache License (2.0)']
5
5
  s.summary = 'MongoDB system.profile input plugin'
6
6
  s.description = 'MongoDB system.profile input plugin'
@@ -5,7 +5,7 @@ require "logstash/inputs/mongoprofile"
5
5
  describe LogStash::Inputs::Mongoprofile do
6
6
 
7
7
  it_behaves_like "an interruptible input plugin" do
8
- let(:config) { { "interval" => 100 } }
8
+ let(:config) { { "interval" => 100, "url" => "mongodb://192.168.1.37/eleet-v2-dev", "path" => "/home/artem"} }
9
9
  end
10
10
 
11
11
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-mongoprofile
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
4
+ version: 0.1.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Antonov