logstash_rails 0.0.15 → 0.0.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.
@@ -1,18 +1,23 @@
1
+ require 'celluloid/io'
2
+ require 'celluloid/io'
3
+
1
4
  module LogstashRails
2
5
  module Transport
3
6
  class LogstashTcp < TransportBase
4
7
 
5
8
  def initialize(options)
6
- host = options[:host] || 'localhost'
7
- port = options.fetch(:port)
8
-
9
- @socket = TCPSocket.new(host, port)
9
+ @host = options[:host] || 'localhost'
10
+ @port = options.fetch(:port)
10
11
 
11
12
  super
12
13
  end
13
14
 
14
15
  def push(json_event)
15
16
  @socket.write(json_event)
17
+ rescue Errno::EPIPE, Errno::ECONNREFUSED, NoMethodError => e
18
+ log(e)
19
+ connect!
20
+ retry
16
21
  end
17
22
 
18
23
  def destroy
@@ -20,6 +25,12 @@ module LogstashRails
20
25
  @socket.close
21
26
  end
22
27
 
28
+ private
29
+
30
+ def connect!
31
+ @socket = Celluloid::IO::TCPSocket.new(@host, @port)
32
+ end
33
+
23
34
  end
24
35
  end
25
36
  end
@@ -1,3 +1,3 @@
1
1
  module LogstashRails
2
- VERSION = "0.0.15"
2
+ VERSION = "0.0.16"
3
3
  end
@@ -16,7 +16,8 @@ Gem::Specification.new do |gem|
16
16
  gem.test_files = gem.files.grep(%r{^spec/})
17
17
  gem.require_paths = ["lib"]
18
18
 
19
- gem.add_dependency('logstash-event')
19
+ gem.add_dependency('logstash-event', '~> 1.2.02')
20
20
  gem.add_dependency('activesupport')
21
21
  gem.add_dependency('redis')
22
+ gem.add_dependency('celluloid-io')
22
23
  end
@@ -11,7 +11,7 @@ describe 'generated logstash event' do
11
11
  end
12
12
 
13
13
  it 'has the event type as message' do
14
- JSON.parse(Redis.new.lpop('logstash'))['@message'].should eq "process_action.action_controller"
14
+ JSON.parse(Redis.new.lpop('logstash'))['message'].should eq "process_action.action_controller"
15
15
  end
16
16
 
17
17
  end
@@ -23,6 +23,9 @@ describe LogstashRails::Transport::LogstashTcp do
23
23
  end
24
24
 
25
25
  it 'should close the tcp socket' do
26
+ # initialize tcp socket
27
+ logstash_tcp.push 'toto'
28
+
26
29
  socket = logstash_tcp.instance_variable_get(:@socket)
27
30
  expect{ logstash_tcp.destroy }.to change{ socket.closed? }.from(false).to(true)
28
31
  end
@@ -33,4 +36,11 @@ describe LogstashRails::Transport::LogstashTcp do
33
36
  @thread.join
34
37
  @received.should eq 'toto'
35
38
  end
39
+
40
+ it 'lazily connects the socket' do
41
+ expect{ logstash_tcp.push 'toto' }.to change{
42
+ logstash_tcp.instance_variable_get(:@socket).class
43
+ }
44
+ end
45
+
36
46
  end
@@ -27,24 +27,23 @@ describe LogstashRails::Transport::Redis do
27
27
  subject.push 'foo'
28
28
  Redis.new.lpop 'logstash'
29
29
 
30
- if fork
31
- w.close
32
-
33
- r.read.should eq 'true'
34
-
35
- Process.wait
36
- else
37
-
30
+ fork do
38
31
  # use connection in child process
39
32
  subject.push 'bar'
40
33
 
41
34
  w.write(Redis.new.lpop('logstash') == 'bar')
42
35
  w.flush
43
36
 
37
+ # override exit hooks
44
38
  SimpleCov.at_exit{}
45
39
  Process.exit! true
46
40
  end
47
41
 
42
+ w.close
43
+
44
+ r.read.should eq 'true'
45
+
46
+ Process.wait
48
47
  end
49
48
 
50
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.16
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,10 +9,26 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-25 00:00:00.000000000 Z
12
+ date: 2013-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: logstash-event
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.2.02
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.2.02
30
+ - !ruby/object:Gem::Dependency
31
+ name: activesupport
16
32
  requirement: !ruby/object:Gem::Requirement
17
33
  none: false
18
34
  requirements:
@@ -28,7 +44,7 @@ dependencies:
28
44
  - !ruby/object:Gem::Version
29
45
  version: '0'
30
46
  - !ruby/object:Gem::Dependency
31
- name: activesupport
47
+ name: redis
32
48
  requirement: !ruby/object:Gem::Requirement
33
49
  none: false
34
50
  requirements:
@@ -44,7 +60,7 @@ dependencies:
44
60
  - !ruby/object:Gem::Version
45
61
  version: '0'
46
62
  - !ruby/object:Gem::Dependency
47
- name: redis
63
+ name: celluloid-io
48
64
  requirement: !ruby/object:Gem::Requirement
49
65
  none: false
50
66
  requirements:
@@ -106,7 +122,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
122
  version: '0'
107
123
  segments:
108
124
  - 0
109
- hash: -706891558612053721
125
+ hash: 4605437770903519809
110
126
  required_rubygems_version: !ruby/object:Gem::Requirement
111
127
  none: false
112
128
  requirements:
@@ -115,10 +131,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
131
  version: '0'
116
132
  segments:
117
133
  - 0
118
- hash: -706891558612053721
134
+ hash: 4605437770903519809
119
135
  requirements: []
120
136
  rubyforge_project:
121
- rubygems_version: 1.8.25
137
+ rubygems_version: 1.8.24
122
138
  signing_key:
123
139
  specification_version: 3
124
140
  summary: Send events from Rails to Logstash without logger foo.