logstash-input-heartbeat 0.1.2 → 0.1.4
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/Gemfile +1 -3
- data/README.md +12 -21
- data/lib/logstash/inputs/heartbeat.rb +20 -15
- data/logstash-input-heartbeat.gemspec +3 -4
- data/spec/inputs/heartbeat_spec.rb +70 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0453e13da1d157935c3e73ccf420f85198069d66
|
4
|
+
data.tar.gz: ec269a6b10f45da44a83f282d1f7c65dee35c339
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 467e575a02b9eb6711ed79a233acc6dc4a39f5bf416dd4602488aad96de581bea7dba44d5d34351bf2e4b211928b794ee15cfe492857f2478264c69369638b1d
|
7
|
+
data.tar.gz: cb6274d921ca873117b1dc41314425f9513e6f2e5eda041676036af8b33b4517af3c5a5aff6887a52e5b8a14327bd2888c3f5f2bc1fa2e05dbfa1773c15c6f2c
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -22,7 +22,7 @@ Need help? Try #logstash on freenode IRC or the logstash-users@googlegroups.com
|
|
22
22
|
#### Code
|
23
23
|
- To get started, you'll need JRuby with the Bundler gem installed.
|
24
24
|
|
25
|
-
- Create a new plugin or clone and existing from the GitHub [logstash-plugins](https://github.com/logstash-plugins) organization.
|
25
|
+
- Create a new plugin or clone and existing from the GitHub [logstash-plugins](https://github.com/logstash-plugins) organization. We also provide [example plugins](https://github.com/logstash-plugins?query=example).
|
26
26
|
|
27
27
|
- Install dependencies
|
28
28
|
```sh
|
@@ -31,26 +31,15 @@ bundle install
|
|
31
31
|
|
32
32
|
#### Test
|
33
33
|
|
34
|
-
|
35
|
-
bundle exec rspec
|
36
|
-
```
|
34
|
+
- Update your dependencies
|
37
35
|
|
38
|
-
|
39
|
-
|
40
|
-
gem "logstash", :github => "elasticsearch/logstash", :branch => "1.5"
|
41
|
-
```
|
42
|
-
To test against another version or a local Logstash, edit the `Gemfile` to specify an alternative location, for example:
|
43
|
-
```ruby
|
44
|
-
gem "logstash", :github => "elasticsearch/logstash", :ref => "master"
|
45
|
-
```
|
46
|
-
```ruby
|
47
|
-
gem "logstash", :path => "/your/local/logstash"
|
36
|
+
```sh
|
37
|
+
bundle install
|
48
38
|
```
|
49
39
|
|
50
|
-
|
40
|
+
- Run tests
|
51
41
|
|
52
42
|
```sh
|
53
|
-
bundle install
|
54
43
|
bundle exec rspec
|
55
44
|
```
|
56
45
|
|
@@ -58,13 +47,13 @@ bundle exec rspec
|
|
58
47
|
|
59
48
|
#### 2.1 Run in a local Logstash clone
|
60
49
|
|
61
|
-
- Edit Logstash `
|
50
|
+
- Edit Logstash `Gemfile` and add the local plugin path, for example:
|
62
51
|
```ruby
|
63
52
|
gem "logstash-filter-awesome", :path => "/your/local/logstash-filter-awesome"
|
64
53
|
```
|
65
|
-
-
|
54
|
+
- Install plugin
|
66
55
|
```sh
|
67
|
-
|
56
|
+
bin/plugin install --no-verify
|
68
57
|
```
|
69
58
|
- Run Logstash with your plugin
|
70
59
|
```sh
|
@@ -74,6 +63,8 @@ At this point any modifications to the plugin code will be applied to this local
|
|
74
63
|
|
75
64
|
#### 2.2 Run in an installed Logstash
|
76
65
|
|
66
|
+
You can use the same **2.1** method to run your plugin in an installed Logstash by editing its `Gemfile` and pointing the `:path` to your local plugin development directory or you can build the gem and install it using:
|
67
|
+
|
77
68
|
- Build your plugin gem
|
78
69
|
```sh
|
79
70
|
gem build logstash-filter-awesome.gemspec
|
@@ -90,6 +81,6 @@ All contributions are welcome: ideas, patches, documentation, bug reports, compl
|
|
90
81
|
|
91
82
|
Programming is not a required skill. Whatever you've seen about open source and maintainers or community members saying "send patches or die" - you will not see that here.
|
92
83
|
|
93
|
-
It is more important to
|
84
|
+
It is more important to the community that you are able to contribute.
|
94
85
|
|
95
|
-
For more information about contributing, see the [CONTRIBUTING](https://github.com/elasticsearch/logstash/blob/master/CONTRIBUTING.md) file.
|
86
|
+
For more information about contributing, see the [CONTRIBUTING](https://github.com/elasticsearch/logstash/blob/master/CONTRIBUTING.md) file.
|
@@ -6,7 +6,7 @@ require "socket" # for Socket.gethostname
|
|
6
6
|
|
7
7
|
# Generate heartbeat messages.
|
8
8
|
#
|
9
|
-
# The general intention of this is to test the performance and
|
9
|
+
# The general intention of this is to test the performance and
|
10
10
|
# availability of Logstash.
|
11
11
|
#
|
12
12
|
|
@@ -20,8 +20,8 @@ class LogStash::Inputs::Heartbeat < LogStash::Inputs::Threadable
|
|
20
20
|
# If you set this to `epoch` then this plugin will use the current
|
21
21
|
# timestamp in unix timestamp (which is by definition, UTC). It will
|
22
22
|
# output this value into a field called `clock`
|
23
|
-
#
|
24
|
-
# If you set this to `sequence` then this plugin will send a sequence of
|
23
|
+
#
|
24
|
+
# If you set this to `sequence` then this plugin will send a sequence of
|
25
25
|
# numbers beginning at 0 and incrementing each interval. It will
|
26
26
|
# output this value into a field called `clock`
|
27
27
|
#
|
@@ -34,6 +34,10 @@ class LogStash::Inputs::Heartbeat < LogStash::Inputs::Threadable
|
|
34
34
|
# The default, `60`, means send a message every 60 seconds.
|
35
35
|
config :interval, :validate => :number, :default => 60
|
36
36
|
|
37
|
+
# How many times to iterate.
|
38
|
+
# This is typically used only for testing purposes.
|
39
|
+
config :count, :validate => :number, :default => -1
|
40
|
+
|
37
41
|
public
|
38
42
|
def register
|
39
43
|
@host = Socket.gethostname
|
@@ -43,23 +47,24 @@ class LogStash::Inputs::Heartbeat < LogStash::Inputs::Threadable
|
|
43
47
|
sequence = 0
|
44
48
|
|
45
49
|
Stud.interval(@interval) do
|
46
|
-
|
47
|
-
|
48
|
-
elsif @message == "sequence"
|
49
|
-
event = LogStash::Event.new("clock" => sequence, "host" => @host)
|
50
|
-
sequence += 1
|
51
|
-
else
|
52
|
-
event = LogStash::Event.new("message" => @message, "host" => @host)
|
53
|
-
end
|
54
|
-
|
50
|
+
sequence += 1
|
51
|
+
event = generate_message(sequence)
|
55
52
|
decorate(event)
|
56
53
|
queue << event
|
57
|
-
|
54
|
+
break if sequence == @count
|
58
55
|
end # loop
|
59
56
|
|
60
57
|
end # def run
|
61
58
|
|
62
59
|
public
|
63
|
-
def
|
64
|
-
|
60
|
+
def generate_message(sequence)
|
61
|
+
if @message == "epoch"
|
62
|
+
LogStash::Event.new("clock" => Time.now.to_i, "host" => @host)
|
63
|
+
elsif @message == "sequence"
|
64
|
+
LogStash::Event.new("clock" => sequence, "host" => @host)
|
65
|
+
else
|
66
|
+
LogStash::Event.new("message" => @message, "host" => @host)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
65
70
|
end # class LogStash::Inputs::Heartbeat
|
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-input-heartbeat'
|
4
|
-
s.version = '0.1.
|
4
|
+
s.version = '0.1.4'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "This input generates a heartbeat pattern to aid in monitoring Logstash performance & availability"
|
7
|
-
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"
|
7
|
+
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"
|
8
8
|
s.authors = ["Elasticsearch"]
|
9
9
|
s.email = 'info@elasticsearch.com'
|
10
10
|
s.homepage = "http://www.elasticsearch.org/guide/en/logstash/current/index.html"
|
@@ -20,11 +20,10 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
|
21
21
|
|
22
22
|
# Gem dependencies
|
23
|
-
s.add_runtime_dependency
|
23
|
+
s.add_runtime_dependency "logstash-core", '>= 1.4.0', '< 2.0.0'
|
24
24
|
s.add_runtime_dependency 'logstash-codec-plain'
|
25
25
|
s.add_runtime_dependency 'stud'
|
26
26
|
|
27
27
|
s.add_development_dependency 'logstash-devutils'
|
28
28
|
|
29
29
|
end
|
30
|
-
|
@@ -1 +1,71 @@
|
|
1
1
|
require "logstash/devutils/rspec/spec_helper"
|
2
|
+
require "logstash/inputs/heartbeat"
|
3
|
+
|
4
|
+
def fetch_event(config, number)
|
5
|
+
pipeline = LogStash::Pipeline.new(config)
|
6
|
+
queue = Queue.new
|
7
|
+
pipeline.instance_eval do
|
8
|
+
@output_func = lambda { |event| queue << event }
|
9
|
+
end
|
10
|
+
pipeline_thread = Thread.new { pipeline.run }
|
11
|
+
counter = 0
|
12
|
+
begin
|
13
|
+
event = queue.pop
|
14
|
+
pipeline_thread.join
|
15
|
+
counter += 1
|
16
|
+
end until counter == number
|
17
|
+
return event
|
18
|
+
end
|
19
|
+
|
20
|
+
describe LogStash::Inputs::Heartbeat do
|
21
|
+
sequence = 1
|
22
|
+
context "Default message test" do
|
23
|
+
subject { LogStash::Inputs::Heartbeat.new({}) }
|
24
|
+
|
25
|
+
it "should generate an 'ok' message" do
|
26
|
+
expect(subject.generate_message(sequence)['message']).to eq('ok')
|
27
|
+
end # it "should generate an 'ok' message"
|
28
|
+
end # context "Default message test"
|
29
|
+
|
30
|
+
context "Simple message test" do
|
31
|
+
subject { LogStash::Inputs::Heartbeat.new({"message" => "my_message"}) }
|
32
|
+
|
33
|
+
it "should generate a message containing 'my_message'" do
|
34
|
+
expect(subject.generate_message(sequence)['message']).to eq('my_message')
|
35
|
+
end # it "should generate a message containing 'my_message'"
|
36
|
+
end # context "Simple message test" do
|
37
|
+
|
38
|
+
context "Sequence test" do
|
39
|
+
subject { LogStash::Inputs::Heartbeat.new({"message" => "sequence"}) }
|
40
|
+
|
41
|
+
it "should return an event with the appropriate sequence value" do
|
42
|
+
expect(subject.generate_message(sequence)['clock']).to eq(sequence)
|
43
|
+
end # it "should return an event with the appropriate sequence value"
|
44
|
+
end # context "Sequence test"
|
45
|
+
|
46
|
+
context "Epoch test" do
|
47
|
+
subject { LogStash::Inputs::Heartbeat.new({"message" => "epoch"}) }
|
48
|
+
|
49
|
+
it "should return an event with the current time (as epoch)" do
|
50
|
+
now = Time.now.to_i
|
51
|
+
# Give it a second, just in case
|
52
|
+
expect(subject.generate_message(sequence)['clock'] - now).to be < 2
|
53
|
+
end # it "should return an event with the current time (as epoch)"
|
54
|
+
end # context "Epoch test"
|
55
|
+
|
56
|
+
it "should generate a fixed number of events then stop" do
|
57
|
+
count = 4
|
58
|
+
config = <<-CONFIG
|
59
|
+
input {
|
60
|
+
heartbeat {
|
61
|
+
interval => 1
|
62
|
+
message => "sequence"
|
63
|
+
count => #{count}
|
64
|
+
}
|
65
|
+
}
|
66
|
+
CONFIG
|
67
|
+
|
68
|
+
event = fetch_event(config, count)
|
69
|
+
expect(event['clock']).to eq(count)
|
70
|
+
end
|
71
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-heartbeat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elasticsearch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
- - <
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 2.0.0
|
22
|
-
name: logstash
|
22
|
+
name: logstash-core
|
23
23
|
prerelease: false
|
24
24
|
type: :runtime
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -110,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
110
|
version: '0'
|
111
111
|
requirements: []
|
112
112
|
rubyforge_project:
|
113
|
-
rubygems_version: 2.
|
113
|
+
rubygems_version: 2.4.5
|
114
114
|
signing_key:
|
115
115
|
specification_version: 4
|
116
116
|
summary: This input generates a heartbeat pattern to aid in monitoring Logstash performance & availability
|