logstash-input-gelf 0.1.3 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 03130364178a5584b79d86fe5c733e7f9cc3c858
4
- data.tar.gz: 1f641dfde9e0decddfc65c9cf902e23af80548fa
3
+ metadata.gz: 52258ea5dad3be0c68d370076faeba0bf29bfe7f
4
+ data.tar.gz: 904825063dd304497288f92d3a952e4d198a140f
5
5
  SHA512:
6
- metadata.gz: 0aa0f87a733910dd9d8c5cc5c6461eaa4bf02705e50145b5061f21b669649e4fce428d3ad4e609c9321d7d2272bf1e47e0174b8081e453f50f963cc6dff53b61
7
- data.tar.gz: d7e65985b37b75b59b1a28c2ab1c5db04dc3c8cad17a1ed8f2b6e8a0d2c6b58a18c5922387fa3cfecb1cd6e468d2cdd6f0d714604ce2abd98a6291abd663faf1
6
+ metadata.gz: 4886887976084fa782ce6764ccaf2303e4357d2dc9ac9b1c760b40fd96b5d5de422ab53f672907ad0443ec9b497dcd29e2f3f8faf50c48e09183cc71ac1c0a1d
7
+ data.tar.gz: 74c8686ea43e97ad1b950c288be5ee255c830851d47e19afab9034187e91a7436f3b5396007aa58b53c912df92578796aa9150d12bb8e1d24d960f1a54747297
@@ -46,12 +46,13 @@ class LogStash::Inputs::Gelf < LogStash::Inputs::Base
46
46
  def initialize(params)
47
47
  super
48
48
  BasicSocket.do_not_reverse_lookup = true
49
+ @shutdown_requested = false
50
+ @udp = nil
49
51
  end # def initialize
50
52
 
51
53
  public
52
54
  def register
53
55
  require 'gelfd'
54
- @udp = nil
55
56
  end # def register
56
57
 
57
58
  public
@@ -59,13 +60,28 @@ class LogStash::Inputs::Gelf < LogStash::Inputs::Base
59
60
  begin
60
61
  # udp server
61
62
  udp_listener(output_queue)
63
+ rescue LogStash::ShutdownSignal
64
+ @shutdown_requested = true
62
65
  rescue => e
63
- @logger.warn("gelf listener died", :exception => e, :backtrace => e.backtrace)
64
- sleep(5)
65
- retry
66
+ unless @shutdown_requested
67
+ @logger.warn("gelf listener died", :exception => e, :backtrace => e.backtrace)
68
+ sleep(5)
69
+ retry
70
+ end
66
71
  end # begin
67
72
  end # def run
68
73
 
74
+ public
75
+ def teardown
76
+ @shutdown_requested = true
77
+ if @udp
78
+ @udp.close_read rescue nil
79
+ @udp.close_write rescue nil
80
+ @udp = nil
81
+ end
82
+ finished
83
+ end
84
+
69
85
  private
70
86
  def udp_listener(output_queue)
71
87
  @logger.info("Starting gelf listener", :address => "#{@host}:#{@port}")
@@ -78,7 +94,7 @@ class LogStash::Inputs::Gelf < LogStash::Inputs::Base
78
94
  @udp = UDPSocket.new(Socket::AF_INET)
79
95
  @udp.bind(@host, @port)
80
96
 
81
- while true
97
+ while !@shutdown_requested
82
98
  line, client = @udp.recvfrom(8192)
83
99
  begin
84
100
  data = Gelfd::Parser.parse(line)
@@ -91,6 +107,7 @@ class LogStash::Inputs::Gelf < LogStash::Inputs::Base
91
107
  next if data.nil?
92
108
 
93
109
  event = LogStash::Event.new(LogStash::Json.load(data))
110
+
94
111
  event["source_host"] = client[3]
95
112
  if event["timestamp"].is_a?(Numeric)
96
113
  event.timestamp = LogStash::Timestamp.at(event["timestamp"])
@@ -99,15 +116,9 @@ class LogStash::Inputs::Gelf < LogStash::Inputs::Base
99
116
  remap_gelf(event) if @remap
100
117
  strip_leading_underscore(event) if @strip_leading_underscore
101
118
  decorate(event)
119
+
102
120
  output_queue << event
103
121
  end
104
- rescue LogStash::ShutdownSignal
105
- # Do nothing, shutdown.
106
- ensure
107
- if @udp
108
- @udp.close_read rescue nil
109
- @udp.close_write rescue nil
110
- end
111
122
  end # def udp_listener
112
123
 
113
124
  private
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-gelf'
4
- s.version = '0.1.3'
4
+ s.version = '0.1.4'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "This input will read GELF messages as events over the network, making it a good choice if you already use Graylog2 today."
7
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"
@@ -1,16 +1,16 @@
1
-
2
1
  require "logstash/devutils/rspec/spec_helper"
2
+ require "logstash/inputs/gelf"
3
3
  require "gelf"
4
+
4
5
  describe "inputs/gelf" do
5
-
6
6
 
7
- describe "reads chunked gelf messages " do
7
+ it "reads chunked gelf messages " do
8
8
  port = 12209
9
9
  host = "127.0.0.1"
10
10
  chunksize = 1420
11
- gelfclient = GELF::Notifier.new(host,port,chunksize)
11
+ gelfclient = GELF::Notifier.new(host, port, chunksize)
12
12
 
