logstash_rails 0.0.15 → 0.0.16

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