logstash-input-http_poller 2.1.0 → 3.0.0
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/CHANGELOG.md +2 -0
- data/Gemfile +2 -0
- data/lib/logstash/inputs/http_poller.rb +7 -57
- data/logstash-input-http_poller.gemspec +2 -4
- data/spec/inputs/http_poller_spec.rb +11 -177
- metadata +25 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c10834cd3780892bc9232ffb268b691d9f19d0e
|
4
|
+
data.tar.gz: d01112b2050202711def2a766c2d993bb4ebab66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e19ccee8c2c9ef27489ce79fa020784d0b6f348aea0ff90921f80050ab709dcec8e96f94792c5b3b39ea7c69e844430969598043060ef3ae34c383ac1145d31
|
7
|
+
data.tar.gz: c292ca93af6d0ded87971e2f3cb529b48e1fbd401c9a6abdab762c588f5e1bbc5e8a959d38d0c8737066d1714470821c504e5a66d446d1c75cd02dc19adbea19
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
## 3.0.0
|
2
|
+
- Update the plugin to the version 2.0 of the plugin api, this change is required for Logstash 5.0 compatibility. See https://github.com/elastic/logstash/issues/5141
|
1
3
|
# 2.0.5
|
2
4
|
- Depend on logstash-core-plugin-api instead of logstash-core, removing the need to mass update plugins on major releases of logstash
|
3
5
|
# 2.0.4
|
data/Gemfile
CHANGED
@@ -4,7 +4,6 @@ require "logstash/namespace"
|
|
4
4
|
require "logstash/plugin_mixins/http_client"
|
5
5
|
require "socket" # for Socket.gethostname
|
6
6
|
require "manticore"
|
7
|
-
require "rufus/scheduler"
|
8
7
|
|
9
8
|
# This Logstash input plugin allows you to call an HTTP API, decode the output of it into event(s), and
|
10
9
|
# send them on their merry way. The idea behind this plugins came from a need to read springboot
|
@@ -34,8 +33,7 @@ require "rufus/scheduler"
|
|
34
33
|
# }
|
35
34
|
# }
|
36
35
|
# request_timeout => 60
|
37
|
-
#
|
38
|
-
# schedule => { cron => "* * * * * UTC"}
|
36
|
+
# interval => 60
|
39
37
|
# codec => "json"
|
40
38
|
# # A hash of request metadata info (timing, response headers, etc.) will be sent here
|
41
39
|
# metadata_target => "http_poller_metadata"
|
@@ -61,20 +59,7 @@ class LogStash::Inputs::HTTP_Poller < LogStash::Inputs::Base
|
|
61
59
|
config :urls, :validate => :hash, :required => true
|
62
60
|
|
63
61
|
# How often (in seconds) the urls will be called
|
64
|
-
|
65
|
-
# If both interval and schedule options are specified, interval
|
66
|
-
# option takes higher precedence
|
67
|
-
config :interval, :validate => :number, :deprecated => true
|
68
|
-
|
69
|
-
# Schedule of when to periodically poll from the urls
|
70
|
-
# Format: A hash with
|
71
|
-
# + key: "cron" | "every" | "in" | "at"
|
72
|
-
# + value: string
|
73
|
-
# Examples:
|
74
|
-
# a) { "every" => "1h" }
|
75
|
-
# b) { "cron" => "* * * * * UTC" }
|
76
|
-
# See: rufus/scheduler for details about different schedule options and value string format
|
77
|
-
config :schedule, :validate => :hash
|
62
|
+
config :interval, :validate => :number, :required => true
|
78
63
|
|
79
64
|
# Define the target field for placing the received data. If this setting is omitted, the data will be stored at the root (top level) of the event.
|
80
65
|
config :target, :validate => :string
|
@@ -85,19 +70,17 @@ class LogStash::Inputs::HTTP_Poller < LogStash::Inputs::Base
|
|
85
70
|
config :metadata_target, :validate => :string, :default => '@metadata'
|
86
71
|
|
87
72
|
public
|
88
|
-
Schedule_types = %w(cron every at in)
|
89
73
|
def register
|
90
74
|
@host = Socket.gethostname.force_encoding(Encoding::UTF_8)
|
91
75
|
|
92
76
|
@logger.info("Registering http_poller Input", :type => @type,
|
93
|
-
:urls => @urls, :interval => @interval, :
|
77
|
+
:urls => @urls, :interval => @interval, :timeout => @timeout)
|
94
78
|
|
95
79
|
setup_requests!
|
96
80
|
end
|
97
81
|
|
98
82
|
def stop
|
99
83
|
Stud.stop!(@interval_thread) if @interval_thread
|
100
|
-
@scheduler.stop if @scheduler
|
101
84
|
end
|
102
85
|
|
103
86
|
private
|
@@ -150,46 +133,13 @@ class LogStash::Inputs::HTTP_Poller < LogStash::Inputs::Base
|
|
150
133
|
|
151
134
|
public
|
152
135
|
def run(queue)
|
153
|
-
#interval or schedule must be provided. Must be exclusively either one. Not neither. Not both.
|
154
|
-
raise LogStash::ConfigurationError, "Invalid config. Neither interval nor schedule was specified." \
|
155
|
-
unless @interval || @schedule
|
156
|
-
raise LogStash::ConfigurationError, "Invalid config. Specify only interval or schedule. Not both." \
|
157
|
-
if @interval && @schedule
|
158
|
-
|
159
|
-
if @interval
|
160
|
-
setup_interval(queue)
|
161
|
-
elsif @schedule
|
162
|
-
setup_schedule(queue)
|
163
|
-
else
|
164
|
-
#should not reach here
|
165
|
-
raise LogStash::ConfigurationError, "Invalid config. Neither interval nor schedule was specified."
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
private
|
170
|
-
def setup_interval(queue)
|
171
136
|
@interval_thread = Thread.current
|
172
137
|
Stud.interval(@interval) do
|
173
138
|
run_once(queue)
|
174
139
|
end
|
175
140
|
end
|
176
141
|
|
177
|
-
|
178
|
-
#schedule hash must contain exactly one of the allowed keys
|
179
|
-
msg_invalid_schedule = "Invalid config. schedule hash must contain " +
|
180
|
-
"exactly one of the following keys - cron, at, every or in"
|
181
|
-
raise Logstash::ConfigurationError, msg_invalid_schedule if @schedule.keys.length !=1
|
182
|
-
schedule_type = @schedule.keys.first
|
183
|
-
schedule_value = @schedule[schedule_type]
|
184
|
-
raise LogStash::ConfigurationError, msg_invalid_schedule unless Schedule_types.include?(schedule_type)
|
185
|
-
|
186
|
-
@scheduler = Rufus::Scheduler.new(:max_work_threads => 1)
|
187
|
-
#as of v3.0.9, :first_in => :now doesn't work. Use the following workaround instead
|
188
|
-
opts = schedule_type == "every" ? { :first_in => 0.01 } : {}
|
189
|
-
@scheduler.send(schedule_type, schedule_value, opts) { run_once(queue) }
|
190
|
-
@scheduler.join
|
191
|
-
end
|
192
|
-
|
142
|
+
private
|
193
143
|
def run_once(queue)
|
194
144
|
@requests.each do |name, request|
|
195
145
|
request_async(queue, name, request)
|
@@ -244,13 +194,13 @@ class LogStash::Inputs::HTTP_Poller < LogStash::Inputs::Base
|
|
244
194
|
|
245
195
|
# This is also in the metadata, but we send it anyone because we want this
|
246
196
|
# persisted by default, whereas metadata isn't. People don't like mysterious errors
|
247
|
-
event
|
197
|
+
event.set("http_request_failure", {
|
248
198
|
"request" => structure_request(request),
|
249
199
|
"name" => name,
|
250
200
|
"error" => exception.to_s,
|
251
201
|
"backtrace" => exception.backtrace,
|
252
202
|
"runtime_seconds" => execution_time
|
253
|
-
}
|
203
|
+
})
|
254
204
|
|
255
205
|
queue << event
|
256
206
|
rescue StandardError, java.lang.Exception => e
|
@@ -266,7 +216,7 @@ class LogStash::Inputs::HTTP_Poller < LogStash::Inputs::Base
|
|
266
216
|
private
|
267
217
|
def apply_metadata(event, name, request, response=nil, execution_time=nil)
|
268
218
|
return unless @metadata_target
|
269
|
-
event
|
219
|
+
event.set(@metadata_target, event_metadata(name, request, response, execution_time))
|
270
220
|
end
|
271
221
|
|
272
222
|
private
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-input-http_poller'
|
3
|
-
s.version
|
3
|
+
s.version = '3.0.0'
|
4
4
|
s.licenses = ['Apache License (2.0)']
|
5
5
|
s.summary = "Poll HTTP endpoints with 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/logstash-plugin install gemname. This gem is not a stand-alone program"
|
@@ -18,14 +18,12 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
|
19
19
|
|
20
20
|
# Gem dependencies
|
21
|
-
s.add_runtime_dependency "logstash-core-plugin-api", "~>
|
21
|
+
s.add_runtime_dependency "logstash-core-plugin-api", "~> 2.0"
|
22
22
|
s.add_runtime_dependency 'logstash-codec-plain'
|
23
23
|
s.add_runtime_dependency 'logstash-mixin-http_client', ">= 2.2.4", "< 3.0.0"
|
24
24
|
s.add_runtime_dependency 'stud', "~> 0.0.22"
|
25
|
-
s.add_runtime_dependency 'rufus-scheduler', "~>3.0.9"
|
26
25
|
|
27
26
|
s.add_development_dependency 'logstash-codec-json'
|
28
27
|
s.add_development_dependency 'logstash-devutils'
|
29
28
|
s.add_development_dependency 'flores'
|
30
|
-
s.add_development_dependency 'timecop'
|
31
29
|
end
|
@@ -1,14 +1,11 @@
|
|
1
1
|
require "logstash/devutils/rspec/spec_helper"
|
2
2
|
require 'logstash/inputs/http_poller'
|
3
3
|
require 'flores/random'
|
4
|
-
require "timecop"
|
5
4
|
|
6
5
|
describe LogStash::Inputs::HTTP_Poller do
|
7
6
|
let(:metadata_target) { "_http_poller_metadata" }
|
8
7
|
let(:queue) { Queue.new }
|
9
|
-
let(:
|
10
|
-
{ "cron" => "* * * * * UTC" }
|
11
|
-
}
|
8
|
+
let(:default_interval) { 5 }
|
12
9
|
let(:default_name) { "url1 " }
|
13
10
|
let(:default_url) { "http://localhost:1827" }
|
14
11
|
let(:default_urls) {
|
@@ -18,7 +15,7 @@ describe LogStash::Inputs::HTTP_Poller do
|
|
18
15
|
}
|
19
16
|
let(:default_opts) {
|
20
17
|
{
|
21
|
-
"
|
18
|
+
"interval" => default_interval,
|
22
19
|
"urls" => default_urls,
|
23
20
|
"codec" => "json",
|
24
21
|
"metadata_target" => metadata_target
|
@@ -34,13 +31,9 @@ describe LogStash::Inputs::HTTP_Poller do
|
|
34
31
|
end
|
35
32
|
|
36
33
|
describe "#run" do
|
37
|
-
it "should
|
38
|
-
|
39
|
-
|
40
|
-
expect(subject.instance_variable_get("@scheduler")).to be_a_kind_of(Rufus::Scheduler)
|
41
|
-
end
|
42
|
-
runner.kill
|
43
|
-
runner.join
|
34
|
+
it "should run at the specified interval" do
|
35
|
+
expect(Stud).to receive(:interval).with(default_interval).once
|
36
|
+
subject.run(double("queue"))
|
44
37
|
end
|
45
38
|
end
|
46
39
|
|
@@ -158,166 +151,9 @@ describe LogStash::Inputs::HTTP_Poller do
|
|
158
151
|
end
|
159
152
|
end
|
160
153
|
|
161
|
-
describe "scheduler configuration" do
|
162
|
-
context "given an interval" do
|
163
|
-
let(:opts) {
|
164
|
-
{
|
165
|
-
"interval" => 2,
|
166
|
-
"urls" => default_urls,
|
167
|
-
"codec" => "json",
|
168
|
-
"metadata_target" => metadata_target
|
169
|
-
}
|
170
|
-
}
|
171
|
-
it "should run once in each interval" do
|
172
|
-
instance = klass.new(opts)
|
173
|
-
instance.register
|
174
|
-
queue = Queue.new
|
175
|
-
runner = Thread.new do
|
176
|
-
instance.run(queue)
|
177
|
-
end
|
178
|
-
#T 0123456
|
179
|
-
#events x x x x
|
180
|
-
#expects 3 events at T=5
|
181
|
-
sleep 5
|
182
|
-
instance.stop
|
183
|
-
runner.kill
|
184
|
-
runner.join
|
185
|
-
expect(queue.size).to eq(3)
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
context "given both interval and schedule options" do
|
190
|
-
let(:opts) {
|
191
|
-
{
|
192
|
-
"interval" => 1,
|
193
|
-
"schedule" => { "every" => "5s" },
|
194
|
-
"urls" => default_urls,
|
195
|
-
"codec" => "json",
|
196
|
-
"metadata_target" => metadata_target
|
197
|
-
}
|
198
|
-
}
|
199
|
-
it "should raise ConfigurationError" do
|
200
|
-
instance = klass.new(opts)
|
201
|
-
instance.register
|
202
|
-
queue = Queue.new
|
203
|
-
runner = Thread.new do
|
204
|
-
expect{instance.run(queue)}.to raise_error(LogStash::ConfigurationError)
|
205
|
-
end
|
206
|
-
instance.stop
|
207
|
-
runner.kill
|
208
|
-
runner.join
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
context "given 'cron' expression" do
|
213
|
-
let(:opts) {
|
214
|
-
{
|
215
|
-
"schedule" => { "cron" => "* * * * * UTC" },
|
216
|
-
"urls" => default_urls,
|
217
|
-
"codec" => "json",
|
218
|
-
"metadata_target" => metadata_target
|
219
|
-
}
|
220
|
-
}
|
221
|
-
it "should run at the schedule" do
|
222
|
-
instance = klass.new(opts)
|
223
|
-
instance.register
|
224
|
-
Timecop.travel(Time.new(2000,1,1,0,0,0,'+00:00'))
|
225
|
-
Timecop.scale(60)
|
226
|
-
queue = Queue.new
|
227
|
-
runner = Thread.new do
|
228
|
-
instance.run(queue)
|
229
|
-
end
|
230
|
-
sleep 3
|
231
|
-
instance.stop
|
232
|
-
runner.kill
|
233
|
-
runner.join
|
234
|
-
expect(queue.size).to eq(2)
|
235
|
-
Timecop.return
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
context "given 'at' expression" do
|
240
|
-
let(:opts) {
|
241
|
-
{
|
242
|
-
"schedule" => { "at" => "2000-01-01 00:05:00 +0000"},
|
243
|
-
"urls" => default_urls,
|
244
|
-
"codec" => "json",
|
245
|
-
"metadata_target" => metadata_target
|
246
|
-
}
|
247
|
-
}
|
248
|
-
it "should run at the schedule" do
|
249
|
-
instance = klass.new(opts)
|
250
|
-
instance.register
|
251
|
-
Timecop.travel(Time.new(2000,1,1,0,0,0,'+00:00'))
|
252
|
-
Timecop.scale(60 * 5)
|
253
|
-
queue = Queue.new
|
254
|
-
runner = Thread.new do
|
255
|
-
instance.run(queue)
|
256
|
-
end
|
257
|
-
sleep 2
|
258
|
-
instance.stop
|
259
|
-
runner.kill
|
260
|
-
runner.join
|
261
|
-
expect(queue.size).to eq(1)
|
262
|
-
Timecop.return
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
context "given 'every' expression" do
|
267
|
-
let(:opts) {
|
268
|
-
{
|
269
|
-
"schedule" => { "every" => "2s"},
|
270
|
-
"urls" => default_urls,
|
271
|
-
"codec" => "json",
|
272
|
-
"metadata_target" => metadata_target
|
273
|
-
}
|
274
|
-
}
|
275
|
-
it "should run at the schedule" do
|
276
|
-
instance = klass.new(opts)
|
277
|
-
instance.register
|
278
|
-
queue = Queue.new
|
279
|
-
runner = Thread.new do
|
280
|
-
instance.run(queue)
|
281
|
-
end
|
282
|
-
#T 0123456
|
283
|
-
#events x x x x
|
284
|
-
#expects 3 events at T=5
|
285
|
-
sleep 5
|
286
|
-
instance.stop
|
287
|
-
runner.kill
|
288
|
-
runner.join
|
289
|
-
expect(queue.size).to eq(3)
|
290
|
-
end
|
291
|
-
end
|
292
|
-
|
293
|
-
context "given 'in' expression" do
|
294
|
-
let(:opts) {
|
295
|
-
{
|
296
|
-
"schedule" => { "in" => "2s"},
|
297
|
-
"urls" => default_urls,
|
298
|
-
"codec" => "json",
|
299
|
-
"metadata_target" => metadata_target
|
300
|
-
}
|
301
|
-
}
|
302
|
-
it "should run at the schedule" do
|
303
|
-
instance = klass.new(opts)
|
304
|
-
instance.register
|
305
|
-
queue = Queue.new
|
306
|
-
runner = Thread.new do
|
307
|
-
instance.run(queue)
|
308
|
-
end
|
309
|
-
sleep 3
|
310
|
-
instance.stop
|
311
|
-
runner.kill
|
312
|
-
runner.join
|
313
|
-
expect(queue.size).to eq(1)
|
314
|
-
end
|
315
|
-
end
|
316
|
-
end
|
317
|
-
|
318
154
|
describe "events" do
|
319
155
|
shared_examples("matching metadata") {
|
320
|
-
let(:metadata) { event
|
156
|
+
let(:metadata) { event.get(metadata_target) }
|
321
157
|
|
322
158
|
it "should have the correct name" do
|
323
159
|
expect(metadata["name"]).to eql(name)
|
@@ -355,11 +191,11 @@ describe LogStash::Inputs::HTTP_Poller do
|
|
355
191
|
end
|
356
192
|
|
357
193
|
it "should enqueue a message with 'http_request_failure' set" do
|
358
|
-
expect(event
|
194
|
+
expect(event.get("http_request_failure")).to be_a(Hash)
|
359
195
|
end
|
360
196
|
|
361
197
|
it "should tag the event with '_http_request_failure'" do
|
362
|
-
expect(event
|
198
|
+
expect(event.get("tags")).to include('_http_request_failure')
|
363
199
|
end
|
364
200
|
|
365
201
|
it "should invoke handle failure exactly once" do
|
@@ -440,7 +276,7 @@ describe LogStash::Inputs::HTTP_Poller do
|
|
440
276
|
|
441
277
|
it "should not have any metadata on the event" do
|
442
278
|
instance.send(:run_once, queue)
|
443
|
-
expect(event
|
279
|
+
expect(event.get(metadata_target)).to be_nil
|
444
280
|
end
|
445
281
|
end
|
446
282
|
|
@@ -456,9 +292,7 @@ describe LogStash::Inputs::HTTP_Poller do
|
|
456
292
|
}
|
457
293
|
let(:opts) {
|
458
294
|
{
|
459
|
-
"
|
460
|
-
"cron" => "* * * * * UTC"
|
461
|
-
},
|
295
|
+
"interval" => default_interval,
|
462
296
|
"urls" => {
|
463
297
|
default_name => url
|
464
298
|
},
|
@@ -482,7 +316,7 @@ describe LogStash::Inputs::HTTP_Poller do
|
|
482
316
|
# When events go through the pipeline they are java-ified
|
483
317
|
# this normalizes the payload to java types
|
484
318
|
payload_normalized = LogStash::Json.load(LogStash::Json.dump(payload))
|
485
|
-
expect(event
|
319
|
+
expect(event.get(target)).to include(payload_normalized)
|
486
320
|
end
|
487
321
|
end
|
488
322
|
end
|
metadata
CHANGED
@@ -1,45 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-http_poller
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
- andrewvc
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-05-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
+
name: logstash-core-plugin-api
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
18
|
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
name: logstash-core-plugin-api
|
21
|
-
prerelease: false
|
20
|
+
version: '2.0'
|
22
21
|
type: :runtime
|
22
|
+
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '2.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
+
name: logstash-codec-plain
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
32
|
- - ">="
|
32
33
|
- !ruby/object:Gem::Version
|
33
34
|
version: '0'
|
34
|
-
name: logstash-codec-plain
|
35
|
-
prerelease: false
|
36
35
|
type: :runtime
|
36
|
+
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
+
name: logstash-mixin-http_client
|
43
44
|
requirement: !ruby/object:Gem::Requirement
|
44
45
|
requirements:
|
45
46
|
- - ">="
|
@@ -48,9 +49,8 @@ dependencies:
|
|
48
49
|
- - "<"
|
49
50
|
- !ruby/object:Gem::Version
|
50
51
|
version: 3.0.0
|
51
|
-
name: logstash-mixin-http_client
|
52
|
-
prerelease: false
|
53
52
|
type: :runtime
|
53
|
+
prerelease: false
|
54
54
|
version_requirements: !ruby/object:Gem::Requirement
|
55
55
|
requirements:
|
56
56
|
- - ">="
|
@@ -60,90 +60,64 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 3.0.0
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
+
name: stud
|
63
64
|
requirement: !ruby/object:Gem::Requirement
|
64
65
|
requirements:
|
65
66
|
- - "~>"
|
66
67
|
- !ruby/object:Gem::Version
|
67
68
|
version: 0.0.22
|
68
|
-
name: stud
|
69
|
-
prerelease: false
|
70
69
|
type: :runtime
|
71
|
-
version_requirements: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 0.0.22
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "~>"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: 3.0.9
|
82
|
-
name: rufus-scheduler
|
83
70
|
prerelease: false
|
84
|
-
type: :runtime
|
85
71
|
version_requirements: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
73
|
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
75
|
+
version: 0.0.22
|
90
76
|
- !ruby/object:Gem::Dependency
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - ">="
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '0'
|
96
77
|
name: logstash-codec-json
|
97
|
-
prerelease: false
|
98
|
-
type: :development
|
99
|
-
version_requirements: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
78
|
requirement: !ruby/object:Gem::Requirement
|
106
79
|
requirements:
|
107
80
|
- - ">="
|
108
81
|
- !ruby/object:Gem::Version
|
109
82
|
version: '0'
|
110
|
-
name: logstash-devutils
|
111
|
-
prerelease: false
|
112
83
|
type: :development
|
84
|
+
prerelease: false
|
113
85
|
version_requirements: !ruby/object:Gem::Requirement
|
114
86
|
requirements:
|
115
87
|
- - ">="
|
116
88
|
- !ruby/object:Gem::Version
|
117
89
|
version: '0'
|
118
90
|
- !ruby/object:Gem::Dependency
|
91
|
+
name: logstash-devutils
|
119
92
|
requirement: !ruby/object:Gem::Requirement
|
120
93
|
requirements:
|
121
94
|
- - ">="
|
122
95
|
- !ruby/object:Gem::Version
|
123
96
|
version: '0'
|
124
|
-
name: flores
|
125
|
-
prerelease: false
|
126
97
|
type: :development
|
98
|
+
prerelease: false
|
127
99
|
version_requirements: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
101
|
- - ">="
|
130
102
|
- !ruby/object:Gem::Version
|
131
103
|
version: '0'
|
132
104
|
- !ruby/object:Gem::Dependency
|
105
|
+
name: flores
|
133
106
|
requirement: !ruby/object:Gem::Requirement
|
134
107
|
requirements:
|
135
108
|
- - ">="
|
136
109
|
- !ruby/object:Gem::Version
|
137
110
|
version: '0'
|
138
|
-
name: timecop
|
139
|
-
prerelease: false
|
140
111
|
type: :development
|
112
|
+
prerelease: false
|
141
113
|
version_requirements: !ruby/object:Gem::Requirement
|
142
114
|
requirements:
|
143
115
|
- - ">="
|
144
116
|
- !ruby/object:Gem::Version
|
145
117
|
version: '0'
|
146
|
-
description: This gem is a Logstash plugin required to be installed on top of the
|
118
|
+
description: This gem is a Logstash plugin required to be installed on top of the
|
119
|
+
Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
|
120
|
+
gem is not a stand-alone program
|
147
121
|
email: info@elastic.co
|
148
122
|
executables: []
|
149
123
|
extensions: []
|
@@ -163,7 +137,7 @@ licenses:
|
|
163
137
|
metadata:
|
164
138
|
logstash_plugin: 'true'
|
165
139
|
logstash_group: input
|
166
|
-
post_install_message:
|
140
|
+
post_install_message:
|
167
141
|
rdoc_options: []
|
168
142
|
require_paths:
|
169
143
|
- lib
|
@@ -178,9 +152,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
152
|
- !ruby/object:Gem::Version
|
179
153
|
version: '0'
|
180
154
|
requirements: []
|
181
|
-
rubyforge_project:
|
182
|
-
rubygems_version: 2.
|
183
|
-
signing_key:
|
155
|
+
rubyforge_project:
|
156
|
+
rubygems_version: 2.5.1
|
157
|
+
signing_key:
|
184
158
|
specification_version: 4
|
185
159
|
summary: Poll HTTP endpoints with Logstash.
|
186
160
|
test_files:
|