13
- config <<-CONFIG
13
+ conf = <<-CONFIG
14
14
  input {
15
15
  gelf {
16
16
  port => "#{port}"
@@ -19,34 +19,37 @@ describe "inputs/gelf" do
19
19
  }
20
20
  CONFIG
21
21
 
22
- input do |pipeline, queue|
23
- Thread.new { pipeline.run }
24
- sleep 0.1 while !pipeline.ready?
22
+ large_random = 2000.times.map{32 + rand(126 - 32)}.join("")
23
+
24
+ messages = [
25
+ "hello",
26
+ "world",
27
+ large_random,
28
+ "we survived gelf!"
29
+ ]
30
+
31
+ events = input(conf) do |pipeline, queue|
32
+ # send a first message until plugin is up and receives it
33
+ while queue.size <= 0
34
+ gelfclient.notify!("short_message" => "prime")
35
+ sleep(0.1)
36
+ end
37
+ gelfclient.notify!("short_message" => "start")
25
38
 
26
- # generate random characters (message is zipped!) from printable ascii ( SPACE till ~ )
27
- # to trigger gelf chunking
28
- s = StringIO.new
29
- for i in 1..2000
30
- s << 32 + rand(126-32)
39
+ e = queue.pop
40
+ while (e["message"] != "start")
41
+ e = queue.pop
31
42
  end
32
- large_random = s.string
33
-
34
- [ "hello",
35
- "world",
36
- large_random,
37
- "we survived gelf!"
38
- ].each do |m|
39
- gelfclient.notify!( "short_message" => m )
40
- # poll at most 10 times
41
- waits = 0
42
- while waits < 10 and queue.size == 0
43
- sleep 0.1
44
- waits += 1
45
- end
46
- insist { queue.size } > 0
47
- insist { queue.pop["message"] } == m
43
+
44
+ messages.each do |m|
45
+ gelfclient.notify!("short_message" => m)
48
46
  end
49
47
 
48
+ messages.map{queue.pop}
49
+ end
50
+
51
+ events.each_with_index do |e, i|
52
+ insist { e["message"] } == messages[i]
50
53
  end
51
54
  end
52
55
  end
metadata CHANGED
@@ -1,17 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-gelf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
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-02-26 00:00:00.000000000 Z
11
+ date: 2015-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- requirement: !ruby/object:Gem::Requirement
14
+ name: logstash-core
15
+ version_requirements: !ruby/object:Gem::Requirement
15
16
  requirements:
16
17
  - - '>='
17
18
  - !ruby/object:Gem::Version
@@ -19,10 +20,7 @@ dependencies:
19
20
  - - <
20
21
  - !ruby/object:Gem::Version
21
22
  version: 2.0.0
22
- name: logstash-core
23
- prerelease: false
24
- type: :runtime
25
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: !ruby/object:Gem::Requirement
26
24
  requirements:
27
25
  - - '>='
28
26
  - !ruby/object:Gem::Version
@@ -30,62 +28,64 @@ dependencies:
30
28
  - - <
31
29
  - !ruby/object:Gem::Version
32
30
  version: 2.0.0
31
+ prerelease: false
32
+ type: :runtime
33
33
  - !ruby/object:Gem::Dependency
34
+ name: gelfd
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '='
38
+ - !ruby/object:Gem::Version
39
+ version: 0.2.0
34
40
  requirement: !ruby/object:Gem::Requirement
35
41
  requirements:
36
42
  - - '='
37
43
  - !ruby/object:Gem::Version
38
44
  version: 0.2.0
39
- name: gelfd
40
45
  prerelease: false
41
46
  type: :runtime
47
+ - !ruby/object:Gem::Dependency
48
+ name: gelf
42
49
  version_requirements: !ruby/object:Gem::Requirement
43
50
  requirements:
44
51
  - - '='
45
52
  - !ruby/object:Gem::Version
46
- version: 0.2.0
47
- - !ruby/object:Gem::Dependency
53
+ version: 1.3.2
48
54
  requirement: !ruby/object:Gem::Requirement
49
55
  requirements:
50
56
  - - '='
51
57
  - !ruby/object:Gem::Version
52
58
  version: 1.3.2
53
- name: gelf
54
59
  prerelease: false
55
60
  type: :runtime
61
+ - !ruby/object:Gem::Dependency
62
+ name: logstash-codec-plain
56
63
  version_requirements: !ruby/object:Gem::Requirement
57
64
  requirements:
58
- - - '='
65
+ - - '>='
59
66
  - !ruby/object:Gem::Version
60
- version: 1.3.2
61
- - !ruby/object:Gem::Dependency
67
+ version: '0'
62
68
  requirement: !ruby/object:Gem::Requirement
63
69
  requirements:
64
70
  - - '>='
65
71
  - !ruby/object:Gem::Version
66
72
  version: '0'
67
- name: logstash-codec-plain
68
73
  prerelease: false
69
74
  type: :runtime
75
+ - !ruby/object:Gem::Dependency
76
+ name: logstash-devutils
70
77
  version_requirements: !ruby/object:Gem::Requirement
71
78
  requirements:
72
79
  - - '>='
73
80
  - !ruby/object:Gem::Version
74
81
  version: '0'
75
- - !ruby/object:Gem::Dependency
76
82
  requirement: !ruby/object:Gem::Requirement
77
83
  requirements:
78
84
  - - '>='
79
85
  - !ruby/object:Gem::Version
80
86
  version: '0'
81
- name: logstash-devutils
82
87
  prerelease: false
83
88
  type: :development
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - '>='
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
89
  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
90
90
  email: info@elasticsearch.com
91
91
  executables: []
@@ -123,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  version: '0'
124
124
  requirements: []
125
125
  rubyforge_project:
126
- rubygems_version: 2.4.5
126
+ rubygems_version: 2.1.9
127
127
  signing_key:
128
128
  specification_version: 4
129
129
  summary: This input will read GELF messages as events over the network, making it a good choice if you already use Graylog2 today.