logstash-input-gelf 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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.